sklearn与statsmodels的Logistic回归结果不一致的原因及对齐方法
差异原因
- 核心原因是正则化默认配置不同:sklearn的
LogisticRegression默认启用L2正则化(penalty='l2'),正则化强度参数C=1.0,会让拟合得到的系数绝对值向0收缩;statsmodels的Logit默认执行无正则化的最大似然估计,没有这个收缩效应,这是观测到系数差异的主要来源。 - 次要原因是迭代参数默认值不同:两者的LBFGS求解器默认的迭代收敛阈值、最大迭代次数存在细微差异,在部分数据集上可能带来极小的数值误差。
对齐输出的调整方法
把sklearn的逻辑回归配置修改为无正则化,和statsmodels的默认逻辑对齐即可,只需修改sklearn模型初始化的代码:
原有代码:
model_1 = linear_model.LogisticRegression(solver = 'lbfgs')
修改为:
# 关闭正则化,和statsmodels默认行为对齐 model_1 = linear_model.LogisticRegression(solver='lbfgs', penalty=None)
如果使用的sklearn版本低于0.22不支持penalty=None,可以把正则化强度参数C设置为极大值来近似取消正则化效果:
# 低版本sklearn兼容写法 model_1 = linear_model.LogisticRegression(solver='lbfgs', C=1e10)
修改后重新运行代码,两者输出的斜率、截距只会存在浮点计算带来的可忽略的微小差异,结果完全一致。
内容的提问来源于stack exchange,提问作者H42
相关产品推荐
相关产品推荐

