Ошибка XGBoost info.labels.size ()! = 0U (0 против 0) - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь запустить регрессионную проблему на python, используя XGBOOST:

    import xgboost
    global clf
    clf = XGBRegressor(n_estimators = 500, 
                       learning_rate = 0.05,
                       max_depth=6,
                       n_jobs=4,
                       alpha = 0.1)

    clf.fit(X_train, y_train, 

            early_stopping_rounds = 5,
            eval_set = validation, verbose=False)

    predicted_test_tr = np.round(clf.predict(X_test))

Но после нескольких итераций возникает следующая ошибка:

XGBoostError: b'[10:56:23] src/objective/regression_obj.cc:43: Check failed: info.labels_.size() != 0U (0 vs. 0) label set cannot be empty\n\nStack trace returned 7 entries:\n[bt] (0) 0   libxgboost.dylib                    0x0000001a1971b7a1 dmlc::StackTrace() + 305\n[bt] (1) 1   libxgboost.dylib                    0x0000001a1971b52f dmlc::LogMessageFatal::~LogMessageFatal() + 47\n[bt] (2) 2   libxgboost.dylib                    0x0000001a19792d21 xgboost::obj::RegLossObj<xgboost::obj::LinearSquareLoss>::GetGradient(xgboost::HostDeviceVector<float>*, xgboost::MetaInfo const&, int, xgboost::HostDeviceVector<xgboost::detail::GradientPairInternal<float> >*) + 257\n[bt] (3) 3   libxgboost.dylib                    0x0000001a19717496 xgboost::LearnerImpl::UpdateOneIter(int, xgboost::DMatrix*) + 1014\n[bt] (4) 4   libxgboost.dylib                    0x0000001a1973369f XGBoosterUpdateOneIter + 79\n[bt] (5) 5   libffi.6.dylib                      0x0000000110308884 ffi_call_unix64 + 76\n[bt] (6) 6   ???                                 0x00007ffee1b29950 0x0 + 140732684998992\n\n'

Я попытался преобразовать входы и выходы с помощью:

.apply(pd.to_numeric)

Но все равно сообщает ту же ошибку; как это можно исправить?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Убедитесь, что и ваш набор поездов, и набор проверки имеют метки (y) для всех входов (x). Вы можете сохранить входные данные и метки в форме DMatrix, а затем передать их модели. Они необходимы для оценки.

0 голосов
/ 05 июля 2018

Этот код работает без проблем:

from xgboost import XGBRegressor
clf = XGBRegressor(n_estimators = 500, 
                       learning_rate = 0.05,
                       max_depth=6,
                       n_jobs=1,
                       alpha = 0.1)

import numpy as np
X_train = np.random.uniform(size=(100,10))
y_train = np.zeros(100)
clf.fit(X_train, y_train, verbose=False)

Обратите внимание, что у меня не установлено значение eval в clf.fit. Какая у вас переменная validation? Это должен быть кортеж xgboost.DMatrix и строка, например:

dval = xgb.DMatrix(X_val, label=y_val)
validation = (dval, "validation")
...