statsmodel OLS 和 scikit 線性回歸的區別
我有一個關於來自不同庫的兩種不同方法的問題,它們似乎在做同樣的工作。我正在嘗試製作線性回歸模型。
這是我在 OLS 中使用 statsmodel 庫的代碼:
X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1) x_train = sm.add_constant(X_train) model = sm.OLS(y_train, x_train) results = model.fit() print "GFT + Wiki / GT R-squared", results.rsquared
這打印出GFT + Wiki / GT R 平方 0.981434611923
第二個是scikit learn library 線性模型方法:
model = LinearRegression() model.fit(X_train, y_train) predictions = model.predict(X_test) print 'GFT + Wiki / GT R-squared: %.4f' % model.score(X_test, y_test)
這打印出GFT + Wiki / GT R 平方:0.8543
所以我的問題是兩種方法都會打印我們的 R^2 結果,但一種是打印出 0.98,另一種是 0.85。
據我了解,OLS 適用於訓練數據集。所以我的問題,
- 有沒有一種方法可以使用 OLS 處理測試數據集?
- 訓練數據集分數是否給我們任何意義(在 OLS 中我們沒有使用測試數據集)?根據我過去的知識,我們必須使用測試數據。
- OLS和scikit線性回歸有什麼區別。我們使用哪一個來計算模型的分數?
謝謝你的幫助。
首先在使用方面。您可以通過與 scikit-learn 中非常相似的方式在 statsmodels 中獲得預測,不同之處在於我們使用返回的結果實例
fit
predictions = results.predict(X_test)
給定預測,我們可以計算基於預測誤差的統計量
prediction_error = y_test - predictions
有一個單獨的函數列表來計算預測統計的優劣,但它沒有集成到模型中,也不包括 R 平方。(我從來沒有聽說過 R 平方用於樣本外數據。)計算這些需要用戶做更多的工作,並且 statsmodels 沒有相同的統計數據集,尤其是對於分類或具有二元響應變量的模型。
對於您的另外兩點:
線性回歸的基本形式在 statsmodels 和 scikit-learn 中是相同的。但是,實現方式不同,可能會在邊緣情況下產生不同的結果,並且 scikit learn 通常對更大的模型有更多的支持。例如,statsmodels 目前在很少的部分使用稀疏矩陣。
最重要的區別在於周圍的基礎設施和直接支持的用例。
Statsmodels 很大程度上遵循傳統模型,我們想知道給定模型與數據的擬合程度,以及哪些變量“解釋”或影響結果,或者影響的大小。Scikit-learn 遵循機器學習傳統,主要支持的任務是選擇“最佳”模型進行預測。
因此,statsmodels 支持特徵的重點是分析訓練數據,包括假設檢驗和擬合優度度量,而 scikit-learn 支持基礎設施的重點是模型選擇樣本預測,因此對“測試數據”進行交叉驗證。
這就指出了區別,在用法上也有相當多的重疊。statsmodels 還進行預測,並在時間序列上下文中進行額外預測。但是,當我們想要對 statsmodels 中的預測進行交叉驗證時,目前通常更容易將 scikit-learn 的交叉驗證設置與 statsmodels 的估計模型一起重用。