ryotan blog

興味の対象はPython、Django、Angular、Ionic、機械学習、ディープラーニング、UX、UI、CX、デザインシンキング、ティール組織、など。

【機械学習】Gradient Boostingのハイパーパラメータチューニング

以下サイトにて、GradientBoostingのハイパーパラメータのチューニング方法が掲載されていましたので、下記に整理しました。 www.analyticsvidhya.com

ハイパーパラメータは3種類

  • 木固有のパラメータ(Tree-Specific Parameters)
    • モデルの各々の木に影響を与えるパラメータ
  • ブースティングパラメータ(Boosting Parameters)
    • モデルのブースティングオペレーションい影響を与えるパラメータ
  • その他のパラメータ(Miscellaneous Parameters)
    • その他のパラメータ

木固有のパラメータ

  1. min_samples_split
  2. min_samples_leaf
  3. min_weight_fraction_leaf
  4. max_depth
  5. max_leaf_nodes
  6. max_features

ブースティングパラメータ

  1. learning_rate
  2. n_estimators
  3. subsample

その他のパラメータ

  1. loss
  2. init
  3. random_state
  4. verbose
  5. warm_start
  6. presort

ハイパーパラメータのチューニング方法

まずは大きめのlearning_rate(0.05-0.2)と小さめのn_estimators(40-70)で始め、木固有のパラメータを調整し、learning_rateを小さく(n_estimatorsを比例的に大きく)する、という流れ。

  1. 比較的大きなlearning_rateを設定。デフォルトは0.1だが、0.05から0.2でも上手くいくことがある。
  2. 木の数を最適化する。高速に保つために40〜70程度にしておく。
  3. 木固有パラメータを調整する。
  4. 比例的にlearning rateを小さく、木の数を大きくして、ロバストなモデルを得る。(learning_rateを2分の1にしたら、木の数を2倍にする)

本文の例では、まず1でlearning_rate=0.1、2でn_estimators=60に設定してから3で木固有パラメータを調整。 4でlearning_rateを20分の1の0.005n_estimatorsを20倍の1,200(パフォーマンスの問題で、最終的には1,500)にしている。n_estimatorsの調整など、最終的に良いパフォーマンスが出るまで試行錯誤するというイメージなのだろう。