目的:フィッティングした多変量線形回帰モデルによる予測のテスト誤差を計算したいと思います。統計モデル予測と実際の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()
メソッドは、私のtrain/test splitからのインデックスを保持しません。だから、実際の価格と予測価格を比較すると、私は正しい値を比較しているとは確信できません。
私が考えた唯一の解決策(これが正しいと思うかどうかはわかりません)は、予測を行うときに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
私は、これらのソートデータフレームに基づいてテスト誤差計算を実行します:予測はもう少し(これがそう全く機能エンジニアリングがまだ適用されていない最初の線形回帰/ベンチマークであることに注意)私の期待に合わせ見えます。これは正しいですか?これを行うためのよりクリーンな方法がありますか?私が知らない方法?どのような助けや考えがありがとう、ありがとう!