はじめに
以前取り組んだ「House Prices: Advanced Regression Techniques」のモデルの構築、予測について、 XGBoostを試してみました。
XGBoostとは
勾配ブースティングとランダムフォレストを組み合わせたアンサンブル学習モデルのフレームワークです。
アンサンブル学習は、複数の学習器を使用してそれらの予測結果を統合することで、汎化性能(精度)を向上させます。
Kaggle内でも安定して良い精度を期待できるとして非常に多く使用されています。
モデル作成及びスコアリング
予めXGBoostをpip install xgboost
等でインストールしておきます。
# xgboostをインポート import xgboost as xgb
# XGBoostモデル作成 xg_boost = xgb.XGBRegressor(colsample_bytree=0.8, subsample=0.5, max_depth=3) # 訓練用データの説明変数と目的変数にて学習 xg_boost.fit(x_train, y_train)
パラメータはいろいろチューニングできますが、今回は主要なパラメータの以下を設定しました。
- colsample_bytree:0.8(各木においてランダムに抽出される列の割合)
- subsample:0.5(各木においてランダムに抽出される標本の割合)
- max_depth:3(木の深さの最大値)
# feature_importances_関数で特徴量の重要度を確認 rank = np.argsort(-xg_boost.feature_importances_) sns.barplot(x=xg_boost.feature_importances_[rank], y=x_train.columns.values[rank], orient='h') plt.title('Feature Importance') plt.tight_layout() plt.show()
# モデルにテストデータを投入し予測 y_pred = xg_boost.predict(x_test) Id = np.array(test["Id"]).astype(int) result = pd.DataFrame(y_pred, Id, columns = ["SalePrice"]) # 予測データの確認 result.head(10)
SalePrice | |
---|---|
1461 | 128155.429688 |
1462 | 155419.015625 |
1463 | 150589.531250 |
1464 | 170318.640625 |
1465 | 209070.265625 |
1466 | 169684.640625 |
1467 | 158735.265625 |
1468 | 159577.421875 |
1469 | 186008.296875 |
1470 | 117567.906250 |
# 予測データをCSVファイルに出力 result.to_csv("xgboost_result.csv", index_label = ["Id"])
予測データの提出&スコア確認
予測データを提出したところ、結果は「0.17018」で前回のランダムフォレストの「0.22419」から大幅に良くなりました。
パラメータチューニング等すれば、まだまだ改善する余地はありそうですが、また今度に。
また、XGBoostと並んでKaggleの上位ランカーもよく使用しているLightGBMについても気になるので今後試してみたいと思います。