问题描述
我使用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])```