Как получить ‘predict_proba’ для класса, предсказанного ‘predict’ в классификаторе случайных лесов?

#python #machine-learning #scikit-learn #random-forest

#python #машинное обучение #scikit-learn #случайный лес

Вопрос:

 from sklearn import ensemble

model = ensemble.RandomForestClassifier(n_estimators=10)
model.fit(x,y)
predictions = model.predict(new)
  

Я знаю predict() , что используется predict_proba() для получения прогнозов путем вычисления среднего значения вероятностей прогнозируемого класса деревьев в лесу.

Я хочу получить результат predict_proba() для класса, предсказанного predict() методом.

Что я делаю: первый вызов predict() , как в приведенном выше коде, и для вероятности я извлекаю максимальную вероятность из деревьев следующим образом:

 all_probabilities = model.predict_proba()
class_probabilities = np.array([])
for tree in all_probabilities:
    class_probabilites = np.append(class_probabilities, tree.max())
  

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

Комментарии:

1. Вы уверены, что хотите это сделать? Потому что, с точки зрения моделирования, не имеет особого смысла — когда мы получаем значение вероятности, скажем, 0.7 в двоичном случае, мы хотим быть уверены, что это означает » 0,7 вероятности нахождения в классе 1 «; с тем, что вы описываете, это больше не будет иметь место, и0,7 может означать либо » 0,7 вероятности класса 1 «, либо » 0,7 вероятности класса 0 «, что, как уже было сказано, не имеет никакого смысла.

2. @desertnaut в моем случае я хочу предсказать около 1000 классов. Мне нужны вероятности, чтобы сравнить их с достоверностью разных моделей из разных методов обучения и выбрать прогноз с наибольшей достоверностью.

3. Тогда приведенный ниже ответ — это то, что вы ищете.

Ответ №1:

predict_proba() Метод возвращает двумерный массив, содержащий оцененные вероятности для каждого экземпляра и каждого класса:

 import numpy as np
from sklearn.ensemble import RandomForestClassifier

X = np.array([[1, 2, 3], 
              [4, 5, 6], 
              [7, 8, 9], 
              [10, 11, 12]])
y = np.array([0, 0, 1, 1])

model = RandomForestClassifier()
model.fit(X, y)

model.predict_proba(X)
  
 array([[0.91, 0.09],
       [0.91, 0.09],
       [0.25, 0.75],
       [0.05, 0.95]])
  

Как вы заметили, для каждого экземпляра предсказанный класс — это класс с максимальной вероятностью. Итак, один простой способ получить оценочные вероятности для предсказанных классов — использовать np.max() :

 np.max(model.predict_proba(X), axis=1)
  
 array([0.91, 0.91, 0.75, 0.95])