파이썬 머신러닝 완벽 가이드

오차행렬
오차행렬은 이진분류의 예측 오류가 얼마인지와 더불어 어떠한 유형의 예측 오류가 발생하고 있는지를 함께 나타내주는 지표
4분면 행렬에서 실제 레이블 클래스 값과 예측 레이블 클래스 갓이 어떠한 유형을 가지고 매핑되는지를 나타낸다.
TN,FP,FN,TP 값을 다양하게 결합해 분류 모델 예측 성능의 오류가 어떠한 모습으로 발생하는지 알 수 있는 것이다.
TN,FP,FN,TP 기호가 의미하는 것

사이킷런은 오차 행렬을 구하기 위해 confusion_matrix() API를 제공한다.
정확도 예제에서 다룬 MyFakeClassifier의 예측 성능 지표를 오차 행렬로 표현
MyFakeClassifier의 예측 결과인 fakepred와 실제 결과인 y_test를 confusion_matrix()의 인자로 입력해 오차행렬을 배열 형태로 출력한다.
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, fakepred)
[output]
array([[405, 0],
[ 45, 0]], dtype=int64)
출력된 오차행렬은 ndarray 형태이다.
MyFakeClassifier는 load_digits()에서 target==7인지 아닌지에 따라 True/False 이진 분류로 변경한 데이터 세트를 사용해 무조건 Negative로 예측하는 Classifier
따라서 TN은 전체 데이터 450건 중 무조건 Negative 0으로 예측해서 True가 된 결과 405건, FP,TP는 Positive 1로 예측한 건수가 없으므로 0건, FN은 Positive 1인 건수 45건을 Negative로 예측해서 False가 된 결과 45건이다.
TN,FP,FN,TP 값을 조합하여 Classifier의 성능을 측정할 수 있는 주요 지표인 정확도, 정밀도, 재현율 값을 알 수 있다.
정확도는 오차 행렬상에서 다음과 같이 재정의 될 수 있다.
정확도 = 예측 결과와 실제 값이 동일한 건수/전체 데이터 수 = (TN+TP)/(TN + FP + FN + TP)
일반적으로 불균형한 레이블 클래스를 가지는 이진 분류 모델에서는 많은 데이터 중에서 중점적으로 찾아야 하는 적은 결괏값에 Positive를 설정해 1값을 부여하고, 그렇지 않은 경우 Negative로 0 값을 부여하는 경우가 많다.