Як визначити якість багатокласового класифікатора


30

Дано

  • набір даних з екземплярами разом з класами, де кожен екземпляр належить саме одному класу N x i y ixiNxiyi
  • багатокласовий класифікатор

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

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

Чи існує стандартний метод оцінювання якості класифікатора на основі відомих результатів тестового набору збігів та звернень для кожного класу? Можливо, навіть важливо розрізняти коефіцієнти відповідності для кожного конкретного класу?

Найпростіший підхід, який я можу придумати, - це виключити правильні відповідники найбільшого класу. Що ще?


Я не впевнений, чи правильно я розумію питання. Чи знаєте ви матрицю плутанини та похідні заходи ? Це відповідь на ваше запитання? Або ви посилаєтесь на щось складніше?
steffen

Я думаю, що це джерело моєї плутанини: У першому абзаці ви заявляєте .. де yi справжні класи та ... : Ви маєте на увазі, що екземпляр може належати / має більше одного класу? Або кожен x я належить / має рівно один клас? Ви можете, будь ласка, уточнити? xixi
steffen

@steffen: Я бачив матрицю плутанини. У моєму конкретному випадку я маю 4 класи. Тож я не впевнений, які похідні заходи можуть бути використані і мали б сенс. Кожен належить лише одному класу. Однак існує більше двох можливих класів i [ 1 , than , N ] . xii[1,,N]
Геренюк

@steffen Ці похідні заходи в першу чергу застосовні до двійкової класифікації, тоді як це питання явно стосується більш ніж двох класів. Потім необхідне модифіковане розуміння таких термінів, як "справжній позитив".
Майкл МакГоуан

@MichaelMcGowan Я попросив ОП роз'яснити, а потім здійснив редагування, щоб чітко відобразити проблему багатокласовості, що не було очевидним перед редагуванням (IMHO).
steffen

Відповіді:


16

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

err(g)=1nin1g(xi)yi
Wyyі визначимозважену емпіричну помилкуerrW(g)=11Wy1nin1yi=y
еrrW(г)=1нiнWуi1г(хi)уi

Як сказав Стеффен, матриця плутанини може бути хорошим способом оцінити якість класифікатора. У двійковому випадку ви можете отримати певну міру з цієї матриці, наприклад, чутливість та специфічність, оцінюючи здатність класифікатора виявити конкретний клас. Джерело помилки класифікатора може бути певним чином. Наприклад, класифікатор може бути занадто впевненим при прогнозуванні 1, але ніколи не кажіть неправильно, коли прогнозуєте 0. Багато класифікаторів можуть бути параметризовані для управління цією швидкістю (помилкові позитиви проти хибних негативів), і тоді вас зацікавить якість якості вся сім'я класифікатора, не лише одна. З цього ви зможете побудувати криву ROC , а вимірювання площі під кривою ROC дає вам якість цих класифікаторів.

Криві ROC можна розширити для вашої багатокласової проблеми. Я пропоную вам прочитати відповідь цієї теми .


1
Чи не потрібно ділити зважену емпіричну помилку на кількість класів, щоб бути на тій же шкалі, що і емпірична помилка? Інакше було б набагато більше ...
PhilippPro

17

To evaluate multi-way text classification systems, I use micro- and macro-averaged F1 (F-measure). The F-measure is essentially a weighted combination of precision and recall that. For binary classification, the micro and macro approaches are the same, but, for the multi-way case, I think they might help you out. You can think of Micro F1 as a weighted combination of precision and recall that gives equal weight to every document, while Macro F1 gives equal weight to every class. For each, the F-measure equation is the same, but you calculate precision and recall differently:

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

where β is typically set to 1. Then,

Пмicrо=i=1|С|ТПii=1|С|ТПi+ЖПi,Rмicrо=i=1|С|ТПii=1|С|ТПi+ЖNi

Пмаcrо=1|С|i=1|С|ТПiТПi+ЖПi,Rмаcrо=1|С|i=1|С|ТПiТПi+ЖNi

де ТП справжній Позитивний, ЖП є хибнопозитивним, ЖN є помилковим негативом, і С є клас.


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 - Відновіть Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.