XGBoost выдает результат и вероятность прогноза - PullRequest
1 голос
/ 07 апреля 2020

Я, наверное, просматриваю это в документации, но я хотел знать, есть ли способ с XGBoost генерировать как прогноз, так и вероятность для результатов? В моем случае я пытаюсь предсказать мультиклассовый классификатор. было бы здорово, если бы я мог вернуть Medium - 88%.

  • Классификатор = Средний
  • Вероятность прогнозирования = 88%

Параметры

params = {
    'max_depth': 3,
    'objective': 'multi:softmax',  # error evaluation for multiclass training
    'num_class': 3,
    'n_gpus': 0
}

Прогноз

pred = model.predict(D_test)

результаты

array([2., 2., 1., ..., 1., 2., 2.], dtype=float32)

Удобный для пользователя (кодировщик меток)

pred_int = pred.astype(int)
label_encoder.inverse_transform(pred_int[:5])
array(['Medium', 'Medium', 'Low', 'Low', 'Medium'], dtype=object)

РЕДАКТИРОВАТЬ: @Reveille предлагаем прогнозируемую_процедуру. Я не создаю экземпляр XGBClassifer (). Должна ли я быть? Как бы я изменил свой конвейер, чтобы использовать это, если так?

params = {
    'max_depth': 3,
    'objective': 'multi:softmax',  # error evaluation for multiclass training
    'num_class': 3,
    'n_gpus': 0
}

steps = 20  # The number of training iterations

model = xgb.train(params, D_train, steps)

1 Ответ

1 голос
/ 07 апреля 2020

Вы можете попробовать pred_p = model.predict_proba(D_test)

Пример, который у меня был (но не мультикласс):

import xgboost as xgb
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split

X, y = make_moons(noise=0.3, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)

xgb_clf = xgb.XGBClassifier()
xgb_clf = xgb_clf.fit(X_train, y_train)

print(xgb_clf.predict(X_test))
print(xgb_clf.predict_proba(X_test))


[1 1 1 0 1 0 1 0 0 1]
[[0.0394336  0.9605664 ]
 [0.03201818 0.9679818 ]
 [0.1275925  0.8724075 ]
 [0.94218    0.05782   ]
 [0.01464975 0.98535025]
 [0.966953   0.03304701]
 [0.01640552 0.9835945 ]
 [0.9297296  0.07027044]
 [0.9580196  0.0419804 ]
 [0.02849442 0.9715056 ]]

Примечание, как упомянуто в комментариях @scarpacci ( ref ):

метод преломления_пробы () существует только для интерфейса scikit-learn

...