이번 인턴일지는 딥러닝 모델 실험한 결과를 볼 때 많이 사용되는 지표 중 하나인 ROC curve에 대해 알아보겠습니다!
저도 인턴일 하고, 공부하면서 작성하는 포스팅인만큼 틀린 내용이 있을 수 있습니다. 혹시 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다:)
ROC curve 개념
ROC curve는 Receiver Operating Characteristic Curve의 약자로 모델 학습 결과의 민감도와 특이도를 바탕으로 그리는 곡선입니다. 주로 검사의 유용성을 판별하거나, 분류 기준이 되는 임계값(threshold)의 적절성 판단의 기준으로 많이 사용됩니다.
이제, ROC curve를 그릴 때 사용되는 지표들에 대해 알아보겠습니다.
민감도
민감도는 label이 양성일 때, 모델도 양성이라고 판별한 비율을 말합니다.
특이도
특이도는 label이 음성일 때, 모델이 음성이라고 판별한 비율을 말합니다.
ROC curve 그리기
ROC curve를 그려보겠습니다. x축은 1-특이도, y축은 민감도입니다. 여기서 x가 왜 1-특이도일까요?
1-특이도를 수식으로 나타내면 다음과 같이 쓸 수 있습니다.
1-특이도 라고 보면 의미가 크게 와닿지 않는데, 위 수식을 보면 결국 위음성률, 즉 음성인데 양성이라고 판정한 비율이라고 볼 수 있습니다.
따라서 ROC curve는 x축엔 음성인데 양성이라고 예측한 비율, y축엔 양성인데 양성이라고 맞게 예측한 비율입니다.
ROC curve 코드 작성
ROC curve의 의미에 대해 알아봤으니 이제 코드를 작성해보도록 하겠습니다.
밑 코드에서 label 은 레이블값, 정답값이고 outputs은 모델이 예측한 값들입니다. outputs과 label을 넣을 땐 리스트를 flatten하여 1차원으로 만들어준 후 넣어야 합니다. 그렇지 않다면 multi-class 오류가 발생할 수 있습니다.
from sklearn.metrics import roc_curve,RocCurveDisplay
import matplotlib.pyplot as plt
fpr, tpr, _ = roc_curve(labels, outputs)
roc_auc = auc(fpr,tpr)
display = RocCurveDisplay(fpr=fpr, tpr=tpr, roc_auc=roc_auc,estimator_name='example estimator')
display.plot()
plt.plot([0, 1], [0, 1], color='black', linestyle='dotted', label='Ovarian Cancer classifier')
plt.legend()
plt.grid(False)
plt.show()
plt.savefig(f"{save_path}/plot/{phase}_AUC_curve.png")
plt.close()
'인턴일지' 카테고리의 다른 글
[인턴일지] 여섯번째 인턴일지 : 7개월 중 3개월이 지난 시점의 회고록 (0) | 2023.11.07 |
---|---|
[인턴일지] 다섯번째 인턴일지 : pytorch ResNet50 grayscale 이미지 학습시키기 (0) | 2023.10.27 |
[인턴일지] 네 번째 인턴일지: CNN(Convolution Neural Network) 직접 구성하기 (2) | 2023.10.24 |
[인턴일지] 두 번째 인턴일지: BInary Classification(이진 분류) (0) | 2023.09.26 |
[인턴일지] 첫 번째 인턴일지: 파이토치 pre-trained된 모델 사용하기 (1) | 2023.09.16 |