跳到主要内容

直方图提升分类

LightGBM分类

先把特征打进直方图桶,再每次只分裂当前损失降得最多的那片叶子,用较快的提升树去预测多类标签。

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

这篇能回答什么

LightGBM分类回答的是「在列很多、行也不少的问卷或日志里,怎样尽快把样本分到已有的年级档或点击档」。它和 XGBoost 同属梯度提升,但有两处产品级差别。第一,连续题项先被切成有限个直方图桶,分裂枚举的是桶边界而不是每个唯一取值。第二,树按叶生长(leaf-wise / best-first):全局看哪片叶子再切一刀损失降得最多,就只切那一片。同样的叶子预算下,树往往更瘦、更深,少数档更容易被挖成一条细路径。

本教学占用把就读年级当作三分类标签。完整个案 N=319。A / B / C 分别为 49、54、216 人(15.36%、16.93%、67.71%)。C 已经接近三分之二,A、B 各自只有五十人上下。特征用学生性别、学校办学性质,需要时再加数学学习兴趣等量表。主图 ROC 的 AUC≈0.81,应读成「C 对 A∪B」的一对多曲线,不是三档各自都有 0.81。

什么时候不该用

标签只有两档、你要的是可引用的 OR 与 Wald,请用二元逻辑回归。样本很小、更在意深度被均匀花掉,用XGBoost分类的按层策略通常更稳。定类高基数、又懒得手工编码时,对照CatBoost分类。没有标签、只做分群,不要把 LightGBM 当成聚类。

如何选择方法

把「要多快」和「叶子会不会偏科」一起权衡。直方图把分裂复杂度从「每个不同分数」降到「每个桶」,宽表上往往明显快于精确贪心。按叶生长会把预算砸在当前最赚的那片叶子上——本例就是人数最多的 C 档。若你担心 A、B 两档被忽略,应显式限制 num_leaves、提高 min_data_in_leaf,或改回按层的 XGBoost。普通 GBDT 没有这套直方图与叶优先默认;随机森林则根本不提升。

  • LightGBM分类:直方图 + 按叶生长;占用表反映标签偏斜,ROC 常为一对多。

  • XGBoost分类:按层生长,深度更均匀,薄档不那么容易被单独挖深。

  • GBDT分类:传统梯度提升基线,默认既不强调直方图也不强调叶优先。

  • CatBoost分类:有序提升与类别统计,高基数定类更省事。

输入、输出与限制

输入

角色仍是单一的分析变量列表(定量 / 定类 / 分组定类 / 二元定类)。本页把就读年级当作标签,其余勾选列当作特征。李克特 1–5 分会被直方图打进少数几个桶,和成绩那种高基数列走同一套分箱逻辑,只是桶里更挤。

  • 分析变量:最少 1 个,最多 20 个。

  • 标签:三档分组(就读年级)或二元列均可。

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

输出

「LightGBM分类结果表」印的是标签占用:A 49、B 54、C 216,N=319。它不列出每片叶子的增益,也不列出箱边界。ROC 纵轴灵敏度、横轴 1−特异度,本例 AUC≈0.81。一对多时必须写清正类是哪一档;默认盯住人数最多的 C。

产品限制

  • 「可用」只说明三列类型能跑,不说明按叶生长适合这张偏斜标签。

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

  • A 档 49 人、B 档 54 人,min_data_in_leaf 若小于这两档,叶子会切穿稀有年级。

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

案例

研究问题。 问卷里就读年级已经是三档。研究者想用性别、办学性质以及若干学习体验题,预测一个学生更可能落在哪一档,并先承认 C 档占绝对多数——否则按叶生长会把几乎所有增益花在「把 C 切得更纯」。

教学表示例仍是学生问卷「有效样本数据」。LightGBM 完整个案 319,比全表少 181 行。标签占用 49 / 54 / 216。下载后:分析变量勾选就读年级、学生性别、学校办学性质;把年级当作要预测的三分类,不要把年级再同时当成协变量。

下载教学示例表(学生问卷)

在 StatsX 中操作

  1. 步骤 1 · 载入问卷

    在工作台投放学生问卷 xlsx。先看工作表标签是不是「有效样本数据」;若被另存成 Sheet1,对不上本页 319 这个占用。

  2. 步骤 2 · 看分组列基数

    画像里就读年级应是三档分组。点开唯一值,心里记住会有一档特别大。性别与办学性质是二元。不要把多选题的互斥编码当成三个独立标签。

  3. 步骤 3 · 搜 LightGBM分类

    目录搜索框输入「LightGBM分类」。它和 XGBoost 卡片不要点错:后面的生长规则与默认叶子预算不是同一套。

  4. 步骤 4 · 把年级放进分析变量

    右侧 1–20 项里勾选就读年级、学生性别、学校办学性质。年级是标签;另外两列是特征。量表要加入时再勾数学学习兴趣。

  5. 步骤 5 · 对着占用表收叶子

    先看 C 是否仍是 216 人。若一对多 ROC 很高但 A、B 召回接近 0,把 num_leaves 降下来,或提高叶子最少样本,而不是再加 200 棵树。

上传学生问卷以便运行 LightGBM分类
将教学示例表拖入工作台上传区。
画像中就读年级三档的唯一值
确认就读年级为三档分组,并留意某一档特别多。
在目录中选择 LightGBM分类
搜索「LightGBM分类」并点选,不要误点 XGBoost。
为 LightGBM 勾选年级、性别与办学性质
分析变量勾选就读年级、学生性别、学校办学性质后运行。

如何阅读输出

「LightGBM分类结果表」第一格是「LightGBM分类」。标签占用:A 49(15.36%)、B 54(16.93%)、C 216(67.71%),合计 319。67.71% 的 C 档是按叶生长最爱下手的区域——切 C 往往立刻降低损失。A、B 合计不到三分之一,叶子一旦被允许继续往下长,稀有年级会变成一条很深、很窄的规则,验证集上容易碎掉。

LightGBM分类结果表
项目类别统计量取值
LightGBM分类类别 A频数49
LightGBM分类类别 B频数54
LightGBM分类类别 C频数216
LightGBM分类合计有效样本 N319
LightGBM分类类别 A占比(%)15.36
LightGBM分类类别 B占比(%)16.93
LightGBM分类类别 C占比(%)67.71

左右滑动可查看完整表格

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

工作台中的 LightGBM分类占用表
占用人数应与上表一致。不要把智能解读里的套话写进结果节。
LightGBM 一对多 ROC,AUC 约 0.81
本教学图 AUC≈0.81。写论文时注明正类是 C 还是另一档。

AUC 0.81 只说明「C 对非 C」在当前特征上能拉开一截。它不保证 A 与 B 能被分开:那两档人数接近(49 对 54),直方图若把量表打进同一桶,叶生长可能根本懒得切 A/B 边界。宏平均 F1 比整体准确率老实。

若你改用办学性质当二元标签、年级当特征,占用表就不再是标签分布,而变成协变量构成;那时 C 档 67.71% 说的是「多数年级的学生更多」,不能解释成分对了 67%。本页案例按第一种读。

理论与公式

直方图把特征 x_j 的取值映射到 B 个桶。候选阈值只在桶边界上评估,复杂度大约随桶数而不是唯一值数增长。对当前叶子 S,LightGBM 选使损失下降最大的那一次再切:

这就是按叶生长。对比按层生长:后者在深度 d 上把所有叶子都切完才加深度。叶子总数常用 num_leaves 限制;它和深度的粗关系是

不等式取等号只发生在完全二叉树。按叶生长几乎总是不平衡,所以不能把 XGBoost 的 max_depth=6 换成 num_leaves=63 还指望同一套规则。A 档只有 49 人时,若某叶的最小样本低于该档,Δℓ 会在验证集上变负。一对多 AUC 是把 C 编成正类、其余编成负类后,对预测分数积分得到的面积。

注意事项

  • 标签 C 占 67.71%,按叶生长会优先「纯化 C」,A、B 召回要单独盯。

  • 直方图桶边界随样本变,换一届学生分裂点可能整组移动。

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

  • 完整个案 319 才是直方图计数的分母。

  • 一对多 AUC 必须声明正类;三档各画一条时不要只报最高的那条。

  • 预测对了年级,不能写成性别或办学性质「导致」升学路径。

常见问题

参考文献

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

  • Shi, Y., Li, J., Li, Z. Gradient boosting with piece-wise linear regression trees[C]//IJCAI. 2018.

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