Матриця плутанини - це спосіб підрахунку кількості неправильних класифікацій, тобто кількості передбачуваних класів, які опинилися в неправильній класифікації класифікованих на основі істинних класів.
Хоча 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()