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
得到最接近 SPSS
和 textbook
结果的结果。
希望这对在 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')
代码:
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 中遗漏了什么吗?
自己解决了。我尝试更改 LinearRegression(C=100)
中的 C 值。成功了。 C=1000
得到最接近 SPSS
和 textbook
结果的结果。
希望这对在 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')