Как получить вероятность принадлежности к заданному классу в xgboost.XGBClassifier?

Есть 4 класса,

1; AA; 2; BB

образец столбца с классами прикладываю: введите сюда описание изображения Создание объекта XGB:

prm = {'num_class': 4, 'objective': 'multi:softmax'}                 
XGB = xgboost.XGBClassifier()
XGB.set_params(**prm) 

обучение XGB:

XGB.fit(train_data, train_labels, train_weights)

При попытке использовать:

XGB.predict_proba(test_data)[:,3]

выдает ошибку

IndexError: index 4 is out of bounds for axis 1 with size 4

в выходном массиве вероятностей присутствуют только 3 столбца вместо 4х

Как узнать вероятность для конкретного класса, например для класса

AA

?


Ответы (1 шт):

Автор решения: CrazyElf

При обучении в качестве y вы использовали матрицу размером n x m, где n - число сэмплов, m - число классов в таргете.

Соответственно, predict_proba у моделей тоже обычно выдаёт в таких случаях матрицу размером n x m с вероятностями для каждого класса по каждому сэмплу.

Таким образом, массив вероятностей для первого класса из списка можно получить так (нумерация классов начинается с 0, как и все нумерации в питоне):

XGB.predict_proba(test)[:,0]

То есть берём с помощью среза первый столбец у предсказанной матрицы вероятностей.

И ещё раз что касается порядка классов. Каким столбцом в y (или labels) у вас идут значения для класса AA, такой же столбец с вероятностями и надо смотреть в predict_proba.

→ Ссылка