본문 바로가기

머신러닝,딥러닝

Top 5 accuracy , Top 1 accuracy 이해 (feat. only 파이썬 코드)

TOP-1 Accuracy: softmax 의 최종 output에서 최대값을 추출합니다. 일반적으로 accuracy 라고 생각하면 떠올리면 됩니다. 제일 높은 확률값을(= 자동으로 예측된 정답 후보군 들 중 제일 높다고 생각되는 것) 을 의미합니다. 

 

Top-N Accuracy: 예측 클래스가 소프트맥스 분포의 상위 N 값에 포함되는 빈도를 측정하는 경우를 의미합니다. 

 

예를 들어보겠습니다. 

 

'실제 이미지': 사과

 

를 어떤 모델에 넣어서 분류를 했다고 하겠습니다.

 

'모델의 예측 확률':  배:0.3 , 딸기: 0.25, 사과: 0.2, 오렌지:0.1, 레몬: 0.05 , 포도: 0.04, 체리: 0.03, 감: 0.04 

 

로 나왔다고 하겠습니다. 

 

이 때, top-1-accuracy 를 사용하면 모델의 예측은 '틀렸'습니다. 왜냐면, top-1 정확도를 따르면 '배'라고 예측하기 때문에 실제 라벨은 '사과'이기에 '오답' 입니다.

 

하지만 top-5-accuracy 를 사용하면 '배,딸기,사과,오렌지,레몬' 5개 안에 속하면 정답으로 처리됩니다. 그러므로, 이 때 모델의 예측 확률의 top-5-accuracy 입장에서는 '정답'입니다. 왜냐면 실제 라벨의 값이 상위 5개 예측값 안에 들어가기 때문입니다. 

 

이제 파이썬 코드로 이해해보겠습니다.

 

1. 예측된 값들의 스코어를 하나의 컨테이너에 담고, 정답이라고 생각하는 인덱스를 하나 던졌습니다.

# make random prediction
prediction = [350, 50, 100, 25, 60, 40, 300 ,200 , 5, 1, 3]
label = 9

 

 

2. 여기서 prediction 에 속하는 값들을 확률로 바꿉니다. (softmax 꼴로 만듬)

# transform the predictions into probabilities
predictions_sum = 0
for pred in prediction:
    predictions_sum += pred
for idx, pred in enumerate(prediction):
    prediction[idx] = pred / predictions_sum

-결과-

 

 

 

 

3.  상위 5개의 확률을 구한 다음 정렬합니다.

# initilize sorting variables with indices
sorted_predictions = list()
sorted_predictions_indices = list()

# calculate top-5-accuracy
for _ in range(5):
    M, M_idx = None, 0
    
    for pred_idx, pred in enumerate(prediction):
        if pred_idx in sorted_predictions_indices:
            pass
        elif M == None or pred > M:
            M = pred
            M_idx = pred_idx
    
    sorted_predictions.append(M)
    sorted_predictions_indices.append(M_idx)

 

 

 

이제, 전체 코드의 출력 결과를 확인해보겠습니다.

 

 

 

 

 

 

상위 5개의 확률값이 있는 인덱스를 정답으로 제출했을 때, 정답으로 처리됨을 볼 수 있습니다.

 

그렇다면, top-5 accuracy , error 등은 언제 사용할까요? 

클래스의 갯수 많을 때 사용합니다. 5000개의 클래스로 훈련된 분류기를 테스트할 때, top-1-accuracy 로 성능을 측정하기에는 굉장히 까다로울 수 있습니다. 이를 top-5-accuracy 로 한다면 조금은 정답의 범위가 넓어지므로 성능 지표에서 조금 더 높게 나옵니다. 

 

어찌 생각하면 top-1-accuracy 만 사용해야 하는 게 아닌가라는 생각이 들수도 있지만...

논문들을 보다보면 top-5 -accuracy, top-1-accuracy 등 상위 n개의 클래스를 정답 군으로 해서 성능을 테스트하는 것을 보게 됩니다. 우선, 여러 논문에서 성능 지표로 top-N-accuracy 로 사용하고 있으니 이에 대한 개념은 이 정도로 알고가면 좋을 것 같습니다.

 

 

 

 

- 참고 - 

https://medium.com/nanonets/evaluating-models-using-the-top-n-accuracy-metrics-c0355b36f91b

 

Evaluating models using the Top N accuracy metrics

Often, while building machine learning models, we focus on the accuracy metrics, trying to get the right class of an image or the right…

medium.com

https://enjoyso.tistory.com/122

 

top-1 accuracy, top-5 accuracy가 뭘까?

모델을 학습할 때 성과의 지표가 되는 것이 정확도(Accuracy)입니다. 정확도는 테스트 셋에서 prediction lable이 실제 데이터의 lable과 얼마나 같은지의 비율을 나타냅니다. 특히, image classification의 모

enjoyso.tistory.com

https://bskyvision.com/422

 

이미지 분류 모델 평가에 사용되는 top-5 error와 top-1 error

딥러닝 관련 논문을 보다보면 실험 평가 부분에서 top-5 error와 top-1 error라는 용어들을 심심찮게 발견하게 된다. top-5 error와 top-1 error는 이미지 분류(image classification) 성능을 평가하기 위한 것들..

bskyvision.com

https://froggydisk.github.io/blog/second-post/

 

Top1 Accuracy와 Top5 Accuracy 이해하기

논문에 자주 등장하는 Top1, Top5의 의미는?

froggydisk.github.io

https://www.kaggle.com/questions-and-answers/164379

 

What is top-1 and top-5 accuracy? | Data Science and Machine Learning

What is top-1 and top-5 accuracy?.

www.kaggle.com