強力な機械学習モデル(勾配ブースティング木)の紹介
こんにちは、ワピアです。😄
今回は、機械学習モデルの紹介をしたいと思います。
この記事では、よく使われる勾配ブースティング木(GBDT)の紹介をします!
勾配ブースティング木とは
基本的には有名な決定木モデルの応用と捉えていただければ大丈夫です。
GBDT(Gradient Boosting Decision Tree)と略されますが、もしかしたらより具体的なライブラリ名であるxgboost、lightgbmの方が知られているかもしれません。コンペとかでよく見ますよね。
コンペでよく見られるほど強力なモデルなので、ぜひ実装できるようにしましょう!
GBDTの大まかな仕組み
数式を使って説明すると長~くなりそうなのでざっくり説明になります。
基本原理は以下の2点です。
1.目的変数(求めたい結果)と予測値との誤差を減らすように、決定木で学習させる。
2.1を繰り返しまくって、誤差を減らす
前の学習をもとに新たな学習を行うので、繰り返せば繰り返すほど、予測精度は上がります!
モデル実装の注意点
良い点
・欠損値をそのまま扱える
・特徴量のスケーリングの必要なし(決定木なので大小関係しか問わない)
スケーリングしても大小は変わらないので効果がないため、、、
・カテゴリ変数をone-hot encodingしなくてOK
これいいですよね、ダミー変数作るとカラムめちゃくちゃ増えますし、、、
※one-hot encodingとは
カテゴリ変数の代表的な変換方法
別の記事で触れます!すみません。
注意すべき点
・過学習に注意
油断すると過学習します。トレーニングデータでの精度の高さに釣られてはいけません。
いよいよ実装!
それでは、今回はxgboostでGBDTを実現しようと思います!
#xgboostをimportする
#もし入ってない場合はpip install xgboostしておこう
import xgboost as xgb
#分類をしてみる
#ハイパーパラメータはとりあえず一番重要なmax_depthのみ
#max_depthは2~9くらいの値を取る。
#過学習しているときは小さく、学習不足の時は大きくしよう
reg = xgb.XGBClassifier(max_depth=5)
#回帰の場合はreg = xgb.XGBRegressorに置き換える
#fitで学習させよう
reg.fit(train_X,train_y)
#スコアを確認
reg.score(train_X,train_y)
reg.score(test_X,test_y)
元データをトレーニングデータとテストデータに分けたところから開始しています。
これだけ??と思ったかもしれません。偉大な先人たちに感謝・平伏しております😌
最後に
いかがだったでしょうか。
もう少し加筆したいところがあるので、追記していきたいと思います。
勾配ブースティング木は非常に強力ですし、初手の様子見として非常にいいと思います。パラメータをチューニングせずとも高精度だからです。
ぜひ使ってみてはいかがでしょうか。
何かご質問や訂正等ございましたら、コメントにお願いします!
それでは、ご覧いただきありがとうございました!
この記事が気に入ったらサポートをしてみませんか?