ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [R] caret 패키지 confusion matrix (2 by 2 case)
    R 2020. 11. 12. 11:10
    예측 관측
      Event Not event
    Event A B
    Not Event C D

    1. precision = A / (A + B)

    2. recall = A / (A + C)

    3. F1 = 2 * precision * recall / (precision + recall)

     

    만약 factor 수준의 알파벳에 의해 event level 이 나중에 나온다면, 즉

     

      FALSE (not event) TRUE (event)
    FALSE (not event) D, cell1 C, cell2
    TRUE (event) B, cell3 A, cell4

     

    이라면 F1은 cell 순서는 위와 같다.

    결론적으로 cell 순서는 row-major order로 (1, 1) 에서 (2, 2)로 번호가 달린다.

     

    따라서 위의 예제에서 

     

    cell1 = 11, cell2 = 0, cell3 = 8, cell4 = 0 이면 F1 = NA

    cell1 = 11, cell2 = 0, cell3 = 0, cell4 = 8 이면 F1 = 1

    cell1 = 9, cell2 = 2, cell3 = 2, cell4 = 6 이면 F1 = 0.75

    cell1 = 9, cell2 = 2, cell3 = 7, cell4 = 0 이면 F1 = NaN

     

    이다.

     

    NA의 경우 caret::confusionMatrix 실행시

    2 by 2 행렬의 하나의 열/행 전체가 0이면 오류가 발생한다.

    이 값을 NA로 저장한다.

    (즉 factor level 수가 예측, 데이터 모두 2개로 같아야 한다.)

     

    NaN의 경우 4개의 cell 중 1개만 0인 경우 F1 값이 0 / 0 일 때 결과값이다.

    (R에서 1/0 이면 Inf로 출력)

     

     

    < 2021년 1월 22일 업데이트 >

     

    F1은 정의상 값이 0이 될 수 없다. 

    따라서 F1이 NA 혹은 NaN 이면 0으로 놓고 그것을 NA, NaN으로 해석 할 수 있다.

    'R' 카테고리의 다른 글

    [R] 함수에 대하여  (0) 2020.12.03
    [R] dplyr 컬럼명 전부를 한번에 바꾸기 (rename_all)  (0) 2020.11.19
    [R] k-fold cv using caret package  (0) 2020.11.03
    [R] SMOTE  (0) 2020.09.28
    [R] ROC curve  (0) 2020.08.20

    댓글

Designed by Tistory.