Як передбачити ймовірності в xgboost?


16

Нижче наведена функція прогнозування також дає значення -ve, тому ймовірності не можуть бути.

param <- list(max.depth = 5, eta = 0.01,  objective="binary:logistic",subsample=0.9)
bst <- xgboost(param, data = x_mat, label = y_mat,nround = 3000)

pred_s <- predict(bst, x_mat_s2)

Я google & спробував, pred_s <- predict(bst, x_mat_s2,type="response") але це не вийшло.

Питання

Як передбачити ймовірності?


Чи не виводить ймовірності за замовчуванням за допомогою використовуваних вами налаштувань? Я маю на увазі: ви перевірили pre_s і ви впевнені, що це не ймовірності?
kpb

Немає його негативних значень. Ймовірність повинна коливатися в межах від 0 до 1.
GeorgeOfTheRF

Я не бачу явних проблем. (Хоча я більше знайома з обгорткою пітона). Ви намагалися додати outputmargin=Fдо predictфункції? Якщо так чи інакше outputmarginвстановлено значення T, воно поверне значення до логістичного перетворення.
інверсія

1
Для Python ви можете скопіювати predict_probaреалізацію з sklearnAPI: github.com/dmlc/xgboost/blob/master/python-package/xgboost/…
Антон Тарасенко

Відповіді:


14

Знайте, я трохи запізнююся, але щоб отримати ймовірності від xgboostвас, слід вказати multi:softmaxтаку ціль:

xgboost(param, data = x_mat, label = y_mat,nround = 3000, objective='multi:softprob')

З ?xgb.train:

multi: softprob, такий же, як softmax, але виводить вектор ndata * nclass, який можна додатково переробити на матрицю ndata, nclass. Результат містить передбачувані ймовірності кожної точки даних, що належить кожному класу.


2
Спасибі. Чим ця функція втрати відрізняється від двійкової: логістичної для двійкової класифікації?
GeorgeOfTheRF

3
Це просто узагальнення логістичної функції для багатокласового випадку, не повинно бути суттєвої різниці.
cyberj0g

14

Просто використовуйте predict_probaзамість predict. Ви можете залишити мета як binary:logistic.


3
Якби це був Python, а не R, то ця відповідь може бути розумною. Неправильна мова.
B_Miner

1
ой! дякую @B_Miner Я не видаляю цю відповідь, оскільки це може бути корисним для інших, хто зробить ту саму помилку і подумає, що ми говоримо про python ..
ihadanny

Для мене це не робить фокус datascience.stackexchange.com/questions/14527/…
Георг Хайлер

4
У xgboost немає функції прогнозування_проба
Ashoka Lella

1
Класифікатор XGBoost має опцію передбачення_проба xgboost.readthedocs.io/en/latest/python/python_api.html
Пол Бендевіс

0

після передбачення

pred_s <- predict(bst, x_mat_s2)

ви можете отримати ймовірність за допомогою

pred_s$data

Якщо це двійкова класифікація, тоді pred_s$dataвключають prob.0, prob.1, response.

Таким чином, ви можете отримати prob.1 by

pred_s$data$prob.1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.