XGBoost の過学習を探る
最大深さの異なる3つの XGBoost モデルを学習したので、これからその性能を評価します。各モデルについて、学習データとテストデータの両方で品質を測定します。ご存じのとおり、学習データはモデルが学習に使ったデータです。テストデータは、モデルがこれまで見たことのない翌月の売上データです。
この演習の目的は、学習したいずれかのモデルが過学習していないかを見極めることです。モデルの品質を測る指標として Mean Squared Error (MSE) を使います。これは sklearn.metrics に mean_squared_error() 関数として用意されており、真の値と予測値の2つの引数を取ります。
train と test の各 DataFrame、および学習済みの3つのモデル(xg_depth_2、xg_depth_8、xg_depth_15)は、ワークスペースに用意されています。
この演習はコースの一部です
Pythonで挑むKaggleコンペティション
演習の手順
- 各モデルについて、学習データとテストデータの両方に対して予測を作成します。
- 学習データとテストデータのそれぞれで、真の値と予測値の MSE を計算します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
from sklearn.metrics import mean_squared_error
dtrain = xgb.DMatrix(data=train[['store', 'item']])
dtest = xgb.DMatrix(data=test[['store', 'item']])
# For each of 3 trained models
for model in [xg_depth_2, xg_depth_8, xg_depth_15]:
# Make predictions
train_pred = model.____(dtrain)
test_pred = model.____(dtest)
# Calculate metrics
mse_train = ____(train['sales'], train_pred)
mse_test = ____(test['sales'], test_pred)
print('MSE Train: {:.3f}. MSE Test: {:.3f}'.format(mse_train, mse_test))