python - 混淆结果与 python 中的逻辑回归

标签 python logistic-regression

我正在使用来自维基百科的示例在 Python 中进行逻辑回归。 link to example

这是我的代码:

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
Z = [[0.5], [0.75], [1.0], [1.25], [1.5], [1.75], [1.75], [2.0], [2.25], [2.5], [2.75], [3.0], [3.25], [3.5], [4.0], [4.25], [4.5], [4.75], [5.0], [5.5]] # number of hours spent studying
y = [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1] # 0=failed, 1=pass

lr.fit(Z,y)

结果是

lr.coef_
array([[ 0.61126347]])

lr.intercept_
array([-1.36550178])

虽然他们获得的小时系数值为 1.5046,截距为 -4.0777。为什么结果如此不同?他们对 1 小时学习的预测是通过概率 0.07,而我用这个模型得到 0.32,这些是截然不同的结果。

最佳答案

“问题”是 scikit-learn 中的 LogisticRegression 使用 L2-regularization (又名 Tikhonov 正则化,又名 Ridge,又名正常先验)。请阅读sklearn user guide about logistic regression了解实现细节。

在实践中,这意味着 LogisticRegression 有一个参数 C,默认情况下等于 1C 越小,正则化越多 - 这意味着 coef_ 变小,而 intercept_ 变大,这会增加数值稳定性并减少过度拟合。

如果将 C 设置得很大,正则化的效果就会消失。与

lr = LogisticRegression(C=100500000)

分别得到coef_和intercept_

[[ 1.50464535]]
[-4.07771322]

就像维基百科的文章一样。

一些理论。过度拟合是一个有很多特征但没有太多例子的问题。一个简单的经验法则:如果 n_obs/n_features 小于 10,则使用较小的 C。在 wiki 示例中,有一个特征和 20 个观察值,因此即使使用较大的 C,简单逻辑回归也不会过拟合。

小 C 的另一个用例是收敛问题。如果正例和负例可以完美分离或存在多重共线性(如果 n_obs/n_features 较小,则更有可能),它们可能会发生,并导致非正则化情况下系数的无限增长。

关于python - 混淆结果与 python 中的逻辑回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47248587/

相关文章:

python - 学习 : KNeighborsRegressor vs KNeighborsClassifer

r - 逻辑回归 - eval(family$initialize) : y values must be 0 <= y <= 1

python - 两个总和运行时间 O(n^2) 或 O(n)

python - 缺少 sphinx 命令的 conf 文件

python - 无法在 PyQt5 中导入 QtWebKitWidgets

r - 如何使用 `ml_logistic_regression`获取逻辑回归中系数的显着性

machine-learning - 逻辑回归用例

python - 如何使用 scipy 和极大的数字

python - 尝试使用 websocket-client 建立 https 连接时出现 SSL 错误