見出し画像

Pythonで機械学習『LightGBM ハイパーパラメータ編 その1CoreParameters』

LightGBMを使いこなすために、
①ハイパーパラメーターのチューニング方法
②データの前処理・特徴選択の方法
を調べる。今回は①。

公式ドキュメントはこちら。随時参照したい。

機械学習は、目的関数(目的変数と予測値から計算される)を改善するように何回も学習を進める。ハイパーパラメーターは、その学習の進め方(学習回数や深さなど)を決めるもの。ハイパーパラメーターチューニングの最終ゴールは、未知データからの推定精度が最も良いモデルをつくること。

ちなみに、ハイパーパラメータのハイパーとは、すごいカッコいいという意味ではなくて、「超越した」つまりモデルの外部にあるという意味。データから推測することができないので、毎度チューニングしなくてはならないということ。なるほど、エンジニアの仕事ですね。

こちら大変参考になりました。

LightGBMのハイパーパラメーターは、数十個ある。大別すると7種。
Core Parameters
Learning Control Parameters
IO Parameters
Objective Parameters
Metric Parameters
Network Parameters
GPU Parameters
Coreが大事っぽいのはわかるが、残りの重要度はわからないので、いろんなブログ見まくってよくでてくるものを中心に見ていくしかない。
youtubeでパラメーター読み合わせ勉強をしているお方もいた。経験者の方のノリがわかって楽しい。

というわけで、僕がブログやら本やら動画やら見まくった結果、これさえ知っていればきっと大丈夫なハイパーパラメータリストはこちら!

bagging_fraction
bagging_freq
boosting
early_stopping_round
eval_metric
eval_set
feature_fraction
gamma
lambda_l1
lambda_l2
learning_rate
max_bin
max_delta_step
max_depth
metric
min_child_weight
min_data_in_leaf
min_gain_to_split
min_sum_hessian_in_leaf
num_iterations
num_leaves
objective
random_seed
random_state
reg_alpha
reg_lambda
save_binary
verbosity

多すぎだろ。
それでは内容いきます。公式ドキュメント順。

Core Parameters

"objective" 

予測の目的。
回帰(数値を予測する)ならregression。
デフォルトもregression。
二値分類ならbinary。


regressionにはL1,L2と2種類あり、L2は平均二乗誤差を最小にしようとし、L1は誤差平均を最小にしようとする。L2がデフォルト。

その他にもたくさんあった。 multiclass分類、Huber loss、 Fair loss、Poisson regression、 Quantile regression。わからんー、けど初接触することに意味があるはず。

"boosting"

モデル選択。4種ある。gbdt,rf,dart,goss.デフォルトはgbdt.

勾配ブースティングを使いたいわけだから基本デフォルトで良いが、DARTには要注目。
(DARTは一定の割合で決定木を無視する。ニューラルネットで使われるドロップアウトという手法らしい。ニューラルネットは未学習。楽しみだな〜。rfはランダムフォレスト。gossはなぞ。)

"num_iterations"

学習回数の指定。整数を指定する。デフォルトは100。100本、植樹するってことですね。
 num_tree, num_trees, num_round, num_rounds, num_boost_round, n_estimators, は全部意味一緒。ややこしや〜。

"learning_rate"

学習率。次の学習で、前の学習をどれくらい更新するか。
デフォルトは0.1。etaは同義。

学習する際の解像度?みたいな感じなのかな。

"num_leaves"

一つの決定木につく葉の数。学習するデータをどれくらい細かく分けるか。
デフォルトは31。なんでだろ。最大は、131072。2の17乗。
大きくすれば、正確になるかもしれないが、過学習になるかもしれない。ちょうどいいところを狙いたいですね。2^(max_depth)より小さくするみたい、たとえばmax_depthが7だったら、128以下に。

"random_seed"

seed,random_stateは同義。機械学習は乱数を使う。固定しておかないと再現性が担保できない。デフォルトでは指定されないので、指定しておくのが無難。


今回はここまで。
チューニング方法どころかパラメーターの内容ですら終わってないぞ。この調子ならパラメータの内容記事があと4回。その後にチューニング方法。
次回はlearningControlsParametersのmax_binから。

この記事が気に入ったらサポートをしてみませんか?