멀티 클래스 분류기의 품질을 결정하는 방법


30

주어진

  • 모든 인스턴스 정확히 하나의 클래스 속하는 클래스 와 함께 인스턴스 를 가진 데이터 세트xiNxiyi
  • 멀티 클래스 분류기

훈련 및 테스트 후 기본적으로 테스트 세트의 모든 인스턴스 에 대해 실제 클래스 및 예상 클래스 가있는 테이블이 있습니다. 따라서 모든 인스턴스에 대해 일치하는 ( ) 또는 누락 된 ( ) 있습니다.yiaixiyi=aiyiai

경기의 질을 어떻게 평가할 수 있습니까? 문제는 일부 클래스에는 많은 멤버가있을 수 있다는 것입니다. 즉, 많은 인스턴스가 여기에 속합니다. 분명히 모든 데이터 포인트의 50 %가 하나의 클래스에 속하고 최종 분류자가 전체적으로 50 % 정확하다면 아무것도 얻지 못했습니다. 입력이 무엇이든 상관없이 가장 큰 클래스를 출력하는 간단한 분류기를 만들 수도 있습니다.

알려진 테스트 세트 각 클래스의 일치 및 적중 결과를 기반으로 분류기의 품질을 추정하는 표준 방법이 있습니까? 특정 클래스마다 일치하는 비율을 구별하는 것이 중요 할 수도 있습니다.

내가 생각할 수있는 가장 간단한 방법은 가장 큰 클래스의 올바른 일치 항목을 제외시키는 것입니다. 또 뭐요?


질문을 올바르게 이해했는지 잘 모르겠습니다. 혼동 매트릭스와 파생 측정 값 을 알고 있습니까? 이것이 귀하의 질문에 대한 답변입니까? 아니면 더 복잡한 것을 언급합니까?
steffen

나는이 내 혼란의 근원이라고 생각 : 첫 번째 단락에서 당신은 상태 ..where 이순신이 진짜 클래스와는 ... : 당신이 인스턴스가 있음을 뜻 /가 하나 개 이상의 클래스에 속할 수 있습니다? 또는 모든 가 정확히 하나의 클래스에 ? 당신은 명확히 할 수 있습니까? xixi
steffen

@ steffen : 혼란 매트릭스를 보았습니다. 내 특별한 경우에는 4 개의 수업이 있습니다. 따라서 어떤 파생 측정법을 사용할 수 있는지 확실하지 않습니다. 각 는 하나의 클래스에만 속합니다. 그러나 전체적으로 가능한 클래스가 두 개 이상 있습니다 . xii[1,,N]
Gerenuk

@steffen이 파생 측정 값은 주로 이진 분류에 적용 할 수 있지만이 질문은 명시 적으로 두 개 이상의 클래스를 처리합니다. 그런 다음 "참 긍정적"과 같은 용어에 대한 이해가 필요합니다.
마이클 맥고완

@MichaelMcGowan 나는 OP에게 설명을 요청한 후 멀티 클래스 문제를 명시 적으로 반영하기 위해 편집을 수행했습니다.
steffen

답변:


16

이진 분류와 마찬가지로 경험적 오류율을 사용 하여 분류기의 품질을 추정 할 수 있습니다 . 하자 분류 자, 그리고 및 각각 데이터베이스와 동급 예를 들어합니다. 말했듯이 클래스의 균형이 맞지 않으면 기준선이 50 %이지만 더 큰 클래스의 비율. 각 클래스에 가중치를 추가하여 오류의 균형을 맞출 수 있습니다. 클래스 의 가중치라고 하자 . 되도록 가중치 설정 상기 정의 가중 실험적 오류gxiyi

err(g)=1nin1g(xi)yi
Wyy1Wy1nin1yi=y
errW(g)=1ninWyi1g(xi)yi

Steffen이 말했듯이 혼동 행렬 은 분류기의 품질을 평가하는 좋은 방법이 될 수 있습니다. 이진 경우 민감도 및 특이성과 같은이 행렬에서 측정 값을 도출하여 특정 클래스를 감지하는 분류기의 기능을 추정 할 수 있습니다. 분류기의 오류 원인은 특정 방식 일 수 있습니다. 예를 들어 분류기는 1을 예측할 때 너무 확신 할 수 있지만 0을 예측할 때 잘못 말하지 마십시오. 많은 분류자를 매개 변수화하여이 비율을 제어 (거짓 긍정 대 거짓 긍정) 할 수 있습니다. 분류 기가 아닌 전체 분류군 이를 통해 ROC 곡선을 그릴 수 있으며 ROC 곡선 아래 면적을 측정하면 해당 분류기의 품질을 얻을 수 있습니다.

멀티 클래스 문제에 대해 ROC 곡선을 확장 할 수 있습니다. 이 의 답을 읽는 것이 좋습니다 .


1
가중 된 경험적 오류를 경험적 오류와 같은 규모로 만들기 위해 클래스 수로 나눌 필요는 없습니까? 그렇지 않으면 훨씬 더 클 것입니다.
PhilippPro

17

다 방향 텍스트 분류 시스템을 평가하기 위해 마이크로 평균 및 매크로 평균 F1 (F- 측정)을 사용합니다. F- 측정은 기본적으로 가중 정밀도의 조합이며이를 기억하십시오. 이진 분류의 경우 마이크로 및 매크로 접근 방식은 동일하지만 다중 사례의 경우 도움이 될 수 있다고 생각합니다. Micro F1은 모든 문서에 동일한 가중치를 부여하는 가중 정밀도와 리콜의 조합으로 생각할 수 있으며 Macro F1은 모든 클래스에 동일한 가중치를 부여합니다. 각각에 대해 F- 측정 방정식은 동일하지만 정밀도를 계산하고 다르게 호출합니다.

F=(β2+1)PRβ2P+R,

여기서 는 일반적으로 1로 설정됩니다.β

Pmicro=i=1|C|TPii=1|C|TPi+FPi,Rmicro=i=1|C|TPii=1|C|TPi+FNi

Pmacro=1|C|i=1|C|TPiTPi+FPi,Rmacro=1|C|i=1|C|TPiTPi+FNi

여기서 는 True Positive, 는 False Positive, 은 False Negative, 는 class입니다.TPFPFNC


1
# Function in R, using precision, recall and F statistics

check.model.accuracy <- function(predicted.class, actual.class){

  result.tbl <- as.data.frame(table(predicted.class,actual.class ) ) 

  result.tbl$Var1 <- as.character(result.tbl$predicted.class)
  result.tbl$Var2 <- as.character(result.tbl$actual.class)

  colnames(result.tbl)[1:2] <- c("Pred","Act")

  cntr <- 0  
  for (pred.class in unique(result.tbl$Pred) ){
    cntr <- cntr+ 1
    tp <- sum(result.tbl[result.tbl$Pred==pred.class & result.tbl$Act==pred.class, "Freq"])
    tp.fp <- sum(result.tbl[result.tbl$Pred == pred.class , "Freq" ])
    tp.fn <- sum(result.tbl[result.tbl$Act == pred.class , "Freq" ])
    presi <- tp/tp.fp 
    rec <- tp/tp.fn
    F.score <- 2*presi*rec/(presi+rec)
    if (cntr == 1 ) F.score.row <- cbind(pred.class, presi,rec,F.score)
    if (cntr > 1 ) F.score.row <- rbind(F.score.row,cbind(pred.class,presi,rec,F.score))
  }

  F.score.row <- as.data.frame(F.score.row) 
  return(F.score.row)
}

check.model.accuracy(predicted.df,actual.df) 
# For multiclass, average across all classes 

5
이것을 설명하기 위해 텍스트를 추가 할 수 있습니까?
gung-모니 티 복원
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.