高级主题
缺失值处理
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
来处理过拟合问题(当#数据
较少或#类别
较多时)。对于具有高基数的分类特征(
#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 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),以线性分解每个特征(以及可能的成对交互)对总分的贡献,以便随后分析和解释它们在训练模型中的影响。