koji/メガネ男の日誌

日々の学び、活動状況を記録します。仕事のことは少なめ。

lightGBMを初めて使ったので備忘メモとしてまとめてみた

Kaggleの初心者ですが、M5コンペに挑戦中です。 KaggleではLightGBMが全盛と聞きましたので、備忘メモとしてまとめてみました。

setuptools、 numpy、scipy、 scikit-learn 0.21.3以降のライブラリのインストールが必要です。

詳細は公式ドキュメント参照。 lightgbm.readthedocs.io

データセットは、Kaggle の HousePrice コンペのものを使っています。 www.kaggle.com

理論や背景は先人のサイトに譲りまして、とりあえずぶん回してみるところまでをやってみます。

コードもこちらを参照しています。 www.codexa.net

なお、前提として、特徴量の抽出※、データの欠損値処理、ホールドアウト法処理(train_test_split)、標準化(StandardScaler)をしていますが、本記事ではlightGBMの記載にとどめ、詳細の記載を割愛しています。

※ 目的変数はSalePrice、説明変数はSalePriceと相関係数の高かった①OverallQual、②YearBuilt、③YearRemodAdd、④TotalBsmtSF、⑤1stFlrSF、⑥GrLivArea、⑦FullBath、⑧TotRmsAbvGrd、⑨GarageCars、⑩GarageAreaとしています。

# ライブラリ読込
import lightgbm as lgb

# データセット読込
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test)

# パラメーター設定
params = {'metric': 'rmse',
          'max_depth' : 9}

gbm = lgb.train(params,
                lgb_train,
                valid_sets=lgb_eval,
                num_boost_round=10000,
                early_stopping_rounds=100,
                verbose_eval=50)

こんな感じで出力されます。

Training until validation scores don't improve for 100 rounds [50] valid_0's rmse: 30194.1 [100] valid_0's rmse: 30750.4 Early stopping, best iteration is: [48] valid_0's rmse: 30177

# 予測の実施
predicted = gbm.predict(X_test)

# 予測値の出力
print(predicted)

こんな感じで予測値を作成することができます! f:id:kj_man666:20200329104555p:plain

今後の課題

パラメータの意味や、適切なパラメーターにするにはどうすればいいのかなど、使いこなすためにはまだまだ学ぶことが多いので精進いたします!

以上になります、最後までお読みいただきありがとうございました。