Python statsmodels与scikit learn的逻辑回归:预测差异较大

Python statsmodels与scikit learn的逻辑回归:预测差异较大,python,scikit-learn,statsmodels,Python,Scikit Learn,Statsmodels,我使用Python库statsmodels和scikit learn进行逻辑回归和预测。类概率预测结果差异很大。我知道这个解是通过数值计算得出的,但是,我希望结果只会略有不同。我的期望是,双方都默认使用逻辑功能-这是正确的还是我需要设置任何选项 这是我的statsmodels代码: 将numpy导入为np 从sklearn.linear_模型导入逻辑回归 x=np.数组([1,2,3,4,5])。重塑(-1,1)) y=np.数组([0,0,1,1,1]) 模型=逻辑回归() 模型拟合(x,y)

我使用Python库statsmodels和scikit learn进行逻辑回归和预测。类概率预测结果差异很大。我知道这个解是通过数值计算得出的,但是,我希望结果只会略有不同。我的期望是,双方都默认使用逻辑功能-这是正确的还是我需要设置任何选项

这是我的statsmodels代码:

将numpy导入为np
从sklearn.linear_模型导入逻辑回归
x=np.数组([1,2,3,4,5])。重塑(-1,1))
y=np.数组([0,0,1,1,1])
模型=逻辑回归()
模型拟合(x,y)
模型预测概率(np.数组([2.5,7])。重塑(-1,1))
即1类的预测值为0.521和0.992

如果改用scikit learn,则得到0.730和0.942:

将statsmodels.api导入为sm
x=[1,2,3,4,5]
y=[0,0,1,1,1]
模型=sm.Logit(y,x)
结果=model.fit()
结果摘要()
结果:预测([2.5,7])
(作为旁注:如果我使用R而不是Python,预测值是0.480和1.000,也就是说,它们又是完全不同的。)

我怀疑这些差异不是数值上的,但背后有一个分析的数学原因,例如使用了不同的函数。有人能帮忙吗


谢谢

我现在找到了解决办法。有两个原因:

(1) scikit学习在默认情况下使用正则化,必须将其关闭。通过将scikit学习代码中的第5行更改为:

model = LogisticRegression(penalty='none')
(2) Yati Raj提到的那个-谢谢你的提示!Statsmodels不会自动拟合截距。这可以通过添加行来更改

x = sm.add_constant(x)

在statsmodels代码中。

Statmodels不会自动在线性方程中添加截距列。你查过了吗?
model = LogisticRegression(penalty='none')
x = sm.add_constant(x)