tensorflowの時はレイヤーを積み重ねて精度を上げていく方式でしたが、LigthGBMというか決定木では勝手に木の枝が成長していきます。
そのため、パラメータを指定するということは木の成長をコントロールすることになります。
盆栽を育てる気分でしょうか。
パラメータ設定
パラメータ設定はキー/バリュー型で設定するだけ。
ただ、どのキーにどの値を設定するかという部分を理解することはとても難しい。
Python-package Introduction
Parameters
LightGBMの情報として「じゃー、こっからやってみな」というありがたい情報をくれているので見てみます。
パラメータチューニング
「min_data_in_leaf」は重要なパラメータで「最適な値は、学習サンプルの数と num_leaves に依存する」と記載されているほどです。
デフォルトは「20」が設定されていますが、ドキュメントには「大規模なデータセットでは数百から数千の値を設定」という記載もあります。
「max_depth」はツリーの深さを指定するパラメータです。
デフォルトは「-1」となり無制限となっていますが、データが小さい場合は制限をかけたほうが良いみたいです。
num_leavesは枝分かれする数を指定するパラメータです。
デフォルトは「31」で「1 < num_leaves <=131072」の範囲で指定します。
設定する場合は「2^(max_depth)」よりも小さくする必要があります。
max_depthはデフォルトだと無制限になっているので、num_leavesを設定するときはmax_depthも一緒に制限を行う必要があります。
最初に意識するパラメータ
パラメータは他にもたくさんありますが、パラメータチューニングページに記載されているパラメータを整理してみます。
パラメータ | デフォルト値 | 増減 | 備考 |
max_depth | -1(無制限) | 減少 | |
num_leaves | 31 | 減少 | 「2^(max_depth)」よりも小さくする |
min_gain_to_split | 0 | 増加 | |
min_data_in_leaf | 20 | 増加 | |
min_sum_hessian_in_leaf | 1e-3 | 増加 | |
num_iterations | 100 | 減少 | |
max_bin | 255 | 減少 | |
min_data_in_bin | 3 | 増加 | |
feature_fraction | 1 | 減少 | |
max_cat_threshold | 32 | 減少 |