Karışıklık matrisi, yanlış sınıflandırmaların sayısını, yani gerçek sınıflara dayanarak yanlış bir sınıflandırma kutusunda sonuçlanan öngörülen sınıfların sayısını belirlemenin bir yoludur.
Sklearn.metrics.confusion_matrix sayısal bir matris sağlarken, aşağıdakileri kullanarak bir 'rapor' oluşturmayı daha yararlı buluyorum:
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)
hangi sonuçlanır:
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
Bu şunu görmemizi sağlar:
- Köşegen unsurlar her bir sınıf için doğru sınıflandırma sayısını gösterir: 0, 1 ve 2 sınıfları için 3, 1 ve 3.
- Köşegen olmayan elemanlar yanlış sınıflandırmaları sağlar: örneğin, 2. sınıfın 2'si 0 olarak yanlış sınıflandırılmış, 0 sınıfının hiçbiri 2 olarak yanlış sınıflandırılmamış.
- Her iki sınıftaki
y_true
ve y_pred
"Tüm" alt Toplamlarından gelen sınıflandırmaların toplam sayısı
Bu yöntem aynı zamanda metin etiketleri için de geçerlidir ve veri setindeki çok sayıda örnek için yüzde raporlar sağlanmak üzere genişletilebilir.
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())
Sonra çıktı:
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
şimdi rakamlar, sınıflandırılan sonuçların yüzdesini (vaka sayısından ziyade) temsil eder.
Bununla birlikte, sklearn.metrics.confusion_matrix
çıktının aşağıdakiler kullanılarak doğrudan görselleştirilebileceğini unutmayın :
import matplotlib.pyplot as plt
conf = sklearn.metrics.confusion_matrix(y_true, y_pred)
plt.imshow(conf, cmap='binary', interpolation='None')
plt.show()