혼동 행렬은 오 분류 수, 즉 실제 클래스를 기반으로 잘못된 분류 빈으로 끝나는 예측 클래스 수를 표로 만드는 방법입니다.
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
이를 통해 다음을 확인할 수 있습니다.
- 대각선 요소는 각 클래스에 대한 올바른 분류 수를 나타냅니다 (클래스 0, 1 및 2에 대한 3, 1 및 3).
- 비 대각선 요소는 오 분류를 제공합니다. 예를 들어, 클래스 2 중 2 개는 0으로 잘못 분류되고, 클래스 0 중 어느 것도 2로 잘못 분류되지 않았습니다.
- "All"소계에서
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()