高级主题

缺失值处理

  • LightGBM 默认启用缺失值处理。通过设置 use_missing=false 来禁用它。

  • LightGBM 默认使用 NA (NaN) 来表示缺失值。通过设置 zero_as_missing=true 将其更改为使用零。

  • zero_as_missing=false (默认)时,稀疏矩阵 (和 LightSVM) 中未记录的值被视为零。

  • zero_as_missing=true 时,NA 和零 (包括稀疏矩阵 (和 LightSVM) 中未记录的值) 被视为缺失值。

类别特征支持

  • LightGBM 对整数编码的类别特征提供良好的精度。LightGBM 应用 Fisher (1958) 来寻找类别的最优划分,如这里所述。这通常比独热编码效果更好。

  • 使用 categorical_feature 来指定类别特征。请参阅 参数 中的参数 categorical_feature

  • 类别特征将被转换为 int32 (Python 包会从 pandas 类别类型中提取整数编码),因此它们必须编码为非负整数 (负值将被视为缺失值),且小于 Int32.MaxValue (2147483647)。最好使用从零开始的连续整数范围。类别特征中的浮点数将被四舍五入到接近 0 的整数。

  • 使用 min_data_per_group, cat_smooth 来处理过拟合 (当 #data 很小或 #category 很大时)。

  • 对于高基数 (#category 很大) 的类别特征,将其视为数值特征通常效果最好,可以通过简单地忽略整数的类别解释,或者通过在低维数值空间中嵌入类别来实现。

LambdaRank

  • 标签应为 int 类型,较大的数字对应更高的相关性 (例如 0: 差, 1: 一般, 2: 好, 3: 完美)。

  • 使用 label_gain 设置 int 标签的增益 (权重)。

  • 使用 lambdarank_truncation_level 截断最大 DCG。

成本效率梯度提升

成本效率梯度提升 (Cost Efficient Gradient Boosting, CEGB) 可以根据获取特征值的成本来惩罚提升。CEGB 通过以下方式惩罚学习:

  • 每次树进行分裂时,应用 cegb_penalty_split 惩罚。

  • 当一个特征首次使用时,应用 cegb_penalty_feature_coupled。此惩罚对于每个特征可能不同,应指定为每个特征一个 double 值。

  • 当一个特征首次用于数据行时,应用 cegb_penalty_feature_lazy。与 cegb_penalty_feature_coupled 类似,此惩罚指定为每个特征一个 double 值。

上述每个惩罚都按 cegb_tradeoff 进行缩放。通过此参数,只需更改一个参数即可改变 CEGB 惩罚的整体强度。

参数调优

分布式学习

GPU 支持

位置偏差处理支持

排序学习任务中提供的相关性标签通常可能来源于隐式用户反馈 (例如,点击),因此由于在展示给用户时的位置/地点而可能存在偏差。LightGBM 可以利用位置数据。

例如,考虑这样一种情况:您期望搜索引擎的前 3 个结果在用户的浏览器中无需滚动即可见,而查询的所有其他结果则需要滚动。

可以通过提供一个如下编码的 positions 数组来告知 LightGBM 考虑“首屏”结果带来的位置偏差:

0
0
0
1
1
0
0
0
1
...

其中 0 = "above the fold" (首屏可见) 和 1 = "requires scrolling" (需要滚动)。具体的值并不重要,只要在训练数据的所有观察结果中保持一致即可。像 100 = "above the fold"17 = "requires scrolling" 这样的编码将产生完全相同的训练模型。

通过这种方式,LightGBM API 中的 positions 类似于类别特征。就像非有序类别特征一样,整数表示仅用于内存和计算效率… LightGBM 不关心值的绝对或相对大小。

然而,与类别特征不同的是,positions 用于调整目标以减少训练模型产生的预测偏差。

位置文件与训练数据文件逐行对应,每行一个位置。如果训练数据文件名为 train.txt,则位置文件应命名为 train.txt.position 并放置在与数据文件相同的文件夹中。在这种情况下,如果存在位置文件,LightGBM 将自动加载它。在使用 Python API 时,位置也可以通过 Dataset 构造函数指定。如果通过这两种方式都指定了位置,则 .position 文件将被忽略。

目前,实现了一种通过广义相加模型 (GAM) 的思想来建模位置偏差的方法,将文档得分 s 线性分解为相关性分量 f 和位置分量 g 的总和:s(x, pos) = f(x) + g(pos),其中前者分量取决于原始的查询-文档特征,后者取决于项目的位置。在训练过程中,复合评分函数 s(x, pos) 使用标准排序算法 (例如,LambdaMART) 进行拟合,这可以归结为联合学习相关性分量 f(x) (它随后作为无偏模型返回) 和位置因子 g(pos),它们有助于更好地解释观测到的 (有偏的) 标签。类似的得分分解思想之前已被应用于具有二元标签和二元相关性假设的分类和单点排序任务 (又称“双塔”模型,请参阅论文:Towards Disentangling Relevance and Bias in Unbiased Learning to Rank, PAL: a position-bias aware learning framework for CTR prediction in live recommender systems, A General Framework for Debiasing in CTR Prediction)。在 LightGBM 中,我们将此思想应用于带有任意有序相关性标签的通用成对排序学习。此外,GAMs 已在可解释机器学习 (Accurate Intelligible Models with Pairwise Interactions) 中使用,将每个特征 (以及可能的成对交互) 对总得分的贡献进行线性分解,以便后续分析和解释它们在训练模型中的影响。