我想应用成对排名模型,作为此库中的一个(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)切片不支持组结构 回溯(最近一次调用最后一次):File" /Users/edoardo/PycharmProjects/MasterThesisProject/extra/Prova.py" ;,第225行,在metodo3()文件" / Users / edoardo / PycharmProjects / MasterThesisProject / extra / Prova.py",第164行,在metodo3指标= [' auc,'' ndcg',' map'],early_stopping_rounds = 100)文件" /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/xgboost/training.py" ;,第371行,cv cvfolds = mknfold(dtrain, nfold,params,seed,metrics,fpreproc,stratified,folds)File" /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]))File" /Library/Frameworks/Python.framework/版本/ 2.7 / lib / python2.7 / site-packages / xgboost / core.py",第531行,在切片ctypes.byref(res.handle)中))文件" / Library / Frameworks / Python。框架/版本/ 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)切片不支持组结构
解决此问题的任何提示或解决方法?我知道很多人和我有同样的问题,但我无法找到解决方案。
答案 0 :(得分:0)
同样的事发生在我身上。 根据我的错误消息,也许它与xgb.cv有关,并且很有趣。
基本上对于群体信息,应该进行分层的nfold,但如何进行分层的nfold?有标签还是group_info?哪一个更有意义呢?也许它不清楚。
尝试直接使用sklearn的分层K-Folds代替。或者只使用不同的组。有些人为火车,有些人为考试。