Как предсказать вероятности в 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") но это не сработало.

Вопрос

Как предсказать вероятности вместо этого?


Разве он не выводит вероятности по умолчанию с настройками, которые вы использовали? Я имею в виду: вы изучали pred_s и уверены, что это не вероятность?
КПБ

Нет, это имеет отрицательные значения. Вероятность должна варьироваться от 0 до 1.
GeorgeOfTheRF

Я не вижу никаких очевидных проблем. (Хотя я более знаком с оболочкой Python). Вы пытались добавить 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. Я не удаляю этот ответ, так как он может быть полезен для других, которые
допустят


4
У xgboost нет функции предиката_проба
Ашока Лелла


0

после прогноза

pred_s <- predict(bst, x_mat_s2)

Вы можете получить вероятность путем

pred_s$data

Если это бинарная классификация, то pred_s$dataвключает в себя prob.0, prob.1, ответ.

Таким образом, вы можете получить

pred_s$data$prob.1
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.