В базовом пошаговом руководстве от XGBoost мы сначала загружаем набор данных.
>>> dtrain = xgb.DMatrix('../data/agaricus.txt.train')
[20:37:22] 6513x127 matrix with 143286 entries loaded from ../data/agaricus.txt.train
>>> dtest = xgb.DMatrix('../data/agaricus.txt.test')
[20:37:23] 1611x127 matrix with 35442 entries loaded from ../data/agaricus.txt.test
Однако наборы данных, как представляется, содержат 127 функций, а не 126, как описано вПакет R XGBoost .
>>> dtrain.num_col()
127
Кроме того, xgboost.Booster.predict
вернет матрицу размера (nsample, nfeats + 1), когда установлено pred_contribs
до True
. Поскольку preds
имеет 128 столбцов, мы можем заключить, что dtrain
содержит 127 объектов.
>>> param = {'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic'}
>>> watchlist = [(dtest, 'eval'), (dtrain, 'train')]
>>> num_round = 2
>>> bst = xgb.train(param, dtrain, num_round, watchlist)
[0] eval-error:0.042831 train-error:0.046522
[1] eval-error:0.021726 train-error:0.022263
>>> preds = bst.predict(dtest, output_margin=True, pred_contribs=True, approx_contribs=True)
>>> preds.shape
(1611, 128)
Что здесь происходит? Неужели xgboost.DMatrix
ошибочно рассматривали метку как 127-ю функцию? Если текстовый файл libsvm проанализирован правильно, то почему в preds
128 столбцов?