如何使用LightGBM提高学习排名项目的NDCG分数?
目前正在进行一个学校项目,该项目需要学习对每个查询的文档进行排名的功能,我已经用以下参数训练了我的模型:
objective="lambdarank",
metric="ndcg",
与LGBMRanker一起使用。
起初,我的NDCG分数很高,但通过根据老师的正确验证集运行预测排名,NDCG分数大幅下降(0.78至0.5)。我对此调整了参数,以减少过度拟合,我还运行了一系列F分数测试、互信息测试和sklearn的随机森林重要性来选择特征。然而,我的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的,但我希望你做了你应该做的一切。
你没有分享很多关于你的数据的信息。例如,你有足够的样品吗?你有多少功能?也许你的特征比样本多,这就是你尝试执行特征选择的原因。你也可以检查你的验证集(你的老师提供的)和你的培训集有多不同。此外,通过使用交叉验证训练模型,检查如果将此验证集作为训练集的一部分会发生什么。我会检查一下折叠之间的表现以及这些表现的差异。如果它们变化很大,那么问题可能源于数据。
尽管如此,我还是建议您不要手动和在单个验证集上执行超参数调整。主要原因是你会在这个验证集上过度填充,当测试集出现时,你的性能不会像你预期的那样。因此,在仔细设置超参数空间后,可以使用交叉验证的随机搜索。sklearn
有一个非常好且易于使用的实现。您可以检查其他技术,如减半随机搜索;也由CCD_ 2实现。
即使您正确地执行了超参数调整,性能改进也不会像您希望的那样高。超参数调整通常会使您的性能提高1-5%。因此,我建议您检查一下自己的功能。也许你可以从当前的特征空间生成新的特征,或者创建交叉特征,丢弃共线特征等。