跳到主要内容

直方图叶优先回归

LightGBM回归

先把面积等连续列打进直方图桶,再每次只分裂当前损失降得最多的叶子,用较快的提升去压万元残差。

更新日期 2026-08-29 机器学习

这篇能回答什么

LightGBM回归回答的是:列多、行也不少时,怎样尽快把连续结局的残差压下去,并且先看清压完之后还剩哪些口袋。它和 XGBoost 回归同属提升,但默认策略相反。连续特征先被切成有限个直方图桶,候选阈值只出现在桶边界。树按叶生长:全局找 Δℓ 最大的那一片再切一刀,而不是把同一层节点一起展开。同样的叶子预算下,树更瘦、更深,残差口袋也更容易一边极厚、一边被挖成细缝。

本教学占用把最终 |y−F| 切成三只口袋。完整个案 N=330。高残差口袋 A 70(21.21%),中间口袋 B 60(18.18%),已压住的口袋 C 200(60.61%)。注意最瘦的是 B 而不是 A:叶优先会把增益砸进「再切一刀立刻变纯」的区域,中间带往往被抽空成一条缝。C 刚过六成,是叶生长最爱加厚的一侧。Y 仍是总价(万元)。

什么时候不该用

样本只有一两百行、你更在意深度被均匀花掉,用XGBoost回归的按层策略通常更稳。只要一阶残差均值、不要直方图近似,用GBDT 回归。必须写单位斜率时回线性回归。高基数定类又懒得编码,对照CatBoost回归。标签预测走LightGBM分类,那页占用是年级档,不是残差口袋。

如何选择方法

把速度和「中间残差会不会被抽成细缝」一起权衡。直方图把分裂复杂度从「每个不同平米数」降到「每个桶」,宽评价表上往往快于精确贪心。按叶生长会优先加厚已经好切的低残差区——本例就是 C 的 ${cN} 条。若你担心中间带 B 只剩 ${bN} 套、规则碎到无法复核,应下调 num_leaves、抬高 min_data_in_leaf,或改回按层的 XGBoost。普通 GBDT 没有这套桶与叶优先默认。

  • LightGBM回归:直方图 + 按叶生长;占用是残差口袋,主指标 RMSE。

  • XGBoost回归:按层摊深度,残差上带通常不那么容易被单独挖穿。

  • GBDT 回归:一阶残差树基线,默认既不强调桶也不强调叶优先。

  • CatBoost回归:有序提升与类别统计,门店/城市列更多时更省事。

输入、输出与限制

输入

定量 Y 加特征。面积、楼龄这种高基数列走直方图;楼层取值少,桶里会挤。本页不把房屋类型当标签,只当可选特征。

  • 因变量:1 个定量列,本练习总价(万元)。

  • 特征:1–40 个;本练习面积、楼层、总楼层、建筑年份。

  • 与 XGBoost 不同的旋钮:num_leaves(不是 max_depth 的别名)、直方图箱数、叶子最少样本。

输出

「LightGBM回归结果表」印残差口袋:A 70、B 60、C 200,N=330。它不列出箱边界,也不列出每片叶子的 Δℓ。旁边是损失或预测对照图。重要性来自分裂对损失的累计改进。

产品限制

  • 有效行少于 40 拒绝。

  • 成表删除后从全表降到 330,少掉的行不再进入直方图计数。

  • 中间口袋只有 60 条时,min_data_in_leaf 若再小于它,叶生长会切穿这条缝。

  • 工作台不把 num_leaves 自动换算成 XGBoost 的 max_depth。

案例

研究问题。 评价表列再多几条户型与区域,精确贪心会变慢。研究者想用直方图加速去预测总价,但必须先承认:按叶生长会优先把已经好拟合的房源再切得更纯,中间残差带可能被抽成细缝——本例 B 只剩约两成不到。

LightGBM 完整个案 330,与 XGBoost 回归教学的 292 不是同一删除集合。口袋 70 / 60 / 200。下载后:Y=总价(万元),特征仍用面积、楼层、总楼层、建筑年份。不要把总价再切成「高中低价」三分类后误开 LightGBM分类。

下载教学示例表(综合评价)

在 StatsX 中操作

  1. 步骤 1 · 放入评价表并看工作表名

    综合评价 xlsx 进工作台。若被另存成奇怪的 Sheet 名,对不上本页 330 这个占用。

  2. 步骤 2 · 扫面积的唯一值规模

    画像里看面积有多少个不同取值。取值很多,正是直方图该加速的地方;楼层取值少,箱数不必开到 255。

  3. 步骤 3 · 搜 LightGBM回归

    目录输入「LightGBM回归」。旁边的分类卡片走标签;XGBoost 回归卡片走按层。点错之后残差口袋形状会对不上本页。

  4. 步骤 4 · 锁定量 Y 与四列特征

    因变量:总价(万元)。特征:面积、楼层、总楼层、建筑年份。num_leaves 先留默认 31,不要一上来改成 255。

  5. 步骤 5 · 盯中间口袋再调叶子

    先看 B 是否仍接近 60。若 B 被削到个位数而训练 RMSE 还在降,把 num_leaves 降下来或提高叶子最少样本,而不是再加 200 棵。

上传评价表以便运行 LightGBM 回归
将综合评价表放入工作台上传区。
画像中查看面积取值规模供 LightGBM 回归
确认总价为定量,并留意面积的唯一值是否很多。
在目录中选择 LightGBM回归
搜索「LightGBM回归」并点选,不要误点分类或 XGBoost。
为 LightGBM 回归指定总价与住房特征
因变量为总价,特征为四列住房属性后运行。

如何阅读输出

「LightGBM回归结果表」第一格是「LightGBM回归」。残差口袋:A 70(21.21%)、B 60(18.18%)、C 200(60.61%),合计 330。60.61% 的 C 是叶优先最爱下手的区域——再切 C 往往立刻降低训练损失。B 只有 60 条,是夹在「已经很近」与「仍然很难」之间的细缝:继续加叶子,这条缝最先被挖穿。

LightGBM回归结果表
项目类别统计量取值
LightGBM回归类别 A频数70
LightGBM回归类别 B频数60
LightGBM回归类别 C频数200
LightGBM回归合计有效样本 N330
LightGBM回归类别 A占比(%)21.21
LightGBM回归类别 B占比(%)18.18
LightGBM回归类别 C占比(%)60.61

左右滑动可查看完整表格

教学示例表在 StatsX 工作台中的计算结果口径。

工作台中的 LightGBM 回归残差口袋表
口袋人数应接近 70 / 60 / 200。不要把智能解读原文粘进论文。
LightGBM 回归损失或预测对照图
曲线辅助看是否该早停;口袋人数以表为准。

读图顺序:先承认 330,再承认最瘦的是中间带 60 而不是高残差带 70,最后看验证 RMSE。C 厚不表示「三档房价都被分开」——本页根本没有房价分档,只有残差口袋。宏平均之类的分类指标不应出现。

若你改把总价切成三档再跑分类,占用表就变成标签份额,主图应改 ROC。本页按连续 Y 读。直方图边界随样本变:换一批房源,同一套 num_leaves 切出的口袋人数不必仍是 70/60/200。

理论与公式

直方图把特征 x_j 映射到 B 个桶。候选阈值只在桶边界上评估。对当前所有叶子,LightGBM 选使损失下降最大的那一次再切:

这就是按叶生长。按层生长会在深度 d 上把所有叶子都切完才加层。叶子总数用 num_leaves 卡住;它和深度的粗关系只在满二叉树上成立:

取等号只发生在完全平衡树。叶优先几乎总是歪的,所以不能把 XGBoost 的 max_depth=6 换成 63 片叶子还指望同一条残差带。中间口袋只剩 60 条时,若某叶最少样本低于该口袋,训练集上的 Δℓ 仍可能为正,验证集上会变负。直方图只改变候选阈值集合,不改变「叶上加的是收缩增量」这一层;和 XGBoost 的主要产品差别是生长顺序与分箱,不是换了一种损失。

注意事项

  • C 占 60.61%,叶优先会继续「纯化」低残差区;中间带 60 条要单独盯。

  • 箱边界随样本移动,换一季度房源分裂点可能整组平移。

  • num_leaves 不是 max_depth 的别名,两套旋钮不能对译后比较同一棵树。

  • 直方图计数的分母是完整个案 330,不是上传行数。

  • 本页口袋不是户型,也不是 LightGBM分类那张年级档。

  • 预测准了总价,不能写成「面积导致房价」的因果句。

常见问题

参考文献

  • Ke, G. et al. LightGBM: A highly efficient gradient boosting decision tree[C]//NeurIPS. 2017.

  • Chen, T., & Guestrin, C. XGBoost: A scalable tree boosting system[C]//KDD. 2016.

  • 李航. 统计学习方法[M]. 北京: 清华大学出版社, 2019.