Для этого у вас есть метод predict_proba
, который возвращает прогноз вероятностей класса.
Давайте проверим пример с использованием набора данных iris :
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, :2] # we only take the first two features.
y = iris.target
# train/test split
X_train, X_test, y_train, y_test = train_test_split(X, y)
rf = RandomForestClassifier(n_estimators = 10, random_state=10)
rf.fit(x_train,y_train)
Если вы теперь вызываете метод predict
, как и ожидалось, вы получаете класс наибольшей вероятности:
rf.predict(X_test)
# array([1, 2, 1, 0, 2, 0, 2, 0, 0, 1, 2, ...
Однако, вызывая predict_proba
вы получите соответствующие вероятности:
rf.predict_proba(X_test)
array([[0. , 1. , 0. ],
[0.11 , 0.1 , 0.79 ],
[0. , 0.7 , 0.3 ],
[0.5 , 0.4 , 0.1 ],
[0. , 0.3 , 0.7 ],
[0.5 , 0.2 , 0.3 ],
[0.4 , 0. , 0.6 ],
...
Чтобы получить самые высокие k
вероятности, вы можете использовать argsort
и индексировать соответствующие вероятности rf.classes_
:
k = 2
rf.classes_[rf.predict_proba(X_test).argsort()[:,-k:]]
array([[2, 1],
[0, 2],
[2, 1],
[1, 0],
[1, 2],
[2, 0],
[0, 2],
[1, 0],
[1, 0],
[2, 1],
...
Выше можно улучшить, используя argpartition
, так как нас интересуют только верхние k
вероятности:
rf.classes_[rf.predict_proba(X_test).argpartition(range(k))[:,-k:]]