三种提升树

三支接力队:后一棵树专门纠正前一棵。

共同家族叫“梯度提升树”。它们擅长表格数据。

第1棵猜 60
第2棵补 +25
第3棵补 +14
99接近答案 100

只需记住 3 步

1先猜一次第一棵小树给出一个粗略答案。
2盯住错误下一棵树只学习前面还错在哪里。
3不断相加许多小修正叠起来,答案越来越准。

它们像在哪里?差在哪里?

XGXGBoost稳健全能规则与控制很多
LLightGBM速度优先大数据更轻快
CCatBoost类别友好城市、品牌等文字类别省心

先看懂一棵决策树

树会连续问几个“是 / 否”问题,把样本送到一个最终答案。

收入 > 1万?→ 否年龄 < 30?→ 是预测:会购买
一棵深树

能记住复杂规则,也更容易把训练数据背下来。

许多浅树

每棵只做一点小修正,组合后通常更稳。这就是提升树的方向。

Boosting 为什么越改越准?

每一轮都测量当前答案的错误,再训练一棵新树去减少这个错误。

最终预测 = 初始猜测 + 学习率 × 树₁ + 学习率 × 树₂ + …
真实房价 100当前预测 60还差 40下一棵树学“差多少”
学习率越小,每棵树迈的步子越小;通常需要更多棵树,但更稳。

三兄弟的共同点与差异

XGBoostLightGBMCatBoost
核心印象成熟、控制细速度快、内存省类别特征省心
树的生长常按层生长优先分裂收益最大的叶子默认对称树
大数据速度通常最快中等
类别列通常先编码支持类别特征强项:原生处理
小数据稳健性常是可靠起点要控制叶子复杂度类别多时有优势
GPU支持支持支持

“谁一定最准”没有固定答案。数据、特征与验证方式决定结果。

为什么 CatBoost 特别照顾类别?

“城市=上海”不是数字大小关系,随便编码成 1、2、3 容易误导模型。

北京 / 上海 / 深圳类别特征

品牌、颜色、城市、用户类型都属于类别。它们有区别,却通常没有自然的大小顺序。

🐈有序目标统计

CatBoost 用训练顺序和统计方法转换类别,减少直接偷看答案造成的数据泄露。

四个参数控制什么?

n_estimators / iterations

一共训练多少棵树。太少学不够,太多可能过拟合。

learning_rate

每棵树的修正力度。小步慢走常更稳。

max_depth / num_leaves

单棵树有多复杂。越复杂越容易记住噪声。

subsample / colsample

每轮只看部分行或列,增加随机性来防过拟合。

regularization

对复杂模型加惩罚,让它少走极端。

early_stopping

验证集不再进步时自动停,避免无效加树。

同一个任务,三种写法

它们都遵循 fit → predict;主要区别在模型类和少量参数。

# XGBoost
model = XGBClassifier(
  n_estimators=500,
  learning_rate=0.05,
  max_depth=6)
model.fit(X_train, y_train)
# LightGBM
model = LGBMClassifier(
  n_estimators=500,
  learning_rate=0.05,
  num_leaves=31)
model.fit(X_train, y_train)
# CatBoost
model = CatBoostClassifier(
  iterations=500,
  learning_rate=0.05,
  depth=6,
  verbose=False)
model.fit(X_train, y_train,
  cat_features=cat_cols)

我该先选哪个?

类别列很多、又不想手工编码:先试 CatBoost。
数据量很大、训练速度很重要:先试 LightGBM。
需要成熟生态、丰富控制与可靠基线:先试 XGBoost。
最终选择:使用同一份验证集、同一指标公平比较,保留最适合业务的模型。

三个新手常踩的坑

把测试集拿来调参测试集看得太多也会被“背下来”。调参用验证集,测试集最后只用一次。
树越多越好过多树会增加时间并可能过拟合。配合 early stopping。
忽略数据泄露预测未来时,特征中不能出现未来才知道的信息。