探索 XGBoost 的過度擬合
在用不同的最大深度訓練了 3 個 XGBoost 模型之後,接下來要評估它們的表現。為了達成這個目的,你會同時在訓練資料與測試資料上衡量每個模型的品質。如你現在所知,訓練資料是模型曾經用來訓練的資料;測試資料則是下一個月的銷售資料,模型從未看過。
本練習的目標是判斷是否有任何模型發生過度擬合。衡量模型品質時,你將使用均方誤差(Mean Squared Error,MSE)。在 sklearn.metrics 中提供了 mean_squared_error() 函式,接受兩個引數:真實值與預測值。
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))