摘要
Python機器學習庫sklearn中的Logistic Regression算法核心與statsmodels是一致的,但內容的呈現各有側重,機器學習中沒有過多展示統計方面的數據。
sklearn 與 statsmodels 中 Logistic 回歸的差異直接使用 sklearn 中的 Logistic 回歸,結果與 statsmodels 不同。請看下例。
import numpy as npimport statsmodels.api as smfrom sklearn.linear_model import LogisticRegression
# 生成隨機數用於回歸np.random.seed(123)n = 100y = np.random.randint(0,2,size=n)x = np.random.random((n,2))# Constant termx[:, 1] = 1
# statsmodels Logistic Regressionsm_lgt = sm.Logit(y, x)sm_result = sm_lgt.fit()print(sm_result.summary())
# sklearn Logistic Regressionsk_model = LogisticRegression()sk_results = sk_model.fit(x, y)print(sk_results.coef_)兩者的計算結果是
這是因為:
sklearn 進行了正則化處理,默認 C=1.0,而且無法關閉。
調整方法:
設置 C=1e9,減小正則化的影響。
new_sk_model = LogisticRegression(fit_intercept=False, C=1e9)new_sk_results = new_sk_model.fit(x, y)print(new_sk_results.coef_)此時,運行結果與 statsmodels 一致。