#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])