据我所知,要训练学习对模型进行排名,您需要在数据集中包含三件事:
- 标签或相关性
- 组或查询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