高级主题

缺失值处理

  • 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_groupcat_smooth 来处理过拟合问题(当 #数据 较少或 #类别 较多时)。

  • 对于具有高基数的分类特征(#category 很大),通常最好的做法是将该特征视为数值型,可以通过简单地忽略整数的分类解释,或者通过将类别嵌入到低维数值空间中来实现。

LambdaRank

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

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

  • 使用 lambdarank_truncation_level 来截断最大 DCG。

成本效益梯度提升

成本效益梯度提升 (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 = "折叠上方"1 = "需要滚动"。具体数值并不重要,只要在训练数据中的所有观测值保持一致即可。编码如 100 = "折叠上方"17 = "需要滚动" 将产生完全相同的训练模型。

通过这种方式,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 RankPAL: a position-bias aware learning framework for CTR prediction in live recommender systemsA General Framework for Debiasing in CTR Prediction)。在 LightGBM 中,我们将这一思想适应于具有任意序数相关性标签的通用成对学习排序。此外,GAMs 已在可解释的机器学习上下文中使用(Accurate Intelligible Models with Pairwise Interactions),以线性分解每个特征(以及可能的成对交互)对总分的贡献,以便随后分析和解释它们在训练模型中的影响。