데이터 분석/왕초보를 위한 머신러닝
[머신러닝 기초] 다중분류(multi-class) 성능평가 - recall과 precision
ai-creator
2021. 10. 16. 10:12
반응형
class가 3개 이상인 경우 다중분류라고 하는데, 이때의 confusion matrix와 recall, precision을 구해보자. 원리는 binary 분류와 동일하다.
기본 개념이 없다면, binary분류부터 확인하고 온다.
> https://ai-creator.tistory.com/578?category=875603
1) 다중분류
고양기, 강아지, 물고기 이렇게 3종류를 분류하는 알고리즘이 있다.
그리고, 예측값과 실제값이 아래와 같다고 가정해보자.
다중 클래스는 OvR(One-vs.-Rest) 문제로 자기 클래스는 Positive, 나머지는 모두 Negative로 하여 계산을 하면 된다.
2) Precision, Recall 구하기
지난 시간에 accuracy, precision, recall을 아래와 같이 배웠다.
2-1) 재현율(Recall)
고양이라고 잘 맞췄으면 TP, 아니면 모두 FP로 분리하면 된다.
(녹색은 TP, 빨간색은 FP로 표기하였다.)
그렇다면, 고양이의 재현율은 1/2가 된다.
이와 동일하게 강아지, 물고기도 구해보자
그렇다면, 이 재현율을 어떻게 하면 좋을까? 평균을 내면 된다!
((1/2)+(1/2)+(2/3))/3 = 0.555 가 나온다.
2-2) 정밀도(Precision)
정밀도도 동일한 방식으로 계산을 하면 된다.
최종 정밀도는 이 값을 평균을 내면 된다.
((1/1)+(1/3)+(2/3))/3 =0.666
3) Sklearn에서 구현
precision_score, recall_score를 호출할 시에는 average 파라메터를 "macro"로 세팅을 해주면, "평균"을 의미한다.
from sklearn.metrics import precision_score , recall_score , confusion_matrix
y_true = [0, 0, 1, 1, 2, 2, 2]
y_pred = [0, 1, 1, 2, 2, 2, 1]
print(confusion_matrix(y_true, y_pred))
precision = precision_score(y_true, y_pred,average= "macro")
recall = recall_score(y_true, y_pred,average= "macro")
print('정밀도: {0:.4f}, 재현율: {1:.4f}'.format(precision, recall))
결과
반응형