直方图提升分类
LightGBM分类
先把特征打进直方图桶,再每次只分裂当前损失降得最多的那片叶子,用较快的提升树去预测多类标签。
这篇能回答什么
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 · 载入问卷
在工作台投放学生问卷 xlsx。先看工作表标签是不是「有效样本数据」;若被另存成 Sheet1,对不上本页 319 这个占用。
步骤 2 · 看分组列基数
画像里就读年级应是三档分组。点开唯一值,心里记住会有一档特别大。性别与办学性质是二元。不要把多选题的互斥编码当成三个独立标签。
步骤 3 · 搜 LightGBM分类
目录搜索框输入「LightGBM分类」。它和 XGBoost 卡片不要点错:后面的生长规则与默认叶子预算不是同一套。
步骤 4 · 把年级放进分析变量
右侧 1–20 项里勾选就读年级、学生性别、学校办学性质。年级是标签;另外两列是特征。量表要加入时再勾数学学习兴趣。
步骤 5 · 对着占用表收叶子
先看 C 是否仍是 216 人。若一对多 ROC 很高但 A、B 召回接近 0,把 num_leaves 降下来,或提高叶子最少样本,而不是再加 200 棵树。




如何阅读输出
「LightGBM分类结果表」第一格是「LightGBM分类」。标签占用:A 49(15.36%)、B 54(16.93%)、C 216(67.71%),合计 319。67.71% 的 C 档是按叶生长最爱下手的区域——切 C 往往立刻降低损失。A、B 合计不到三分之一,叶子一旦被允许继续往下长,稀有年级会变成一条很深、很窄的规则,验证集上容易碎掉。
| 项目 | 类别 | 统计量 | 取值 |
|---|---|---|---|
| LightGBM分类 | 类别 A | 频数 | 49 |
| LightGBM分类 | 类别 B | 频数 | 54 |
| LightGBM分类 | 类别 C | 频数 | 216 |
| LightGBM分类 | 合计 | 有效样本 N | 319 |
| LightGBM分类 | 类别 A | 占比(%) | 15.36 |
| LightGBM分类 | 类别 B | 占比(%) | 16.93 |
| LightGBM分类 | 类别 C | 占比(%) | 67.71 |
左右滑动可查看完整表格
教学示例表在 StatsX 工作台中的计算结果口径。


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.