반응형

다중클래스의 혼동행렬(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



반응형

해보고 확인한 것을 문서화하여 기록합니다.


부족함이 있지만 도움이 되었으면 합니다.
잘못된 부분이나 개선점을 알려주시면 감사하겠습니다.



포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
문제가 생기면 포스트와 바뀐 환경이 있나 먼저 확인해보세요.

질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">