Матрица путаницы - это способ подсчета количества ошибочных классификаций, т. Е. Количества предсказанных классов, которые оказались в неправильном классификационном бункере на основе истинных классов.
Хотя sklearn.metrics.confusion_matrix предоставляет числовую матрицу, я считаю более полезным генерировать «отчет» с использованием следующего:
import pandas as pd
y_true = pd.Series([2, 0, 2, 2, 0, 1, 1, 2, 2, 0, 1, 2])
y_pred = pd.Series([0, 0, 2, 1, 0, 2, 1, 0, 2, 0, 2, 2])
pd.crosstab(y_true, y_pred, rownames=['True'], colnames=['Predicted'], margins=True)
что приводит к:
Predicted 0 1 2 All
True
0 3 0 0 3
1 0 1 2 3
2 2 1 3 6
All 5 2 5 12
Это позволяет нам увидеть, что:
- Диагональные элементы показывают количество правильных классификаций для каждого класса: 3, 1 и 3 для классов 0, 1 и 2.
- Недиагональные элементы обеспечивают неправильную классификацию: например, 2 класса 2 были ошибочно классифицированы как 0, ни один из класса 0 не был ошибочно классифицирован как 2 и т. Д.
- Общее количество классификаций для каждого класса в обоих
y_true
и y_pred
из промежуточных итогов "Все"
Этот метод также работает для текстовых меток, и для большого количества выборок в наборе данных его можно расширить для предоставления отчетов в процентах.
import numpy as np
import pandas as pd
# create some data
lookup = {0: 'biscuit', 1:'candy', 2:'chocolate', 3:'praline', 4:'cake', 5:'shortbread'}
y_true = pd.Series([lookup[_] for _ in np.random.random_integers(0, 5, size=100)])
y_pred = pd.Series([lookup[_] for _ in np.random.random_integers(0, 5, size=100)])
pd.crosstab(y_true, y_pred, rownames=['True'], colnames=['Predicted']).apply(lambda r: 100.0 * r/r.sum())
Выходные данные тогда:
Predicted biscuit cake candy chocolate praline shortbread
True
biscuit 23.529412 10 23.076923 13.333333 15.384615 9.090909
cake 17.647059 20 0.000000 26.666667 15.384615 18.181818
candy 11.764706 20 23.076923 13.333333 23.076923 31.818182
chocolate 11.764706 5 15.384615 6.666667 15.384615 13.636364
praline 17.647059 10 30.769231 20.000000 0.000000 13.636364
shortbread 17.647059 35 7.692308 20.000000 30.769231 13.636364
где числа теперь представляют процент (а не количество случаев) результатов, которые были классифицированы.
Хотя обратите внимание, что sklearn.metrics.confusion_matrix
вывод может быть непосредственно визуализирован с помощью:
import matplotlib.pyplot as plt
conf = sklearn.metrics.confusion_matrix(y_true, y_pred)
plt.imshow(conf, cmap='binary', interpolation='None')
plt.show()