LightGBM と CatBoost
LightGBM が高速な理由、ヒストグラムベースの分割、カテゴリ特徴量向けの CatBoost を扱います。
「LightGBM と CatBoost」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
XGBoost の先に
XGBoost は強力ですが、非常に大規模なデータセットでは遅くなることがあります。LightGBM と CatBoost は、速度を向上させ、カテゴリデータをより適切に扱える新しい勾配ブースティングライブラリです。
ヒストグラムベースの分割
LightGBM は分割を探す前に、連続値の特徴量を離散的なビン(ヒストグラム)に分けます。これにより、厳密な手法よりも分割の探索が大幅に高速になり、メモリ使用量も少なくなります。
リーフワイズな木の成長
レベルワイズな成長とは異なり、LightGBM はリーフワイズに木を成長させます。つまり、損失の減少量が最も大きいリーフから先に分割します。収束は速くなりますが過適合しやすいため、num_leaves で制御します。
LGBMClassifier と num_leaves
num_leaves は LightGBM で最も重要な複雑度の調整項目です。値を大きくすると精度が向上しますが、過適合のリスクも高まります。経験則として、num_leaves < 2^max_depth を維持します。
from lightgbm import LGBMClassifier
model = LGBMClassifier(
n_estimators=300,
num_leaves=31,
learning_rate=0.05,
random_state=0,
)
model.fit(Xtr, ytr)
print(model.score(Xte, yte))LightGBM の速度面での利点
ヒストグラムによるビニング、リーフワイズな成長、特徴量およびデータのサブサンプリングにより、LightGBM は大規模なデータセットで XGBoost より明らかに高速に学習し、多くの場合、同程度の精度を実現します。
from lightgbm import LGBMClassifier
model = LGBMClassifier(
n_estimators=1000,
num_leaves=63,
learning_rate=0.03,
feature_fraction=0.8,
bagging_fraction=0.8,
)LightGBM の早期停止
LightGBM はコールバックによる早期停止に対応しています。評価用データセットと early_stopping コールバックを渡すと、指標が頭打ちになった時点で停止できます。
import lightgbm as lgb
from lightgbm import LGBMClassifier
model = LGBMClassifier(n_estimators=2000, learning_rate=0.03)
model.fit(
Xtr, ytr,
eval_set=[(Xte, yte)],
callbacks=[lgb.early_stopping(50)],
)CatBoost とカテゴリ特徴量
CatBoost はカテゴリデータで特に力を発揮します。cat_features を使ってカテゴリ列をそのまま渡せるため、手動でのエンコーディングは不要です。
内部では順序付きターゲット統計量を使い、ターゲットリーケージを防ぎます。
from catboost import CatBoostClassifier
model = CatBoostClassifier(
iterations=500,
learning_rate=0.05,
depth=6,
verbose=False,
)
model.fit(Xtr, ytr, cat_features=[0, 3, 5])エンコーディング不要が強力な理由
他のライブラリでは、カテゴリをワンホットエンコードまたはラベルエンコードする必要があり、次元数が膨大になったり、ターゲットが漏洩したりする可能性があります。CatBoost はこれを順序付きブースティングによって内部で処理し、カテゴリ特徴量の過適合を抑えます。
CatBoost の主要パラメータ
CatBoost では、iterations(n_estimators に相当)、learning_rate、depth(対称な木を構築)を使用します。最小限のチューニングでも良好に動作することがよくあります。
from catboost import CatBoostClassifier
model = CatBoostClassifier(
iterations=1000,
learning_rate=0.03,
depth=8,
l2_leaf_reg=3.0,
verbose=100,
)速度の比較
一般的な指針は次のとおりです。
- LightGBM は大規模な数値データセットで通常最も高速です
- CatBoost はカテゴリ特徴量が多い場合に最適で、必要なチューニングも少なくて済みます
- XGBoost は成熟して堅牢で、デフォルト設定にも優れています
結果は問題によって異なるため、手元のデータですべてをベンチマークしてください。
ライブラリの選び方
カテゴリデータが多い場合は、CatBoost から始めてください。非常に大規模な数値テーブルで速度を重視するなら、LightGBM を選びます。実績のあるベースラインが必要なら XGBoost です。3 つとも内部では勾配ブースティングを使っているため、概念は応用できます。
クイックチェック
勾配ブースティングライブラリに関する知識を確認しましょう。
まとめ
まとめ: LightGBM は num_leaves で制御するヒストグラムベース・リーフワイズ成長を使い、大規模な数値データを高速に処理します。CatBoost は cat_features によってカテゴリ特徴量をネイティブに扱えるため、エンコーディングは不要です。どちらも XGBoost と同様に勾配ブースティングの派生手法です。ライブラリはベンチマークして選び、カテゴリデータには CatBoost、速度重視なら LightGBM を使いましょう。
よくある質問
「LightGBM と CatBoost」レッスンは無料ですか?
はい。「LightGBM と CatBoost」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「LightGBM と CatBoost」で何を学びますか?
LightGBM が高速な理由、ヒストグラムベースの分割、カテゴリ特徴量向けの CatBoost を扱います。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「LightGBM と CatBoost」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 決定木:理論と実装
- ランダムフォレストとバギング
- 勾配ブースティング:GBM と XGBoost
- LightGBM と CatBoost