LightGBM

—Stars

面向高效梯度提升决策树训练的机器学习框架,提供原生训练接口与兼容 scikit-learn 的分类、回归和排序估计器,并支持 CPU、GPU、分布式训练、验证监控与 early stopping。

GRADIENT BOOSTING · LABEL SPACE CONSISTENCY

训练和验证,必须使用同一套类别坐标

模型在连续整数标签上学习,验证指标也必须在同一个内部空间计算;否则字符串会显式失败,非标准整数则会更危险地静默改变 early stopping。

PUBLIC LABELS · SAME TASKLGBMClassifier.fit()
TRAIN y["down", "up"]
EVAL y["down", "up"]

也适用于 [1, 2] 与 [0, 2, 7, 10]

BEFORE · SPLIT LABEL SPACES
TRAIN→[0, 1]EVAL→RAW LABELS
STRINGValueErrorINTEGERwrong metric
early stopping → wrong best_iteration_
AFTER · ONE FITTED ENCODERself._le.transform(eval_y)
SINGLEarray → encoded arrayMULTIPLEtuple → tuple(map)
TRAIN[0, 1]EVAL[0, 1] ✓
双重故障

字符串报错,整数标签悄悄算错指标

LightGBM 4.7.0 用 `eval_X` / `eval_y` 取代旧 `eval_set`,但 `LGBMClassifier.fit()` 只编码训练标签,未经编码的验证标签被直接传给底层模型。字符串类别会在构建验证集时抛出转换错误;`1/2` 或 `0/2/7/10` 等整数类别则不报错,却会用错误标签计算验证指标,进而污染 `evals_result_`、early stopping 与 `best_iteration_`。

一致性边界

训练与验证共享已拟合的 LabelEncoder

分类器的 Booster 始终在 `0..n_classes-1` 的内部类别空间训练,任何参与指标计算的验证标签都必须经过同一个已拟合 LabelEncoder。修复不能只覆盖单个数组:新接口同时允许单验证集与 tuple 多验证集,而且应保持现有的参数结构校验和错误路径不变。

接口修复

单输入与 Tuple 逐组进入相同转换路径

在进入 `LGBMModel.fit()` 前,用分类器已经拟合的 `self._le` 转换 `eval_y`;单数组直接编码,tuple 则逐个验证集编码,其他结构仍交给既有校验。参数化回归覆盖字符串、非零起始整数和非连续整数三类标签,并分别验证单输入与 tuple 输入都向底层传递完全一致的编码结果。

行为结果

指标、Early Stopping 与最佳迭代重新可信

新 `eval_X` / `eval_y` 接口现在与旧 `eval_set` 使用同一类别映射:字符串验证集可以正常训练,非标准整数类别不再静默产生错误指标,early stopping 与最佳迭代重新依据真实验证结果工作。改动集中在 2 个文件,核心修复新增 6 行;Python 包定向测试 482 项通过、254 项跳过、12 项预期失败。