Похоже, вы, вероятно, используете VotingClassifier
sklearn. . После того, как вы установили классификатор, вы увидите вероятности, связанные с каждым классом, с помощью атрибута _ 2_. Обратите внимание, что это не точность, а связанная вероятность каждого класса. Поэтому, если вы хотите, чтобы вероятность того, что тестовая выборка относится к классу n
, вам придется проиндексировать результат y_pred_prob
в соответствующем столбце. Вот пример использования набора данных iris от sklearn:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
clf1 = LogisticRegression(multi_class='multinomial', random_state=1)
clf2 = RandomForestClassifier(n_estimators=50, random_state=1)
clf3 = GaussianNB()
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y)
eclf2 = VotingClassifier(estimators=[
('lr', clf1), ('rf', clf2), ('gnb', clf3)],
voting='soft')
eclf2 = eclf2.fit(X_train, y_train)
И мы могли бы получить вероятности, связанные с первым классом, например, с помощью:
eclf2.predict_proba(X_test)[:,0].round(2)
array([0.99, 0. , 0. , 0. , 0. , 0. , 0.01, 0.01, 0. , 0. , 0. ,
0.99, 0. , 0.99, 0.99, 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0.01, 0.98, 0. , 1. , 0.99, 0. , 0. , 0. , 0.99, 0.98,
0. , 0.99, 0. , 0.01, 0.99])
Наконец, чтобы получить результат, как вы описали, вы можете использовать результат, возвращаемый predict
, для индексации двумерного массива вероятностей следующим образом:
import pandas as pd
y_pred = eclf2.predict(X_test)
y_pred_prob = eclf2.predict_proba(X_test).round(2)
associated_prob = y_pred_prob[np.arange(len(y_test)), y_pred]
pd.DataFrame({'class':y_pred, 'Accuracy':associated_prob})
class Accuracy
0 0 0.99
1 2 0.84
2 2 1.00
3 1 0.95
4 2 0.99
5 2 0.91
6 1 0.98
7 1 0.98
8 1 0.93
Или, если вы предпочитаете вывод в виде словаря:
pd.DataFrame({'class':y_pred, 'Accuracy':associated_prob}).to_dict(orient='index')
{0: {'class': 0, 'Accuracy': 0.99},
1: {'class': 2, 'Accuracy': 0.84},
2: {'class': 2, 'Accuracy': 1.0},
3: {'class': 1, 'Accuracy': 0.95},
4: {'class': 2, 'Accuracy': 0.99},
person
yatu
schedule
10.05.2020
predict_proba
? - person Jake Tae   schedule 10.05.2020