技術ブログ

Developers's blog

GBDTの仕組みと手順を図と具体例で直感的に理解する

2019.12.02 土井 健
kaggle
GBDTの仕組みと手順を図と具体例で直感的に理解する

LightgbmやXgboostを利用する際に知っておくべき基本的なアルゴリズム「GBDT」を直感的に理解できるように数式を控えた説明をしています。

対象者

  • GBDTを理解してLightgbmやXgboostを活用したい人
  • GBDTやXgboostの解説記事の数式が難しく感じる人

※GBDTを直感的に理解してもらうために、簡略化された説明をしています。

GBDTのメリット・良さ

  • 精度が比較的高い
  • 欠損値を扱える
  • 不要な特徴量を追加しても精度が落ちにくい
  • 汎用性が高い(下図を参照)
  • LightgbmやXgboostの理解に役立つ

GBDT説明図
引用元:門脇大輔、阪田隆司、保坂佳祐、平松雄司(2019)『Kaggleで勝つデータ分析の技術』技術評論社(230)

GBDTとは

G... Gradient(勾配)
B... Boosting(ブースティング) = アンサンブル手法の1つ
D... Decision(決定)
T... Tree(木)

つまり、GBDTとは「勾配降下法(Gradient)」と「Boosting(アンサンブル)」、「決定木(Decision Tree)」を組み合わせた手法です。
まずは、GBDTの基本となる上3つの概念について直感的に理解していきましょう。

勾配降下法

機械学習アルゴリズムの主な目的は、正確な予測を行うことです。予測が正確かどうかは「誤差の大きさ」で判断することができます。

「誤差が小さい = 予測が正確」

と言うことができますよね。


その誤差を小さくする方法の1つが、「勾配降下法」です。

勾配降下法は、名前の通り「勾配」(傾斜)を降下する最適化の手法で、精度の誤差を最適化する役割をもっているわけです。

誤差関数グラフ

これは誤差関数のグラフで、「誤差の大きさ」を表しています。

このグラフの場合、真ん中に近づくに連れて誤差が小さくなっていますね。

誤差関数の勾配(傾斜)を下れば下るほど、「誤差が小さくなる=予測が正確になる」わけです。

Boosting(アンサンブルの1種)

アンサンブルとは、精度の低い学習器を複数組み合わせて、精度を高くする手法です。アンサンブルを表現することわざで、

「三人寄れば文殊の知恵」

というものがあります。

凡人でも三人で集まって相談すれば文殊に劣らぬほどよい知恵が出るものだ。」

つまり、弱学習器(予測の精度があまり高くないもの)を複数組み合わせることで強学習機(精度の高いもの)を作ることができるのです。

アンサンブルの手法には、さまざまな手法がありますが、その中でもGBDTに利用されているのが「Boosting」です。

決定木(Decision Tree)

決定木は、データから決定木を作る機械学習の手法のことです。

例えば、ECサイトで「商品Xを購入するかどうか」を予測したいとしましょう。

ECサイトに訪れた人が商品Xを購入するかどうかは、そのページに訪れた回数や、関連する商品Yを調べた回数などさまざまな要因から予測することができるかもしれません。このときに、

「商品Xのページに訪れた回数が5回以上」 → 商品Xを購入するだろう

「商品Xのページに訪れた回数が5回未満」 → 商品Xを購入しないだろう

このように条件を用意し予測を行う手法が決定木です。

GBDTの手順

  1. 目的変数の平均を計算する
  2. 誤差を計算する
  3. 決定木を構築する
  4. アンサンブルを用いて新たな予測値を求める
  5. 再び誤差を計算する
  6. 3~5を繰り返す
  7. 最終予測を行う

具体的に解説

こちらのデータを使って解説していきます。

スクリーンショット 2019-11-28 11.11.36.png

労働時間、好きな果物、性別のデータを用いて給料を求めます。

ステップ1.給料の平均を求める

スクリーンショット 2019-11-28 11.17.00.png
計算結果を予測1とします。
これをベースにして予測を行います。

ステップ2.誤差を計算する

「誤差1」=「給料の値」ー「予測1」で誤差を求めています。

例えば・・・

誤差1 = 900 - 650 = 250

カラム名は「誤差1」とします。
スクリーンショット 2019-11-28 13.48.38.png

ステップ3.誤差を予測する目的で決定木を構築する


スクリーンショット 2020-02-18 17.22.45.png
茶色の部分にはデータを分ける条件が入り、緑色の部分(葉)には各データごとの誤差の値が入ります。
葉の数よりも多く誤差の値がある場合は、1つの葉に複数の誤差の値が入り、平均します。

ステップ4.アンサンブルを用いて新たな予測値を求める

ここでは、決定木の構築で求めた誤差を用いて、給料の予測値を計算します。

スクリーンショット 2020-02-18 11.18.40.png

予測2 = 予測1(ステップ1) + 学習率 * 誤差

これを各データに対して計算を行います。

例えば・・・

予測2 = 650 + 0.1 * 200 = 670

このような計算を行って予測値を求めます。

ここで、予測2と予測1の値を比べてみてください。

スクリーンショット 2019-11-28 16.48.20.png

若干ではありますが、実際の値に予測2の方が近づいていて、誤差が少しだけ修正されています。
この「誤差を求めて学習率を掛けて足す」という作業を何度も繰り返し行うことで、精度が少しずつ改善されていきます。

※学習率を乗算する意味

学習率を挟むことで、予測を行うときに各誤差に対して学習率が乗算され、
何度もアンサンブルをしなければ予測値が実際の値に近づくことができなくなります。その結果過学習が起こりづらくなります。

学習率を挟まなかった場合と比べてみてください!

ステップ5.再び誤差を計算する

ここでは、予測2と給料の値の誤差を計算します。ステップ3と同じように、誤差の値を決定木の葉に使用します。

「誤差」=「給料の値」ー「予測2」

例えば・・・

誤差 = 900 - 670 = 230

このような計算をすべてのデータに対して行います。

ステップ6.ステップ3~5を繰り返す

つまり、

・誤差を用いた決定木を構築

・アンサンブルを用いて新たな予測値を求める

・誤差を計算する

これらを繰り返します。

ステップ7.最終予測を行う

アンサンブル内のすべての決定木を使用して、給料の最終的な予測を行います。
最終的な予測は、最初に計算した平均に、学習率を掛けた決定木をすべて足した値になります。

スクリーンショット 2020-02-14 18.15.33.png

スクリーンショット 2020-02-14 18.15.33.png

GBDTのまとめ

GBDTは、

-予測値と実際の値の誤差を計算

-求めた誤差を利用して決定木を構築

-造った決定木をそれ以前の予測結果とアンサンブルして誤差を小さくする→精度があがる

これらを繰り返すことで精度を改善する機械学習アルゴリズムです。この記事を理解した上で、GBDTの派生であるLightgbmやXgboostの解説記事を見てみてみると、なんとなくでも理解しやすくなっていると思いますし、Kaggleでパラメータチューニングを行うのにも役に立つと思いますので、ぜひ挑戦してみてください。


Twitter・Facebookで定期的に情報発信しています!

関連記事

Kaggleバスケコンペ(NCAA)解法の紹介

NCAAコンペ概要  全米大学体育協会バスケットボールトーナメントの試合の勝敗を予測するコンペでした。男女別にコンペが開かれました。リーグ戦の試合結果の詳細とトーナメントの試合結果のデータが年ごとに与えられ、今年のトーナメントの試合結果を予測します。評価指標はLoglossでした。 結果  新型コロナウイルスの影響で、大会自体がキャンセルになってしまいました。リークなしのLBの最も良いスコアは0.52586です。 取り組み内容 コンペの内容を理解してから

記事詳細
Kaggleバスケコンペ(NCAA)解法の紹介
kaggle 機械学習
Kaggleコンペ 2019 Data Science Bowlの振り返り

はじめに 昨日まで開催されていたKaggleの2019 Data Science Bowlに参加しました。結果から言いますと、public scoreでは銅メダル圏内に位置していたにも関わらず、大きなshake downを起こし3947チーム中1193位でのフィニッシュとなりました。今回メダルを獲得できればCompetition Expertになれたので悔しい結果となりましたが、このshake downの経験を通して学ぶことは多くあったので反省点も踏まえて

記事詳細
Kaggleコンペ 2019 Data Science Bowlの振り返り
kaggle 回帰 機械学習
Kaggle解説: 銅メダル獲得 NFLコンペについて

はじめに KaggleのNFLコンペで2038チーム中118位となり、銅メダルをとることができました。以下に、参加してからの取り組みや、反省点を書いていきたいと思います。 コンペ参加前の状況 10ヶ月ほど前にTitanicコンペに参加してから、「Predicting Molecular Properties」と「IEEE-CIS Fraud Detection」というコンペに参加してみましたが、公開されているカーネルを少しいじってみた程度でメダルには到底届

記事詳細
Kaggle解説: 銅メダル獲得 NFLコンペについて
kaggle 機械学習
KaggleコンペGreat Energy Predictor III で銅メダル獲得!

アクセルユニバース株式会社(以下当社)では、人が対応している業務を画像認識、音声認識、文字認識等を活用して効率化する機械学習ソリューション開発をおこなっています。 インターン生は業務の一環としてKaggleに取り組んでおり、先日のASHRAE - Great Energy Predictor IIIにて銅メダルを獲得しました。 メダルを獲得した田村くんのコメントです。 今回は、他の方が提出したもののブレンド(混ぜる)の仕方を工夫しました。 まずはなるべ

記事詳細
KaggleコンペGreat Energy Predictor III で銅メダル獲得!
kaggle 機械学習

お問い合わせはこちらから