首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xgboost排序目标成对比(ndcg & map)

xgboost排序目标成对比(ndcg & map)
EN

Stack Overflow用户
提问于 2020-08-13 17:41:30
回答 1查看 4.6K关注 0票数 4

我使用xgboost在产品概览页面上对一组产品进行排序。这里的相关标签是关于受欢迎程度、盈利能力等方面的评级。这些功能是与产品相关的特性,如收入、价格、点击量、印象等。

我知道秩:低级,秩:ndcg,秩:map都实现了LambdaMART算法,但是它们在优化模型的方式上有所不同。

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

x_train shape

(800、10)

y_train shape

800

group_train

400,400

标签0,1,2,3。

类似地,下面是我的验证集和测试集。x_val shape

(400、10)

y_val shape

400

group_val

200,200

x_test shape

(160、10)

y_test shape

160

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

代码语言:javascript
复制
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])

预测结果如下所示,这正是我所期望的。

代码语言:javascript
复制
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,

但是当我把目标改为等级时:ndcg

代码语言:javascript
复制
params = {'objective': 'rank:ndcg', '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])

我的预测完全奇怪。

代码语言:javascript
复制
[0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
   0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
   0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,

有人能帮上忙吗,为什么?

EN

回答 1

Stack Overflow用户

发布于 2021-04-01 05:47:42

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

代码语言:javascript
复制
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])```
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63400523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档