Я получаю сообщение об ошибке при попытке запустить простой XGB. Ошибка упоминается ниже, но решение не помогает.
XGBoost Error info.labels.size ()! = 0U (0 против 0)
Ошибка выглядит следующим образом:
---------------------------------------------------------------------------
XGBoostError Traceback (most recent call last)
<ipython-input-748-7f7917b57181> in <module>
11 param = {'max_depth':3, 'eta':1, 'objective':'binary:logistic'}
12
---> 13 bst = xgb.train(param, dtrain, num_round)
14 preds = bst.predict(dtest)
~\AppData\Local\Continuum\anaconda3\envs\torch_env\lib\site-packages\xgboost\training.py in train(params, dtrain, num_boost_round, evals, obj, feval, maximize, early_stopping_rounds, evals_result, verbose_eval, xgb_model, callbacks)
207 evals=evals,
208 obj=obj, feval=feval,
--> 209 xgb_model=xgb_model, callbacks=callbacks)
210
211
~\AppData\Local\Continuum\anaconda3\envs\torch_env\lib\site-packages\xgboost\training.py in _train_internal(params, dtrain, num_boost_round, evals, obj, feval, xgb_model, callbacks)
72 # Skip the first update if it is a recovery step.
73 if version % 2 == 0:
---> 74 bst.update(dtrain, i, obj)
75 bst.save_rabit_checkpoint()
76 version += 1
~\AppData\Local\Continuum\anaconda3\envs\torch_env\lib\site-packages\xgboost\core.py in update(self, dtrain, iteration, fobj)
1247 _check_call(_LIB.XGBoosterUpdateOneIter(self.handle,
1248 ctypes.c_int(iteration),
-> 1249 dtrain.handle))
1250 else:
1251 pred = self.predict(dtrain, training=True)
~\AppData\Local\Continuum\anaconda3\envs\torch_env\lib\site-packages\xgboost\core.py in _check_call(ret)
187 """
188 if ret != 0:
--> 189 raise XGBoostError(py_str(_LIB.XGBGetLastError()))
190
191
XGBoostError: [15:11:21] C:/Users/Administrator/workspace/xgboost-win64_release_1.0.0/src/objective/regression_obj.cu:60: Check failed: preds.Size() == info.labels_.Size() (3843 vs. 0) : labels are not correctly providedpreds.size=3843, label.size=0
Таким образом, вышесказанное указывает на проблему с размером этикетки. Когда я запускаю следующий код, мои данные обучения (train_xgb
) и данные моей метки (test_xgb
) совпадают.
train_xgb = train_dummies.iloc[:, 2:]
test_xgb = train_dummies.iloc[:, 2]
print(train_xgb.shape, test_xgb.shape, type(train_xgb), type(test_xgb))
dtrain = xgb.DMatrix(train_xgb)
dtest = xgb.DMatrix(test_xgb)
Вот результат приведенного выше оператора печати: (3843, 3143) (3843,) <class 'pandas.core.frame.DataFrame'> <class 'pandas.core.series.Series'>
Я попытался изменить метки на их собственные массивы dataframe
и numpy
без изменений в ошибка.