2017-08-31 3 views
0

hereからインスピレーションを受けています。Scikit learn:フィット感の良さ、データセットの分割、またはそのすべてを使用するか?

私の問題

だから私は3つの特徴とn個の観測とデータセットを持っています。私もn回の応答を持っています。基本的には、このモデルが適切かどうかを見たいと思います。

上記の質問から、この目的のためにR^2を使用してください。しかし、私は理解しているとは確信していません。

モデルに合わせて平均二乗誤差を計算できますか? train/test splitを使用する必要がありますか?

これらはすべて一般的な予測であるように見えますが、ここではそれをフィッティングするのがどれだけ良いかを見たいだけです。例えば

私はしばしば人々は、我々が得る最初のインスタンスでは

diabetes_X = diabetes.data[:, np.newaxis, 2] 
# split X 
diabetes_X_train = diabetes_X[:-20] 
diabetes_X_test = diabetes_X[-20:] 
# split y 
diabetes_y_train = diabetes.target[:-20] 
diabetes_y_test = diabetes.target[-20:] 
# instantiate and fit 
regr = linear_model.LinearRegression() 
regr.fit(diabetes_X_train, diabetes_y_train) 
# MSE but based on the prediction on test 
print('Mean squared error: %.2f' % np.mean((regr.predict(diabetes_X_test)-diabetes_y_test)**2)) 

のようなものをやって見るしかし、これは私のアイデア

import matplotlib.pyplot as plt 
import numpy as np 
from sklearn import datasets, linear_model 

diabetes = datasets.load_diabetes() 
#my idea 
regr = linear_model.LinearRegression() 
regr.fit(diabetes_X, diabetes.target) 
print(np.mean((regr.predict(diabetes_X)-diabetes.target)**2)) 

です:3890.4565854612724後者の場合には、我々は2548.07を取得しながら。最も正しいものはどれですか?

重要:私はこれを多回帰で働かせたいと思っています。これはただMWEです!

答えて

1

モデルに合わせて平均二乗誤差を計算できますか?私は列車/テストスプリットを使うべきですか?

いいえ、あなたはoverfittingのモデルの危険性があります。これが、データを列車と試験(または、検証データセット)に分割する理由です。つまり、モデルは単に見ているものを「記憶」するだけでなく、新しい、目に見えないサンプルでも実行することを学ぶということです。

1

トレーニング中に観察されなかった新しいデータセットでモデルのパフォーマンスを評価することは、常に優先されます。ハイパーパラメータを最適化したり、いくつかのモデルから選択する場合は、追加の検証データが適切です。

ただし、データが不足しており、トレーニングプロセスからデータを完全に削除することが禁止されています。このような場合、k-foldクロスバリデーション(scikit-learnのKFoldとStratifiedKFoldを参照)など、モデルを検証するより効率的な方法を使用することを強くお勧めします。

最後に、トレーニングセットとテストセットでパーティションが同様に動作することを確認することをお勧めします。ターゲット空間のデータを一様にサンプリングすることをお勧めします。これにより、同じ分布のターゲット値でモデルをトレーニング/検証することができます。

関連する問題