据我所知,要训练学习对模型进行排名,您需要在数据集中有三件事:

  • 标签或相关性
  • 组或查询ID
  • 特征向量

例如, 微软学习排名数据集 使用此格式(标签,组ID和功能)。

1 qid:10 1:0.031310 2:0.666667 ...
0 qid:10 1:0.078682 2:0.166667 ...

我正在尝试使用GBM进行成对排名的XGBoost。他们有一个 排名任务的示例 它使用C ++程序在Microsoft数据集上学习,如上所述。

但是,我正在使用他们的Python包装器,似乎找不到我可以输入组ID的地方(qid 以上)。我可以只使用功能和相关得分来训练模型,但我觉得我缺少一些东西。

这是一个示例脚本。

gbm = XGBRegressor(objective="rank:pairwise")

X =  np.random.normal(0, 1, 1000).reshape(100, 10)
y = np.random.randint(0, 5, 100)

gbm.fit(X, y) ### --- no group id needed???

print gbm.predict(X)

# should be in reverse order of relevance score
print y[gbm.predict_proba(X)[:, 1].argsort()][::-1]
有帮助吗?

解决方案

根据 XGBoost文档, ,XGBoost期望:

  • 同一组的示例是连续的示例,
  • 一个具有每个组大小的列表(您可以将其设置为 set_group 的方法 DMatrix 在Python)。

其他提示

set_group 对于排名非常重要,因为只有一个组中的分数是可比的。您可以根据自己的小组分数对数据进行排序。

对于简单排名,您可以使用我的 XGBoostExtension.

许可以下: CC-BY-SA归因
scroll top