Python xgboost排名目标成对vs(ndcg和地图)
我使用xgboost在产品概述页面上对一组产品进行排名。此处的相关性标签是指在受欢迎程度、盈利能力等方面给出的评级的相关性。这些功能是与产品相关的功能,如收入、价格、点击、印象等 我知道rank:pariwise、rank:ndcg、rank:map都实现了LambdaMART算法,但它们在如何优化模型方面有所不同 下面是我的训练集的详细信息。800个数据点分为两组(产品类型)。因此,每组有400个数据点。标签从0到3,其中0表示无相关性,3表示最高相关性 x_列车形状 (800,10) y\u列车形状 八百 团体列车 [400400] 标签 [0,1,2,3] 同样,下面是我的验证集和测试集。 x_val形状 (400,10) y_val形状 四百 组值 [200200] x_测试形状 (160、10) y\u测试形状 一百六十 下面是我最初尝试的模型参数Python xgboost排名目标成对vs(ndcg和地图),python,machine-learning,xgboost,ranking,Python,Machine Learning,Xgboost,Ranking,我使用xgboost在产品概述页面上对一组产品进行排名。此处的相关性标签是指在受欢迎程度、盈利能力等方面给出的评级的相关性。这些功能是与产品相关的功能,如收入、价格、点击、印象等 我知道rank:pariwise、rank:ndcg、rank:map都实现了LambdaMART算法,但它们在如何优化模型方面有所不同 下面是我的训练集的详细信息。800个数据点分为两组(产品类型)。因此,每组有400个数据点。标签从0到3,其中0表示无相关性,3表示最高相关性 x_列车形状 (800,10) y\u
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,
但当我把目标改为排名: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])```
一开始我也有同样的问题。移除伽马射线对我很有用。你可以试试
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])```
我也有同样的问题!我也有同样的问题!