如何提高LightGBM在排序任务中的性能

如何使用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有一个非常好用且易于使用的实现。你可以查看其他技术,如sklearn实现的Halving Randomised Search。

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注