xgboost排名目标成对vsndcg和map

问题描述

我使用xgboost在产品概述页面上对一组产品进行排名。这里的相关标签是根据受欢迎程度,获利能力等给出的评级的相关性。这些功能是与产品相关的功能,例如收入,价格,点击次数,展示次数等。

我知道rank:pariwise,rank:ndcg,rank:map都实现了LambdamART算法,但是在优化模型的方式上却有所不同。

下面是我的训练集的详细信息。 800个数据点分为两组(产品类型)。因此,每个组中有400个数据点。标签是0-3,其中0是不相关,3是最高相关。

x_train形状

(800,10)

y_train形状

800

group_train

[400,400]

标签 [0.,1.,2.,3。]

类似地,以下是我的验证集和测试集。 x_val形状

(400,10)

y_val形状

400

group_val

[200,200]

x_test形状

(160,10)

y_test形状

160

下面是我最初尝试的模型参数

params = {'objective': 'rank:pairwise','learning_rate': 0.1,'gamma': 1.0,'min_child_weight': 0.1,'max_depth': 6,'n_estimators': 100}
model = xgb.sklearn.XGBRanker(**params)
model.fit(x_train_sample,y_train_sample,group_train,verbose=False,eval_set=[(x_val_sample,y_val_sample)],eval_group=[group_val])

我的预期如下所示。

7.56624222e-01,3.05949116e+00,3.86625218e+00,1.57079172e+00,4.26489925e+00,7.92866111e-01,3.58812737e+00,4.02488470e+00,3.88625526e+00,2.50904512e+00,3.43187213e+00,3.60899544e+00,2.86354733e+00,4.36567593e+00,1.22325927e-01,2.79849982e+00,

但是当我将目标更改为rank:ndcg

params = {'objective': 'rank:ndcg',eval_group=[group_val])

我的预测完全奇怪。

[0.5,0.5,

有人可以帮忙知道吗,为什么?

解决方法

我一开始也遇到了同样的问题。删除伽马对我有用。你可以试试

params = {'objective': 'rank:ndcg','learning_rate': 0.1,'min_child_weight': 0.1,'max_depth': 6,'n_estimators': 100}
model = xgb.sklearn.XGBRanker(**params)
model.fit(x_train_sample,y_train_sample,group_train,verbose=False,eval_set=[(x_val_sample,y_val_sample)],eval_group=[group_val])```