关于logistic regression的思考

本文探讨了Logistic回归为何适用于线性预测及二分类问题。解释了经典线性模型与广义线性模型的区别,并详细说明了Logistic回归的原理及求解方法。

参考原文来自 http://www.cnblogs.com/549294286/p/3273296.html

http://www.hanlongfei.com/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/2015/08/05/mle/


1. logistic regression为什么能对线性问题进行预测? 

我们都知道logistic regression可以用来处理线性问题,那么问题来了,logistic  regression为什么能对线性问题进行预测?

为了回答这个问题,首先要弄明白什么是线性预测。

1.1 什么是线性预测?

线性预测是通过线性模型来对样本进行的预测。线性模型是一个函数,这个函数通过属性的线性组合来对结果进行预测。线性模型分为经典线性模型   广义线性模型 。logistic regression用到的是广义线性预测。经典线性模型:自变量的线性预测结果就是因变量的估计值。广义线性模型:自变量的线性预测值的函数是因变量的估计值。常见的广义线性模型有:probit模型,poisson模型(泊松模型)、对数线性模型等。广义线性模型形式上是线性回归,但本质上上输入空间到输出空间的非线性函数映射。

1.2 二分类问题为什么没有使用传统的线性回归模型,而是是使用logistic regression?

线性回归用于而分类,首先想到的应该是  这个公式,这里,P对应分类的类别{0, 1}, 但是这个公式存在一些问题:

1)等式两边取值范围不同。等式右边的取值是整个实数集R,而左边取值是{0, 1}, 所以经典线性模型在分类问题中存在问题。(线性回归不能保证预测值的范围位于[0, 1]之间。)

2)实际问题中,很多情况下,当x很大或者很小时,对因变量P的影响很小,当x达到某个值时,对因变量P的影响很大。即在实际问题中,因变量P与自变量并不是直接的线性关系。所以,不能使用经典的线性模型,需要对经典线性模型进行休整,进而产生了广义线性模型。

(称为对数几率函数)

从而有

这里,P解决了上面的两个问题。

3. 如何求解logistic regression方程?

在logistic regression中,Y服从二项分布,误差服从二项分布而不是高斯分布,所以不能用最小二乘法进行模型参数估计,可以采用极大似然估计来进行参数估计。(ps:最小二乘法通常用于正态分布场合)

使用似然函数求目标函数

        严谨一点的公式如下:

        

        似然函数如下:

        

        对数似然函数,优化目标函数如下:

        

         整个逻辑回归问题就转化为求解目标函数,即对数似然函数的极大值的问题,即最优化问题,可采用梯度下降法、拟牛顿法。



<think>嗯,用户遇到了“NameError: name 'LogisticRegression' is not defined”这个问题。首先,我需要回想一下这个错误的常见原因。通常,这种情况发生在Python环境中没有正确导入相关的类或模块的时候。LogisticRegression属于scikit-learn库中的线性模型模块,所以用户可能没有导入它,或者导入的方式不对。 接下来,我得考虑用户的使用场景。可能用户正在尝试使用scikit-learn库进行逻辑回归模型的训练或预测,但在代码中直接使用了LogisticRegression而没有先导入。这常见于刚接触机器学习库的新手,他们可能参考了教程或文档,但遗漏了导入步骤。 然后,我需要思考可能的解决方案。首先,最基本的应该是检查是否正确导入了LogisticRegression类。正确的导入语句应该是“from sklearn.linear_model import LogisticRegression”。如果用户没有写这一行,或者拼写错误,比如拼错了模块名或类名,就会导致这个错误。 另外,用户可能没有安装scikit-learn库。这时候,即使导入了,也会提示找不到模块。因此,需要确认是否已经安装了scikit-learn。可以通过pip list命令查看已安装的包,或者尝试在终端中运行“pip show scikit-learn”来检查。如果没有安装,用户需要先使用“pip install scikit-learn”命令安装。 还有一种可能是用户在导入时使用了别名,比如“import sklearn.linear_model as lm”,然后在代码中使用“lm.LogisticRegression()”。如果用户没有正确引用,也可能导致错误。这时候需要检查导入方式是否正确,或者是否有拼写错误。 此外,环境问题也可能导致这个错误。比如,用户可能在多个Python环境中工作,而scikit-learn安装在了另一个环境中。这时候需要确认当前使用的Python环境是否正确,是否安装了所需的库。 还有可能用户将代码文件命名为了sklearn.py,这会导致导入时出现冲突,因为Python会优先读取当前目录下的文件。这种情况下,重命名文件即可解决问题。 总结下来,解决方案的步骤应该是:首先检查导入语句是否正确,然后确认scikit-learn是否安装,接着检查环境是否正确,最后查看是否有命名冲突。同时,给出具体的示例代码帮助用户理解如何正确导入和使用LogisticRegression类。</think>遇到 `NameError: name 'LogisticRegression' is not defined` 错误时,通常是因为未正确导入 `scikit-learn` 库中的逻辑回归类。以下是逐步解决方法: --- ### **1. 检查是否导入类** `LogisticRegression` 类位于 `sklearn.linear_model` 模块中,需显式导入: ```python # 正确导入方式 from sklearn.linear_model import LogisticRegression # 示例使用 model = LogisticRegression() model.fit(X_train, y_train) ``` --- ### **2. 检查是否安装 scikit-learn** 如果未安装库,即使导入也会报错。通过以下步骤确认: 1. 检查是否安装: ```bash pip show scikit-learn ``` 如果输出为空,则表示未安装。 2. 安装/更新库: ```bash pip install scikit-learn # 安装 pip install --upgrade scikit-learn # 更新 ``` --- ### **3. 检查环境问题** - 如果你使用虚拟环境(如 conda、venv),请确认当前环境已激活且安装了 `scikit-learn`。 - 在 Jupyter Notebook 中,重启内核确保环境生效。 --- ### **4. 检查命名冲突** - 避免将代码文件命名为 `sklearn.py`,否则会与库名冲突。 - 检查是否覆盖了 `LogisticRegression` 变量: ```python # 错误示例:变量名覆盖类名 LogisticRegression = "some value" # 导致后续无法使用类 ``` --- ### **完整示例代码** ```python # 导入库 from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据 data = load_iris() X, y = data.data, data.target # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 创建模型 model = LogisticRegression(max_iter=200) # 增加迭代次数避免收敛警告 model.fit(X_train, y_train) # 评估 print("Score:", model.score(X_test, y_test)) ``` --- ### **常见错误排查表** | 问题原因 | 解决方法 | |-------------------------|-----------------------------------| | 未导入 `LogisticRegression` | 添加 `from sklearn.linear_model import LogisticRegression` | | scikit-learn 未安装 | 通过 `pip install scikit-learn` 安装 | | 环境未激活/路径错误 | 检查 Python 环境或重启开发工具 | | 变量名/文件名冲突 | 重命名变量或文件 | 如果问题仍未解决,请提供完整代码片段以便进一步分析。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值