我是学习排名的新手。我正在尝试学习xgboost 提供的Learning to rank 示例。发现核心代码如下rank.py
。
train_dmatrix = DMatrix(x_train, y_train)
valid_dmatrix = DMatrix(x_valid, y_valid)
test_dmatrix = DMatrix(x_test)
train_dmatrix.set_group(group_train)
valid_dmatrix.set_group(group_valid)
params = {'objective': 'rank:pairwise', 'eta': 0.1, 'gamma': 1.0,
'min_child_weight': 0.1, 'max_depth': 6}
xgb_model = xgb.train(params, train_dmatrix, num_boost_round=4,
evals=[(valid_dmatrix, 'validation')])
pred = xgb_model.predict(test_dmatrix)
组数据用于训练和验证集。但是测试集预测不使用组数据。我还查看了一些解释来介绍模型输出,例如XGboost 使用“rank:pairwise”的输出是什么?.
实际上,在 Learning to Rank 领域,我们试图预测每个文档对特定查询的相对分数。
我的理解是,如果测试集没有分组数据,则不指定查询。模型如何输出指定查询的相对分数?
我已经尝试添加test_dmatrix.set_group(group_test)
. 两种方法的输出结果非常吻合,例如:
[ 1.3535978 -2.9462705 0.86084974 ... -0.23594362 0.712791
-1.633297 ]
所以我的问题如下:
为什么在 xgboost 中使用 'rank:pairwise' 时不需要设置测试组?
如何根据预测分数结果获取指定组查询的标签?
谁能给我解释一下?提前致谢。