不同系数:scikit学习与统计模型(逻辑回归)

lfo*_*lfo 4 python scikit-learn statsmodels logistic-regression

在进行逻辑回归时,我使用的系数statsmodels是正确的(已通过一些课程资料进行了验证)。但是,我无法获得与相同的系数sklearn。我试图对数据进行预处理无济于事。这是我的代码:

统计模型:

import statsmodels.api as sm

X_const = sm.add_constant(X)
model = sm.Logit(y, X_const)
results = model.fit()
print(results.summary())
Run Code Online (Sandbox Code Playgroud)

相关输出为:

                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const      -0.2382      3.983     -0.060      0.952      -8.045       7.569
a           2.0349      0.837      2.430      0.015       0.393       3.676
b           0.8077      0.823      0.981      0.327      -0.806       2.421
c           1.4572      0.768      1.897      0.058      -0.049       2.963
d          -0.0522      0.063     -0.828      0.407      -0.176       0.071
e_2         0.9157      1.082      0.846      0.397      -1.205       3.037
e_3         2.0080      1.052      1.909      0.056      -0.054       4.070
Run Code Online (Sandbox Code Playgroud)

Scikit学习(无需预处理)

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
results = model.fit(X, y)
print(results.coef_)
print(results.intercept_)
Run Code Online (Sandbox Code Playgroud)

给出的系数为:

array([[ 1.29779008,  0.56524976,  0.97268593, -0.03762884,  0.33646097,
     0.98020901]])
Run Code Online (Sandbox Code Playgroud)

给出的截距/常数为:

array([ 0.0949539])
Run Code Online (Sandbox Code Playgroud)

如您所见,无论哪个系数对应于哪个变量,给出的数字sklearn都与中的正确数字不匹配statsmodels。我想念什么?提前致谢!

lfo*_*lfo 5

由于在reddit上善良的灵魂,这一问题得以解决。要获得相同的系数,就必须否定正规化sklearn在默认情况下适用于逻辑回归:

model = LogisticRegression(C=1e8)
Run Code Online (Sandbox Code Playgroud)

C根据文档是:

C:浮点数,默认值:1.0

正则强度的倒数;必须为正浮点数。与支持向量机一样,较小的值指定更强的正则化。