xgBoost [Rank:Pairwise]:交叉验证不能按预期工作(它会启动运行时错误)

问题描述 投票:0回答:1
  • 操作系统:MacOS 10.12.4
  • 编译器:gcc5
  • 使用的包(python / R / jvm / C ++):Python
  • 使用'xgboost'版本:0.6(昨天从'pip install'下载)
  • Python版本= 2.7.13

重现步骤

我想应用成对排名模型,作为这个库中的一个(https://github.com/dmlc/xgboost)。

在设置DMatrix并使用set_group()方法(我已经将此方法传递给numpy.array数据结构)之后,我在CrossValidation时遇到了问题。这是我的Python源代码:

xgdmat = xgb.DMatrix(X_training, y_training) # Create our DMatrix to make XGBoost more efficient
xgdmat.set_group(group=groups_query_id) # Set the query_id values to DMatrix data structure

model_parameters = {'objective': 'rank:pairwise', 'seed': 0, 'booster' : ['gbtree', 'gblinear, dart'],
'eta': [0.1, 0.2, 0.3, 0.4, 0.5], 'gamma' : [0, 1],
'subsample': [0.5, 0.75, 0.9],
'max_depth': [3, 5], 'min_child_weight': 1, 'max_delta_step' : 0,
'colsample_bytree': [0.5, 0.75, 0.9], 'colsample_bylevel' : [0.5, 0.75, 0.9],
'lambda' : 1, 'alpha' : 0, 'tree_method' : ['auto', 'exact', 'approx', 'hist']}

cv_xgb = xgb.cv(params=model_parameters, dtrain=xgdmat, num_boost_round=1000, nfold=10, metrics=['auc', 'ndcg', 'map'], early_stopping_rounds=100) #THE PROBLEM OCCURS HERE!!!

print cv_xgb.tail(5)

final_gb = xgb.train(model_parameters, xgdmat, num_boost_round=500)

当我启动这个程序时,我发现了这种问题: “检查失败:(src.info.group_ptr.size())==(0)切片不支持组结构”

 [15:43:58] dmlc-core/include/dmlc/logging.h:235: [15:43:58] src/c_api/c_api.cc:342: Check failed: (src.info.group_ptr.size()) == (0) slice does not support group structure

[15:43:58] dmlc-core / include / dmlc / logging.h:235:[15:43:58] src / c_api / c_api.cc:342:检查失败:(src.info.group_ptr.size( ))==(0)slice不支持组结构Traceback(最近一次调用last):文件“/Users/edoardo/PycharmProjects/MasterThesisProject/extra/Prova.py”,第225行,在metodo3()文件中“/ Users /edoardo/PycharmProjects/MasterThesisProject/extra/Prova.py“,第164行,在metodo3 metrics = ['auc,''ndcg','map'],early_stopping_rounds = 100)文件”/Library/Frameworks/Python.framework/版本/ 2.7 / lib / python2.7 / site-packages / xgboost / training.py“,第371行,cv cvfolds = mknfold(dtrain,nfold,params,seed,metrics,fpreproc,stratified,folds)文件”/ Library /Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/xgboost/training.py“,第248行,在mknfold dtrain = dall.slice(np.concatenate([idset [i] for i) in range(nfold)if k!= i]))文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/xgboost/core.py”,第531行,切片ctypes的。 byref(res.handle)))文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/xgboost/core.py”,第127行,在_check_call中引发XGBoostError(_LIB。 XGBGetLastError())xgboost.core.XGBoostError:[15:43:58] src / c_api / c_api.cc:342:检查失败:(src.info.group_ptr.size())==(0)切片不支持小组结构

你有什么尝试?

  1. 我试图传递一个numpy.array作为set_group()方法的输入
  2. 我试图传递一个列表作为set_group()方法的输入

解决此问题的任何提示或解决方法?我知道很多人和我有同样的问题,但我找不到解决办法。

python machine-learning ranking cross-validation xgboost
1个回答
0
投票

这样的事情我也经历过。根据我的错误信息,也许它与xgb.cv'nfold乐趣有关。

基本上与群体信息一起,应该进行分层的nfold,但如何进行分层的nfold?有标签还是group_info?哪一个更有意义?也许它不清楚。

尝试直接使用sklearn的Stratified K-Folds代替。或者只使用不同的组。有些人为火车,有些人为考试。

© www.soinside.com 2019 - 2024. All rights reserved.