目的:我想計算擬合多元線性迴歸模型預測的測試誤差。將statsmodel預測與實際y值進行比較(索引問題)
問題:這是我的代碼。它旨在基於X_test變量擬合線性迴歸模型來訓練數據,然後預測y值(價格):
X.insert(0, 'constant', 1) # insert constant column
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)
lm_sm = sm.OLS(y_train, X_train).fit()
y_pred = pd.DataFrame() # dataframe for predictions vs actual y-values
y_pred['predictions'] = lm_sm.predict(X_test)
print y_test.sort_index().head()
print y_pred.sort_index().head()
代碼輸出如下:
price
6 257500.0
17 485000.0
23 252700.0
25 233000.0
26 937000.0
predictions
0 509428.615367
1 324403.584917
2 477385.431339
3 484962.235105
4 827039.820936
比較預測的和實際的價格,這顯然是不對的。 predict()
方法不保留我的火車/測試拆分中的索引。所以當我將預測價格與實際價格進行比較時,我無法確定我是在比較正確的價值。
我想過的唯一解決方案(我不知道這是否正確)我們在做預測時排序X_test,即y_pred['predictions'] = lm_sm.predict(X_test.sort_index())
。這些預測看起來與我的預期(注意,這是第一線性迴歸/基準所以沒有功能工程是否已經被應用)多一點對齊:
price
6 257500.0
12 310000.0
18 189000.0
25 233000.0
29 719000.0
predictions
0 259985.788272
1 590648.478023
2 339621.126287
3 316402.199424
4 635513.611634
我會再執行基於這些分類dataframes測試誤差計算。這是正確的嗎?有沒有更乾淨的方法來做到這一點?我不知道的一種方法?任何幫助/想法將不勝感激,謝謝!