얼마 전 나갔던 경진대회에서 베이스라인으로 받은 코드를 살펴보던 중 이상한 점을 발견했습니다.
validation 과정에서 f1-score를 계산할 때 배치별로 f1-score를 계산하고 평균을 내어 출력하는 것이었습니다.
반면 제가 생각하는 방식은 전체 데이터 셋에 대해 한 번에 f1-score를 계산하는 방식이었습니다.
두 방식 간에 결괏값 차이가 있을 것이라고 생각했습니다.
배치별로 f1-score를 계산하고 평균을 내는 방식 vs 전체 데이터셋에 대해 한 번에 f1-score를 계산하는 방식
배치별로 f1-score를 계산하고 평균을 내는 방식
- 장점
- 대용량 데이터를 사용할때 메모리 사용량이 줄어듭니다.
- 단점
- 배치 크기에 따라 스코어가 변하여 불안정합니다.
전체 데이터셋에 대해 한 번에 f1-score를 계산하는 방식
- 장점
- 높은 일관성을 가지며 모델의 전체 성능을 나타냅니다.
- 단점
- 모든 데이터를 한번에 처리해야하므로 시간이 오래 걸립니다.
코드로 확인해 봅시다.
import numpy as np
from sklearn.metrics import f1_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
f1score_None = f1_score(y_true, y_pred, average=None) # array([0.8, 0. ,0. ])
f1score_macro = f1_score(y_true, y_pred, average='macro') # 0.26...(=0.8 / 3)
metrics = []
y_ture_batch1 = [0, 1, 2]
y_pred_batch1 = [0, 2, 1]
metrics.append(f1_score(y_ture_batch1, y_pred_batch1, average='macro'))
y_ture_batch2 = [0, 1, 2]
y_pred_batch2 = [0, 0, 1]
metrics.append(f1_score(y_ture_batch2, y_pred_batch2, average='macro'))
avg_metric = np.mean(metrics) # 2.7...
계산 과정이 달라 결과 또한 다른 것을 확인할 수 있습니다.
모델의 전체 성능을 정확하게 파악하고자 하는 경우 전체 데이터 셋에 대한 계산이 더 적절하다고 생각합니다.
따라서 경진대회에서 사용한다면 전체 데이터 셋에 대해 계산하는 것을 추천합니다.
'AI&ML > 학습 정리' 카테고리의 다른 글
[Paper-review]RAGAS: Automated Evaluation of Retrieval Augmented Generation (0) | 2024.07.02 |
---|---|
langchain quickstart 따라하기 (0) | 2024.05.03 |
[Paper-review]Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (0) | 2024.04.10 |
핸즈온 머신러닝 리뷰 (1) | 2024.01.13 |
f1-score에 대해서 알아보자(1) (0) | 2023.12.07 |