💻

Stacking + 回帰をやってみた

2021/08/28に公開

下記のサイトの stacking + 分類のコードを参考に、Stacking + 回帰の実装をやってみたのでメモで残します。
https://potesara-tips.com/ensemble-stacking/#toc13https://potesara-tips.com/ensemble-stacking/#toc13

コードについては、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