다중클래스의 혼동행렬(confusion matrix)을 구하여 클래스별 민감도(sensitivity)와 특이도(specificity)를 구하는 예제코드입니다.
2022. 03. 12 최초작성
from sklearn.metrics import multilabel_confusion_matrix y_true = [0, 1, 2, 0, 1] y_pred = [0, 1, 2, 2, 0] ret = multilabel_confusion_matrix(y_true, y_pred, labels=[0, 1, 2]) tn0, fp0, fn0, tp0 = ret[0].ravel() tn1, fp1, fn1, tp1 = ret[1].ravel() tn2, fp2, fn2, tp2 = ret[2].ravel() sensitivity0 = tp0/(tp0 + fn0) # 민감도 label 0 specificity0 = tn0/(tn0 + fp0) # 특이도 label 0 sensitivity1 = tp1/(tp1 + fn1) # 민감도 label 1 specificity1 = tn1/(tn1 + fp1) # 특이도 label 1 sensitivity2 = tp2/(tp2 + fn2) # 민감도 label 2 specificity2 = tn2/(tn2 + fp2) # 특이도 label 2 print('label 0 : tn, fp, fn, tp ', tn0, fp0, fn0, tp0 ) print('label 1 : tn, fp, fn, tp ', tn1, fp1, fn1, tp1 ) print('label 2 : tn, fp, fn, tp ', tn2, fp2, fn2, tp2 ) print('label 0 : sensitivity {:.4f} specificity {:.4f}'.format(sensitivity0, specificity0)) print('label 1 : sensitivity {:.4f} specificity {:.4f}'.format(sensitivity1, specificity1)) print('label 2 : sensitivity {:.4f} specificity {:.4f}'.format(sensitivity2, specificity2)) |
실행 결과입니다.
label 0 : tn, fp, fn, tp 2 1 1 1
label 1 : tn, fp, fn, tp 3 0 1 1
label 2 : tn, fp, fn, tp 3 1 0 1
label 0 : sensitivity 0.5000 specificity 0.6667
label 1 : sensitivity 0.5000 specificity 1.0000
label 2 : sensitivity 1.0000 specificity 0.7500
라벨 0의 경우만 설명하면 이때 positive가 0이고 negative가 0이 아닌 숫자입니다
따라서
true negative는 두가지 (negative -> negative)
y_true = [0, 1, 2, 0, 1]
y_pred = [0, 1, 2, 2, 0]
false positive는 한가지 ( negative -> positive )
y_true = [0, 1, 2, 0, 1]
y_pred = [0, 1, 2, 2, 0]
false negative는 한가지 ( positive -> negative )
y_true = [0, 1, 2, 0, 1]
y_pred = [0, 1, 2, 2, 0]
true positive는 한가지 ( positive -> positive )
y_true = [0, 1, 2, 0, 1]
y_pred = [0, 1, 2, 2, 0]
참고
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.multilabel_confusion_matrix.html
'Deep Learning & Machine Learning > 강좌&예제 코드' 카테고리의 다른 글
faiss 사용법 및 예제 코드 (0) | 2023.10.07 |
---|---|
multiclass classification 클래스별로 ROC curve 그리기 (4) | 2022.03.14 |
SPARK를 사용하여 대용량 데이터셋의 평균과 표준편차 구하기 (0) | 2021.12.12 |
tensorflow dataset에서 batch 단위로 window 적용하기 (0) | 2021.12.11 |
Tensorflow Dataset 일부만 사용하기 (0) | 2021.12.08 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!