AI資格ドリル
資格を選ぶ

用語比較

XGBoostとLightGBMの違い|木の育て方・カテゴリ変数・既定値(DS検定)

XGBoostとLightGBMの違いは、木を育てる既定の順番と、カテゴリ変数の渡し方です。どちらも決定木を順に足していく勾配ブースティングのライブラリです。

DS検定の公式スキルチェックリストは、この2つを勾配ブースティングの派生形として挙げています。現行の公式文書の記述で並べて整理します。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

XGBoostとLightGBMの要点

XGBoost

木の分割の既定はdepthwise(根に近いノードから分割)。lossguide(損失の変化が最大のノードを分割)も選べる。複雑さの上限は主にmax_depth(既定6)。カテゴリ列はenable_categoricalで扱う。

LightGBM

木はleaf-wise(best-first)で育て、損失の減りが最大の葉を選んで分割する。複雑さの上限は主にnum_leaves(既定31)。カテゴリ列はcategorical_featureで指定する。

違いを表で確認

比較軸XGBoostLightGBM
木を育てる既定の順番grow_policyの既定はdepthwise。根に近いノードから分割する。lossguideを選ぶと、損失の変化が最大のノードを分割する(hist・approxのみ)leaf-wise(best-first)。損失の減りが最大の葉を選んで育てる。葉の数を同じにすると、level-wiseより損失が小さくなりやすいと公式文書は述べている
複雑さを抑える主な上限max_depth(既定6)。大きくするほど複雑になり、過学習しやすいnum_leaves(既定31)。max_depthの既定は-1(制限なし)。max_depthを指定しても、木は葉ごとに育つ
連続値の扱いtree_methodの既定autoはhistと同じ。連続値をビン(区間)にまとめる。全候補を調べるexactも選べる。max_binの既定は256ヒストグラム方式で、連続値をビンにまとめる。公式文書は、事前ソート方式より学習が速く、メモリが少ないと説明している
カテゴリ変数enable_categoricalを有効にして扱う。対応するのはhistとapproxで、exactは非対応categorical_featureで列を指定する。公式文書は、one-hotより、カテゴリを2つの部分集合に分ける分割のほうが最適だと説明している
正則化の既定値lambda(L2)の既定は1、alpha(L1)の既定は0lambda_l2(L2)とlambda_l1(L1)の既定はどちらも0.0
学習率の既定値eta(別名learning_rate)の既定は0.3learning_rateの既定は0.1

どこで迷っているかを切り分ける

01

どちらも勾配ブースティングで区別が付かない人

どちらも勾配ブースティングを実装したライブラリで、公式スキルチェックリストでは「その派生形」と書かれています。違いは手法の種類ではなく、木の育て方や既定値などの実装の選び方です。

02

木の複雑さを調整するパラメータで迷う人

XGBoostは木の深さ(max_depth)、LightGBMは葉の数(num_leaves)が主な上限です。LightGBMはmax_depthを指定しても葉ごとに育つので、まずnum_leavesを見ます。

03

カテゴリ変数をone-hotにするか迷う人

どちらもカテゴリ列を直接扱う機能があります。XGBoostはenable_categoricalを有効にし、LightGBMはcategorical_featureで列を指定します。one-hot変換との違いは、別ページで確認できます。

具体例で使い分ける

例 1

データが少なくて過学習が心配なとき

行数が少ない表データで勾配ブースティングを使い、訓練データでは精度が高いのに検証データで落ちています。

  • LightGBMの公式文書は、leaf-wiseはデータが少ないと過学習を起こすことがあると述べ、木の深さを制限するmax_depthを用意しています。あわせてnum_leavesを小さくします。
  • XGBoostでは、公式文書がmax_depthを大きくするとモデルが複雑になり過学習しやすくなると述べています。max_depthを小さくします。

結論: 上限を下げる先は、XGBoostがmax_depth、LightGBMがnum_leavesとmax_depthです。

例 2

カテゴリ列を含む表を使うとき

地域や商品の種類のようなカテゴリ列を含む表を、そのまま勾配ブースティングに渡したいと考えています。

  • XGBoostは、列のデータ型をカテゴリ型にして、enable_categoricalを有効にします。対応するtree_methodはhistとapproxです。
  • LightGBMは、categorical_featureでカテゴリ列を指定します。公式文書は、カテゴリの値を整数コードに変換して扱うと説明しています。

結論: どちらも、設定を有効にすればカテゴリ列を直接扱えます。渡し方のパラメータ名が違います。

問題文から答えを選ぶ手順

  1. 1

    手法の種類を見る

    どちらも、決定木をベースにした勾配ブースティングの派生形です。「GBDTの実装」と言われたら、両方が当てはまります。

  2. 2

    パラメータの名前を見る

    max_depthが主な上限ならXGBoost、num_leavesならLightGBMの設計を指しています。

  3. 3

    木の育て方の用語を見る

    leaf-wise(best-first)はLightGBMの既定の育て方です。XGBoostはdepthwiseが既定で、lossguideも選べます。

試験での見分け方

  • 1XGBoostもLightGBMも、決定木をベースにした勾配ブースティングの派生形。
  • 2XGBoostの木の既定はdepthwise、LightGBMはleaf-wise(best-first)。
  • 3XGBoostの主な上限はmax_depth(既定6)、LightGBMはnum_leaves(既定31)。
  • 4LightGBMのleaf-wiseは、データが少ないと過学習することがある。
  • 5現行のXGBoostはtree_methodの既定がhistで、連続値をビンにまとめる点はLightGBMと近い。
  • 6ここで挙げる既定値は、現行の公式文書の値。バージョンによって変わることがある。

誤答しやすい選択肢

leaf-wiseはLightGBMにしかできないと考える

修正: XGBoostもgrow_policyにlossguideを選ぶと、損失の変化が最大のノードを分割します。違いは既定の育て方です。

XGBoostは必ず全候補を調べると考える

修正: 現行の公式文書では、tree_methodの既定autoはhistと同じです。全候補を調べるのはexactを選んだときです。

既定値の違いを、手法の性能の違いと考える

修正: 学習率や正則化の既定値は、ライブラリごとに決まっているだけです。既定値の違いと手法の優劣は別の話です。

確認問題

Q1損失の減りが最大の葉を選んで木を育てる(leaf-wise)のを既定とするのはどちらか?

答え: LightGBM

LightGBMの公式文書は、木をleaf-wise(best-first)で育て、損失の変化が最大の葉を選ぶと説明しています。XGBoostの既定はdepthwiseです。

Q2木の深さの上限であるmax_depthの既定が6なのはどちらか?

答え: XGBoost

XGBoostの公式文書は、max_depthの既定を6と記しています。LightGBMのmax_depthの既定は-1で、制限なしです。

Q3DS検定の公式スキルチェックリストで、XGBoostとLightGBMは何の派生形と書かれているか?

答え: 勾配ブースティング(GBDT)

チェックリストは、決定木をベースとしたアンサンブル学習として、Random Forest、勾配ブースティング、その派生形であるXGBoost・LightGBMを挙げています。

到達チェック

  • XGBoostとLightGBMが、どちらも勾配ブースティングの派生形だと説明できる
  • 木を育てる既定の順番(depthwiseとleaf-wise)の違いを説明できる
  • 複雑さを抑える主なパラメータ(max_depthとnum_leaves)を言い分けられる

同じ資格で次に知りたいこと

よくある質問

QXGBoostとLightGBMの違いは何ですか?

A

木を育てる既定の順番、複雑さの主な上限、カテゴリ変数の渡し方、各種パラメータの既定値です。XGBoostの木はdepthwiseが既定で上限はmax_depth、LightGBMの木はleaf-wiseで上限はnum_leavesです。両ライブラリの公式文書にもとづきます。

QLightGBMのleaf-wiseとは何ですか?

A

損失の減りが最大の葉を選んで分割していく木の育て方(best-first)です。公式文書は、葉の数を同じにするとlevel-wiseより損失が小さくなりやすい一方、データが少ないと過学習することがあるため、max_depthで制限できると説明しています。

QXGBoostでカテゴリ変数は扱えますか?

A

enable_categoricalを有効にして扱えます。公式文書では、対応するtree_methodはhistとapproxで、exactは非対応です。

QDS検定でXGBoostとLightGBMは問われますか?

A

公式スキルチェックリストは、勾配ブースティングの派生形としてXGBoostとLightGBMを挙げ、ライブラリで実行して変数の寄与度を解釈できることを求めています。設問の形式は受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)