🕌

LightGBMのParameter List

2022/11/10に公開

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