LightGBM 与 CatBoost
了解 LightGBM 更快的原因、基于直方图的分裂,以及 CatBoost 对分类特征的处理
LightGBM 与 CatBoost 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 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。这三者底层都是梯度提升,因此相关概念可以互相迁移。
快速检查
测试您对梯度提升库的掌握情况。
回顾
回顾:LightGBM 使用基于直方图、按叶节点生长的方式,并通过 num_leaves 控制复杂度,从而在大型数值数据上获得较高速度。CatBoost 通过 cat_features 原生处理类别特征,无需编码。两者与 XGBoost 一样,都是梯度提升的变体。请通过基准测试进行选择:类别特征多时选择 CatBoost,重视速度时选择 LightGBM。
常见问题解答
「LightGBM 与 CatBoost」课时是免费的吗?
是的 — 「LightGBM 与 CatBoost」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「LightGBM 与 CatBoost」这节课中我会学到什么?
了解 LightGBM 更快的原因、基于直方图的分裂,以及 CatBoost 对分类特征的处理 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 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