python - xgboost 排名目标成对 vs (ndcg & 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', '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])
我的预测完全奇怪。
[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,
有人可以帮助知道,为什么?
解决方案
我一开始也有同样的问题。删除伽玛对我有用。你可以试试
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])```
推荐阅读
- asp.net - .net 核心应用程序中的多个 React 应用程序
- vue.js - Vue vuelidate 不工作文件类型输入
- geotools - 日志消息:org.geotools.renderer.style:空输入流,无法加载字体
- r - 从闪亮的 DTedit uiOutput 对象中获取选定的行
- android - 在应用更新中在 Google Play Core 中安装错误(-100)
- c# - .Net Core WebApp API 端点一旦部署到 Azure 就不起作用
- php - 严重性:核心警告,PHP 启动:无法加载动态库“openssl”消息
- java - 阿帕奇骆驼路线模板
- python - 当我尝试编译使用我之前为旋转图像而编写的代码的代码时,我的代码不断抛出 matmul 错误
- python - 如何在 Django 中创建具有尺寸和颜色的产品变体(带有多个图像)?