LightGBMにはsklearnを利用したパッケージとオリジナルが存在する.これらのパッケージはパラメータ名が異なるので備忘として記録.
インストール方法
以下の記事を参考にした.
https://qiita.com/tackey/items/fa3e4ca37beecb1c7842
実行方法
import lightgbm as lgbm
lgb_params = {"objective":"binary",
"metric":"binary_logloss",
"verbosity": -1}
lgb_train = lgbm.Dataset(
x_train,
y_train)
lgb = lgbm.train(lgb_params, lgb_train)
lgb.predict(x_test)
引数の種類
参照はMicrosoftのドキュメントとLightGBM's documentation.
以下の詳細では利用頻度の高い変数を取り上げパラメータ名と値の対応関係を与える.
objective(目的関数)
regression
回帰を解く.
metric(誤差関数の測定方法)としては,
絶対値誤差関数(L1)ならばmae,
2乗誤差関数(L2)ならばmseと指定.
binary
二値分類.ラベルは 0 or 1.
metricとしては,
binary_logloss(クロスエントロピー)とbinary_error(正答率)の2つ.
multiclass
多クラス分類.
metricとしては,
multi_logloss(softmax関数)とmulti_error(正答率)の2つ.
また,クラスの数をnum_classとして設定することが推奨されている.
learning_rate
学習率.デフォルトは0.1.大きなnum_iterationsを取るときは小さなlearning_rateを取ると精度が上がる.
num_iterations
木の数.他に num_iteration, n_iter, num_tree, num_trees, num_round, num_rounds, num_boost_round, n_estimators という名前で呼び出すことも可能.デフォルトは100.
num_leaves
木にある分岐の個数.${\bf sklearnのmax\_depth}$との関係は
$num\_leaves = 2^{max\_depth}$
デフォルトは31.大きくすると精度は上がるが過学習が進む.
max_depth
木構造の深さを限定するための変数.データが少ないときに過学習を防ぐために設定する.デフォルト値は-1で0以下の値は制限なしを意味する.
verbosity
学習途中の中継的な情報を表示するかしないか.
デフォルトでは表示になっており,-1を指定すると表示しなくなる.
マニアックな引数
max_bin
一つの分岐に入るデータ数の最大値を指定.小さい数を指定することで強制的なデータ間の分離を可能にして精度を上げることができるが,大きな数を指定することにより一般性を強めることができる.結果として過学習抑制につながる.
min_data_in_bin, min_data_in_leaf
正直,違いがわからないが設定されている値のオーダーが異なるので別物.
大きくすることでデータと分岐が1対1対応することを防ぎ,結果として過学習を抑制する.
feature_fraction
学習の高速化と過学習の抑制に使用される.データの特徴量のfeature_fraction * 100 % だけ使用する.
weight_column
各列に対して,評価時の重要度を変更可能
[data0, data1, data2,..., dataN]に対して,
[1.0, 0.5, 0.7, ..., 0.4]というような重みをつけることが可能.