在python中使用逻辑回归将结果混淆

时间:2017-11-12 12:06:34

标签: 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,这些是截然不同的结果。

2 个答案:

答案 0 :(得分:4)

“问题”是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很小则更可能),并且在非正则化的情况下导致系数无限增长,则可能会发生这种情况。

答案 1 :(得分:0)

我认为这个问题是因为你有

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]]

但它应该是

Z = [0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 1.75, 2.0, 2.25 ...]

试试这个