xgBoost中的成对排名模型如何拟合?


14

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

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

例如,Microsoft Learning to Rank数据集使用此格式(标签,组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]

我也遇到了这个问题,但是我应该将哪种set_group传递给函数?当我构造一个numpy或列表时,出现如下错误:d:\ build \ xgboost \ xgboost-git \ dmlc-core \ include \ dmlc \ ./ logging.h:235:[12:03:09] D:\ Build \ xgboost \ xgboost-git \ src \ c_api \ c_api.cc:342:检查失败:(src.info.group_ptr.size())==(0)片不支持组结构@amyrit
user2404620

Answers:


9

根据XGBoost文档,XGboost期望:

  • 同一组的示例是连续的示例,
  • 每个组大小的列表(您可以在Python中使用set_group方法设置DMatrix)。

1
谢谢,sklearn.py对于Python软件包来说,用于模型构建()的API似乎有点不完整。
tokestermw '16

4

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

为了便于排名,您可以使用我的xgboostExtension

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.