Как определить качество мультиклассового классификатора

30

Данный

  • набор данных с экземплярами Икся вместе с N классами, где каждый экземпляр Икся принадлежит ровно одному классу Yя
  • мультиклассовый классификатор

После обучения и тестирования у меня в основном есть таблица с истинным классом yi и прогнозируемым классом ai для каждого экземпляра xi в наборе тестов. Так что для каждого случая у меня есть либо совпадение ( yi=ai ), либо промах ( yiai ).

Как я могу оценить качество матча? Проблема состоит в том, что некоторые классы могут иметь много членов, то есть много экземпляров принадлежат ему. Очевидно, что если 50% всех точек данных принадлежат одному классу, а мой окончательный классификатор в целом верен на 50%, я ничего не получил. С таким же успехом я мог бы создать тривиальный классификатор, который выводит этот самый большой класс, независимо от того, что вводит.

Существует ли стандартный метод оценки качества классификатора на основе известных результатов тестирования совпадений и совпадений для каждого класса? Может быть, даже важно различать показатели соответствия для каждого конкретного класса?

Самый простой подход, который я могу придумать, состоит в том, чтобы исключить правильные совпадения самого большого класса. Что-то еще?

Gerenuk
источник
Я не уверен, правильно ли я понял вопрос. Вы знаете Матрицу Путаницы и производные меры ? Это ответ на ваш вопрос? Или вы ссылаетесь на что-то более сложное?
Штеффен
Я думаю, что это источник моей путаницы: в первом абзаце вы утверждаете, где yi - это реальные классы и ... : Вы имеете в виду, что экземпляр , к которому я могу принадлежать / имеет более одного класса? Или каждый х, к которому я принадлежу / имеет ровно один класс? Можете ли вы уточнить? xixi
Штеффен
@steffen: я видел матрицу путаницы. В моем конкретном случае у меня есть 4 класса. Поэтому я не уверен, какие производные меры могут быть использованы и имеют смысл. Каждый принадлежит только одному классу. Однако в целом существует более двух возможных классов i [ 1 , more , N ] . xii[1,,N]
Геренюк
@steffen Эти производные меры в первую очередь применимы к бинарной классификации, тогда как этот вопрос явно касается более двух классов. Это требует измененного понимания таких терминов, как «истинно положительный».
Майкл МакГоуэн
@MichaelMcGowan Я попросил у OP пояснения, а затем выполнил редактирование, чтобы явно отразить проблему мультикласса, которая не была очевидна до редактирования (IMHO).
Штеффен

Ответы:

16

Как и двоичная классификация, вы можете использовать эмпирическую частоту ошибок для оценки качества вашего классификатора. Пусть будет классификатором, а x i и y i будут соответственно примером в вашей базе данных и ее классе. e r r ( g ) = 1gxiyi как вы сказали, когда классы несбалансированные, базовый уровень не 50%а доля большего класса. Вы можете добавить вес в каждом классе, чтобы сбалансировать ошибку. ПустьWy- вес классаy. Установите веса так, чтобы1

erр(г)знак равно1NΣяN1г(Икся)Yя
WYYи определимвзвешенную эмпирическую ошибкуerrW(g)=11WY~1NΣяN1Yязнак равноY
еррW(г)знак равно1NΣяNWYя1г(Икся)Yя

Как сказал Штеффен, путаница может быть хорошим способом оценки качества классификатора. В двоичном случае вы можете получить некоторую меру из этой матрицы, такую ​​как чувствительность и специфичность, оценивая способность классификатора обнаруживать конкретный класс. Источником ошибки классификатора может быть конкретный способ. Например, классификатор может быть слишком уверенным при прогнозировании 1, но никогда не говорить неверно при прогнозировании 0. Многие классификаторы могут быть параметризованы для управления этой скоростью (ложные срабатывания по сравнению с ложными отрицаниями), и тогда вас интересует качество вся семья классификаторов, а не одна. Отсюда вы можете построить кривую ROC , а измерение площади под кривой ROC даст вам качество этих классификаторов.

Кривые ROC могут быть расширены для вашей задачи мультикласса. Предлагаю вам прочитать ответ этой ветки .

Emile
источник
1
Разве нет необходимости делить взвешенную эмпирическую ошибку на количество классов, чтобы быть в том же масштабе, что и эмпирическая ошибка? В противном случае это было бы намного больше ...
PhilippPro
17

Для оценки систем многостраничной классификации текста я использую микро- и макро-усредненные F1 (F-мера). F-мера - это взвешенная комбинация точности и напомним это. Для бинарной классификации, микро и макро подходы одинаковы, но я думаю, что в случае с несколькими путями они могут вам помочь. Вы можете думать о Micro F1 как о взвешенной комбинации точности и отзыва, которая придает равный вес каждому документу, в то время как Macro F1 дает одинаковый вес каждому классу. Для каждого уравнение F-меры одинаково, но вы вычисляете точность и вызываете по-разному:

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

β

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

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 - Восстановить Монику