sklearn 和 statsmodels 的逻辑回归结果不匹配

Posted

技术标签:

【中文标题】sklearn 和 statsmodels 的逻辑回归结果不匹配【英文标题】:Logistic regression results of sklearn and statsmodels don't match 【发布时间】:2021-12-26 00:17:09 【问题描述】:

我尝试使用 sklearn 和 statsmodels 库进行逻辑回归。他们的结果很接近,但不一样。比如sklearn得到的(slope, intercept)对是(-0.84371207, 1.43255005),而statsmodels得到的对是(-0.8501, 1.4468)。为什么以及如何使它们相同?

import pandas as pd
import statsmodels.api as sm
from sklearn import linear_model

# Part I: sklearn logistic

url = "https://github.com/pcsanwald/kaggle-titanic/raw/master/train.csv"
titanic_train = pd.read_csv(url)

train_X = pd.DataFrame([titanic_train["pclass"]]).T
train_Y = titanic_train["survived"]

model_1 = linear_model.LogisticRegression(solver = 'lbfgs')
model_1.fit(train_X, train_Y)

print(model_1.coef_) # print slopes
print(model_1.intercept_ ) # print intercept

# Part II: statsmodels logistic

train_X['intercept'] = 1
model_2=sm.Logit(train_Y,train_X, method='lbfgs')
result=model_2.fit()
print(result.summary2())

【问题讨论】:

我认为您选择的最小化算法是迭代的,因此,初始权重和学习率通常会在最小化收敛的地方发挥作用。我认为没有任何非迭代方法可以最小化逻辑回归的 BCE 损失 【参考方案1】:

Sklearn 默认使用 L2 正则化,而 statsmodels 不使用。尝试在 sklearn 模型参数中指定 penalty= 'none' 并重新运行。

有关 sklearn 中逻辑回归的更多信息,请参阅文档: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html.

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于sklearn 和 statsmodels 的逻辑回归结果不匹配的主要内容,如果未能解决你的问题,请参考以下文章

`statsmodels` 和 `sklearn` 中的 Logit 估计器

为啥 `sklearn` 和 `statsmodels` 的 OLS 回归实现给出不同的 R^2?

获取 sklearn 逻辑回归的边际效应

Python使用sklearn和statsmodels构建多元线性回归模型(Multiple Linear Regression)并解读

sklearn/statsmodels 奇异协方差矩阵下普通最小二乘的结果

为啥当 fit_intercept=False 时 Sklearn R-squared 与 statsmodels 不同?