簡體   English   中英

statsmodel OLS 和 scikit-learn 線性回歸的區別

[英]Difference between statsmodel OLS and scikit-learn linear regression

我嘗試使用 iris 數據集練習線性回歸 model。

from sklearn import datasets
import seaborn as sns
import pandas as pd

import statsmodels.api as sm
import statsmodels.formula.api as smf
from sklearn.linear_model import LinearRegression

# load iris data
train = sns.load_dataset('iris')
train

# one-hot-encoding
species_encoded = pd.get_dummies(train["species"], prefix = "speceis")
species_encoded

train = pd.concat([train, species_encoded], axis = 1)
train

# Split by feature and target
feature = ["sepal_length", "petal_length", "speceis_setosa", "speceis_versicolor", "speceis_virginica"]
target  = ["petal_width"]

X_train = train[feature]
y_train = train[target]

案例1:statsmodels

# model
X_train_constant = sm.add_constant(X_train)
model = sm.OLS(y_train, X_train_constant).fit() 
print("const : {:.6f}".format(model.params[0]))
print(model.params[1:])

result :
const : 0.253251
sepal_length         -0.001693
petal_length          0.231921
speceis_setosa       -0.337843
speceis_versicolor    0.094816
speceis_virginica     0.496278

案例2:scikit-learn

# model                          
model = LinearRegression()
model.fit(X_train, y_train)
print("const : {:.6f}".format(model.intercept_[0]))
print(pd.Series(model.coef_[0], model.feature_names_in_))

result :
const : 0.337668
sepal_length         -0.001693
petal_length          0.231921
speceis_setosa       -0.422260
speceis_versicolor    0.010399
speceis_virginica     0.411861 

為什么statsmodels和sklearn的結果不一樣?

此外,除了全部或部分 one-hot-encoded 特征外,兩個模型的結果是相同的。

您包含了一整套單熱編碼虛擬變量作為回歸量,這導致線性組合等於常數,因此您具有完美的多重共線性:您的協方差矩陣是奇異的,您不能取它的逆矩陣。

在后台, statsmodelssklearn都依賴於 Moore-Penrose 偽逆,並且可以很好地反轉奇異矩陣,問題是在奇異協方差矩陣情況下獲得的系數在任何物理意義上都沒有任何意義。 包之間的實現略有不同( sklearn依賴於scipy.stats.lstsqstatsmodels有一些自定義過程statsmodels.tools.pinv_extended ,基本上是numpy.linalg.svd ,它們都在當天結束顯示«廢話»(因為無法獲得有意義的系數),這只是顯示什么樣的«廢話»的設計選擇。

如果你取 one-hot 編碼假人的系數之和,你可以看到,對於statsmodels ,它等於常數,對於sklearn ,它等於 0,而常數與statsmodels常數不同。 對完美多重共線性不“負責任”的變量系數不受影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM