如何提高 LightGBM 的排名性能

How to increase performance of LightGBM for ranking

如何使用 LightGBM 提高学习排名项目的 NDCG 分数?

目前正在开展一个学校项目,该项目需要学习对每个查询的文档进行排名的功能,我已经使用以下参数训练了我的模型:

objective="lambdarank",
metric="ndcg",

与 LGBMRanker 一起使用。

最初我的 NDCG 分数相当高,但是通过 运行 将预测排名与老师的正确验证集进行比较,NDCG 分数大幅下降(0.78 到 0.5)。我为此调整了参数以减少过度拟合,并且我还 运行 一系列 F 分数测试、互信息测试和随机森林重要性从 sklearn 到 select 功能。但是我的 NDCG 分数仍然很低,我发现很难在不过度拟合的情况下预测正确的 NDCG,也很难提高模型的准确性。 我使用的当前参数:

objective="rank_xendcg",
metric="ndcg",
max_bin = 63,
learning_rate = 0.03,
num_iterations = 100,
num_leaves = 31,
path_smooth = 50,
lambda_l1 = 10,
min_gain_to_split = 10

显然,您的模型过度拟合了。您没有与我们分享您最初是如何评估您的模型并获得 0.78 NDCG 的,但我希望您所做的一切都是您应该做的。

您没有分享很多关于您的数据的信息。例如,你有足够的样品吗?你有多少特征?也许您拥有的特征多于样本,这就是您尝试执行特征选择的原因。您还可以检查您的验证集(您的老师提供的验证集)和您的训练集有何不同。还可以通过使用交叉验证训练模型来检查如果将此验证集用作训练集的一部分会发生什么。我会检查折叠的性能以及这些性能的差异。如果它们相差很大,那么问题可能出在数据上。

尽管如此,我还是建议您不要在单个验证集 上手动执行超参数调整。主要原因是你会简单地过度拟合这个验证集,当测试集出现时,你的表现将不会像你预期的那样。 出于这个原因,您可以在仔细设置超参数 space 后使用交叉验证进行随机搜索。sklearn 有一个非常好用且易于使用的实现。您可以查看其他技术,例如将随机搜索减半;也由 sklearn.

实施

即使你正确地进行了超参数调整,性能提升也不会像你希望的那么高。超参数调整通常可以将您的性能提高 1-5%。因此,我建议您检查您的功能。也许您可以从当前特征生成新特征 space 或创建交叉特征、丢弃共线特征等