💻
Stacking + 回帰をやってみた
下記のサイトの stacking + 分類のコードを参考に、Stacking + 回帰の実装をやってみたのでメモで残します。
コードについては、GitHub はこちら、Google Colab はこちら。
変更点
基本的には 各モデルのパラメーターを下記の様に変更しています。
- XGBoost
- 'objective': 'multi:softprob' を 'loss_function': 'RMSE' に変更
- 'num_class': 3 をカット
- LightGBM
- 'objective': 'multiclass' を'objective': 'regression' に変更
- 'metric': 'multi_logloss' を 'metric': 'rmse' に変更
- 'num_class': 3 をカット
- CatBoost
- 'loss_function': 'MultiClass' を 'loss_function': 'RMSE' に変更
未知データの予測の際の変更点
loop_counts = 0
# 学習データとテストデータに分ける
X_train, X_test, y_train, y_test = train_test_split(
df.drop(["target"], axis=1),
df["target"],
random_state=42,
test_size=0.2
)
# 予測結果の格納用のnumpy行列を作成
test_preds = np.zeros((len(y_test), 5)) ### <= ここを未知データのサイズになるよう修正
(略)
# KFoldクラスで分割した回数だけ実行(ここでは5回)
for train_cv_no, eval_cv_no in K_fold.split(row_no_list, y_train):
(略)
# テスト用
xgb_test = xgb.DMatrix(X_test, label=y_test) ### <= ここを未知データを指定
(略)
y_pred = bst.predict(xgb_test, ntree_limit=bst.best_ntree_limit) ### <= ここを未知データを指定
# testの予測を保存
test_preds[:, loop_counts] = y_pred ### <= ここを未知データを指定
print('Trial: ' + str(loop_counts))
loop_counts += 1
以上になります、最後までお読みいただきありがとうございました。
Discussion