🕌
LightGBMのParameter List
LightGBM のパラメータ一覧
ここを見れば OK...
そうは言っても、英語だし、意外と見づらいので自分の勉強も兼ねて一度まとめてみました。ちなみに、各パラメータについて説明をしているわけではないので、あしからず。各パラメータの後ろのコメントは他の機械学習などでの別名、一般名だったり、説明だったりします。別名を入れても動くというわけではないのでお気をつけください。
また、ここで紹介する params の記法は辞書の特性上 NG(キーの重複)ですが、見やすく紹介する上で必要な表現方法だとご理解ください。
Parameter の書き方
Python では次のように Parameter を指定します。通常の辞書と同じ記法だと思ってもらったら良いです。
sample.py
params ={
"sample_params":-1,
"sample2_params":[-1,0,1],
"sample3_params":"string"
}
config
コンフィグファイルを指定する。CLI version のみ利用可能。
sample.py
params = {
"config":"", # default, type = str,
}
task
タスクのタイプを指定する。
sample.py
params = {
"task":"train", # default, type = enum, 学習用
"task":"predict", # モデルから予測する
"task":"convert_model", # 既存のモデルファイルからコンバートする
"task":"refit", # 既存のモデルに新しい学習内容を追加する
"task":"save_binary", # 学習したデータを呼び出し、データセットをバイナリーデータとして保存する。
}
objective
損失関数を指定する。ただし、目的関数(Regression など)によって選択するパラメータは変わる。
sample.py
params = {
# For regression model
"objective":"regression", # default, L2 loss, mean_squared_error, root_mean_squeared_error, rmse とも呼ばれる。
"objective":"regression_l1", # L1 loss, mean_absolute_error, mae
"objective":"huber", # Huber loss
"objective":"fair", # Fair loss
"objective":"poisson", # Poisson regression
"objective":"quantile", # Quantile regression
"objective":"mape", # MAPE loss, mean_absolute_percentage_error
"objective":"gamma", # log linkを用いたGamma regression
"objective":"tweedie", # log linkを用いたTweedie regression
# For binaly classification
"objective":"binary", # log loss
# For multi-class classification
"objective":"multiclass", # Soft max,
"objective":"multiclassova", # One-vs-All binary objective function, multiclass_ova, ova, ovr
# For cross-entropy
"objective":"cross_entropy", # xentropy,
"objective":"cross_entropy_lambda", # xentlambda, cross_entory の別手法
# For ranking
"objective":"lambdarank", # lambdarank,
"objective":"rank_xendcg", # xendcg, xe_ndcg, xe_ndcg_mart, xendcg_mart
# type = enum, objective_type, app, application, loss
}
boosting
boosting の種類を指定します。
sample.py
params = {
"boosting":"gbdt", # default, 一般的なGBDTメソッド
"boosting":"rt", # Random Forest
"boosting":"dart", # Dropouts meet Multiple Additive Regression Trees
"boosting":"goss", # Gradient-based One-Side Sampling
# type = enum, boosting_type, boost とも呼ばれる
}
data
学習データの指定をします。
sample.py
params = {
"data":"", # default, train, train_data, train_data_file, data_filename
# Training data pathを指定する。CLI Versionのみ指定ができる。
# type = str
}
valid
テストデータや検証データの指定をします。
sample.py
params = {
"valid ":"", # default, test, valid_data, valid_data_file, test_data, test_data_file, valid_filenames
# Validation, test data pathを指定する。CLI Versionのみ指定ができる。
# type = str
}
num_iteration
一般的に木の本数と言われています。
sample.py
params = {
"num_iteration":"100", # default, num_iteration, n_iter, num_tree, num_trees, num_round, num_rounds, nrounds, num_boost_round, n_estimators, max_iter
# type = int
}
learning_rate
学習の圧縮率を示します。小さければ学習時間が必要となります。
sample.py
params = {
"learning_rate":"0.1", # default, shrinkage_rate, eta
# type = float
}
num_leaves
葉っぱの数。末端の個数を指定します。
sample.py
params = {
"num_leaves":"31", # default, num_leaf, max_leaves, max_leaf, max_leaf_nodes
# type = int, 1 < num_leaves <= 131072
tree_learner
sample.py
params = {
"tree_learner":"serial", # default, single machine tree learner
"tree_learner":"feature", # feature_parallel,
"tree_learner":"data", # data_parallel,
"tree_learner":"voting", # voting_parallel,
# type = enum, tree, tree_type, tree_learner_typeとも呼ばれる
}
num_threads
CPU コア数の指定。task が train, prediction, refit のときだけ指定できます。
sample.py
params = {
"num_threads": 0,
# type = int, num_thread, nthread, nthreads, n_jobs とも呼ばれる
}
device_type
学習で利用するデバイスを指定します。
sample.py
params = {
"device_type": "cpu", #default,
"device_type": "gpu",
"device_type": "cuda",
"device_type": "cuda_exp", #cudaよりも速いとのこと。将来的にcudaから置き換えられます。
# type = enum, device とも呼ばれる
}
seed
seed 値の指定をします。
sample.py
params = {
"seed": None, #default,
# type = int, random_seed, random_state とも呼ばれる
}
deterministic
sample.py
params = {
# CPU only
# Trueにすると同じ条件のパラメータ時に安定して同じ結果を返してくれます。
"deterministic": False, #default,
# type = bool
}
まとめ
optuna で何を指定できるのか分かりづらかったのでまとめました。意外と多いですよね。皆さんも良い機械学習ライフをお送りください。
時間があれば、学習パラメータもまとめたいと思います。もし、間違いなどがあればご指摘ください。
Discussion