Python 和 SPSS 为逻辑回归提供不同的输出

Python and SPSS giving different output for Logistic Regression

代码:

from sklearn.linear_model import LogisticRegression
l = LogisticRegression()
b = l.fit(XT,Y)
    print "coeff ",b.coef_
    print "intercept ",b.intercept_

这是数据集

XT =
[[23]
 [24]
 [26]
 [21]
 [29]
 [31]
 [27]
 [24]
 [22]
 [23]]
Y = [1 0 1 0 0 1 1 0 1 0]

结果:

coeff  [[ 0.00850441]]
intercept  [-0.15184511

现在我在spss.Analyse->回归->二元逻辑回归中添加了相同的数据。我设置了相应的 Y -> dependent 和 XT -> Covariates。结果甚至差得远。我在 python 或 SPSS 中遗漏了什么吗? Python-Sklearn

自己解决了。我尝试更改 LinearRegression(C=100) 中的 C 值。成功了。 C=1000 得到最接近 SPSStextbook 结果的结果。

希望这对在 python 中遇到 LogisticRegression 问题的任何人有所帮助。

SPSS Logistic 回归在其成本函数中不包含参数正则化,它只包含 'raw' 逻辑回归。在正则化中,成本函数包括正则化表达式以防止过度拟合。您使用 C 值指定它的倒数。如果将 C 设置为非常高的值,它会非常模仿 SPSS,因此没有神奇的数字 - 只需将其设置得尽可能高,就不会出现正则化。

对于 sklearn,您还可以通过将惩罚设置为 None 来“关闭”正则化。然后,将不应用正则化。与 SPSS 相比,这将为 sklearn 中的逻辑回归提供相似的结果。

来自 sklearn 的具有 1000 次迭代且没有惩罚的逻辑回归示例是:

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(max_iter=1000, penalty='none')