Как получить вероятность принадлежности к заданному классу в 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 шт):
При обучении в качестве y вы использовали матрицу размером n x m, где n - число сэмплов, m - число классов в таргете.
Соответственно, predict_proba у моделей тоже обычно выдаёт в таких случаях матрицу размером n x m с вероятностями для каждого класса по каждому сэмплу.
Таким образом, массив вероятностей для первого класса из списка можно получить так (нумерация классов начинается с 0, как и все нумерации в питоне):
XGB.predict_proba(test)[:,0]
То есть берём с помощью среза первый столбец у предсказанной матрицы вероятностей.
И ещё раз что касается порядка классов. Каким столбцом в y (или labels) у вас идут значения для класса AA, такой же столбец с вероятностями и надо смотреть в predict_proba.