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

时间:2017-03-06 06:43:52

标签: python scikit-learn logistic-regression spss

代码:

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->回归 - >二元Logistic回归中添加了相同的数据。我设置了相应的Y - >依赖和XT - >协变量。结果甚至没有结束。我错过了python或SPSS中的内容吗? Result of binary logistic regression on SPSS Python的Sklearn

3 个答案:

答案 0 :(得分:2)

自己解决了。我尝试更改LinearRegression中的C值(C = 100)。这就是诀窍。 C = 1000得到的结果最接近SPSS和教科书结果。希望这能帮助任何在python中遇到LogisticRegression问题的人。

答案 1 :(得分:1)

SPSS Logistic回归的成本函数中不包括参数正则化,它只是“原始” logistic回归。在正则化中,成本函数包含一个正则化表达式以防止过度拟合。您可以使用C值指定其倒数。如果将C设置为非常高的值,它将紧密模拟SPSS,因此就没有幻数-只要将其设置为尽可能高的值,就不会有正则化。

答案 2 :(得分:1)

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

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

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