데이터 분석/왕초보를 위한 머신러닝

[머신러닝 기초] 다중분류(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))

결과

 

반응형