xgboost のパラメータ

xgboost を使う上で、日本語のサイトが少ないと感じましたので、今回はパラメータについて、基本的にこちらのサイトの日本語訳です。

github.com


xgboost を実行する前に、共通変数、ブースター変数、タスク変数の3つをセットしなければなりません。

  • 共通変数は、木あるいは線形モデルのブースティングモデルに共通の変数です
  • ブースター変数は、木あるいは線形モデルの各々に固有の変数です
  • タスク変数は、どのように学習させるかを決めるもので、例えば、回帰タスクではランキングタスクの変数が異なっています
  • この3つの変数に加えて、コンソール変数があり、これはxgboost のコンソール版の動作に関連しています。(たとえば、作製したモデルを保存するときなど)

Rパッケージにおける変数

R のパッケージでは、. (ドット) を_ (アンダーバー)に置き換えて利用できます。例えば、max.depth はmax_depth とすると使えます。

共通変数

  • booster [デフォルト=gbtree]
  • silent [デフォルト=0]
    • 0 にすると起動中のメッセージを出力し、1 にすると出力しません
  • nthread [設定しなければ、デフォルト値として使用可能なスレッドの最大数になります]
    • xgboost を使用時の並列処理を行うスレッドの数
  • num_pbuffer [xgboost が自動的に設定するため、ユーザーが設定する必要はありません]
    • 予測バッファのサイズで、たいていトレーニングデータ数で設定されます。ブースティングの最後の段階で予測の結果を保存するために使用されます。
  • num_feature [xgboost が自動的に設定するため、ユーザーが設定する必要はありません]
    • ブースティングに使用する特徴次元の数で、その特徴次元の最大数に設定されます

ブースター変数

xgboost-unity より、接頭辞 bst: はブースター変数に付けなくても大丈夫です。変数に接頭辞 bst:  を付けても付けなくても同じです。(たとえば、 bst:etaeta も正しい変数で同じものを指しています) 

木ブースター固有の変数

  • eta [default=0.3]
    • ステップサイズの縮小幅で、オーバーフィッティングを防ぐために使用されます。各ブースティングのステップ終了後に、新しい特徴の重みを直接入手できます。そして eta は特徴の重みを縮小させてブースティングの過程をより強固なもの*1にします。

ここで、強固と使っている意味は、外れ値に強くなるという意味と汎化性能が低くなるという意味の両方を込めています(良い点と悪い点)。以下も同様です。

  • gamma
    • 損失還元(loss reduction)の最小値で、木の葉ノードをさらに分割する際に必要な値。値を大きくすると、そのアルゴリズムはより強固になります。
  • max_depth [default=6]
    • 木の深さの最大値
  • min_child_weight [default=1]
    • 子ノードにおける必要な最小の重み。木の分割段階で、ある葉ノードにおける重みの合計値がmin_child_weight 未満であれば、それ以上分割しません。たとえば線形回帰の場合には、各ノードに必要な例の最小値に対応しています。値を大きくするとそのアルゴリズムはより強固になります。
  • max_delta_step [default=0]
    • 値を0に設定した場合、特になにもしません。もし正の値にした場合には、ステップの更新でより強固に(柔軟性がない) します。このパラメータは必要でないことが多いが、クラスのバランスが著しく悪いときのロジスティック回帰で役立つかもしれません。値を1~10に設定すると良いでしょう。
  • subsample [default=1]
    • サブサンプルを生成する際のトレーニングデータの抽出割合。たとえば、0.5に設定すると、XGBoost はデータの半分をランダムに選んで木を成長させることで、オーバーフィッティングを防ぎます。
  • colsample_bytree [default=1]
    • 各木を作成するときの列におけるサブサンプルの割合

線形ブースター固有の変数

  • lambda_bias
    • L2 正則化のバイアス項で、デフォルト値は0 (L1正則化のバイアス項は重要でないためありません)

タスク変数

  • objective [ default=reg:linear ]
    • 学習方法を明確にします。そのオプションは以下のようになります。
    • "reg:linear" --線形回帰
    • "reg:logistic" --ロジスティック回帰
    • "binary:logistic" --2-クラス分類向けのロジスティック回帰で、確率を出力
    • "binary:logitraw" --2-クラス分類向けのロジスティック回帰で、ロジスティック回帰式に代入する前の値
    • "multi:softmax" --XGBoost をソフトマックス関数を使用した多クラス分類に設定します。変数num_class (クラスの数)も設定する必要があります。
    • "multi:softprob" --softmax と同じであるが、各データがどのクラスに属するかの予測確率が出力されます。
    • "rank:pairwise" --順位付けをペアワイズ損失が最小になるようにXGBoost を設定します
  • base_score [ default=0.5 ]
    • すべての例に対する初めの予測スコアでグローバルバイアスである
  • eval_metric [ default according to objective ]
    • 検証データに対する評価基準で、デフォルトの基準はobjective によって決まります。回帰であればrmse、クラス分類であればerror、順位付けではmean average precision がデフォルトとなります。
    • 選択肢は以下の通りです
    • "rmse": 2乗平均平方根誤差
    • "logloss": 負の対数尤度
    • "error": 2-クラス分類のエラー率。(分類の誤ったケース数) / (すべてのケース数) で計算される。 たとえば予測において、この評価値は0.5 よりも大きければ予測は良い例であり、0.5 よりも小さい場合には悪い例となる。
    • "merror": 多クラス分類のエラー率。(誤認したケースの数) / (すべてのケース数).
    • "mlogloss": 多クラスの対数損失
    • "auc": Area under the curve の略でROC曲線下の面積で、性能の良さを表します
    • "ndcg":Normalized Discounted Cumulative Gain の略で順位付け問題の性能評価に用いられる
    • "map": Mean average precision の略
  • seed [ default=0 ]
    • 乱数シード値

コンソール変数

以下の変数はコンソール版のxgboost にのみ適用されます(一部省略)

  • use_buffer [ default=1 ]
    • テキストからの入力のためにバイナリバッファを作るかどうかで、たいていの場合データの読み込みのスピードが改善します
  •  num_round
  • data
    • トレーニングデータのパス
  • test:data
    • 予測する用のテストデータのパス

 

*1:強固になるの意味は、外れ値に強くなるという意味と汎化性能が低くなるの両方の意味を込めています。