Jak określić jakość klasyfikatora wieloklasowego

30

Dany

  • zestaw danych z instancjami xi razem z N klasami, w których każda instancja xi należy dokładnie do jednej klasyyi
  • klasyfikator wieloklasowy

Po treningu i testowaniu w zasadzie mam tabelę z prawdziwą klasą i przewidywaną klasą dla każdej instancji w zestawie testowym. Tak więc za każdym razem mam dopasowanie ( ) lub miss ( y_i \ neq a_i ).yiaixiyi=aiyiai

Jak mogę ocenić jakość dopasowania? Problem polega na tym, że niektóre klasy mogą mieć wielu członków, tzn. Należy do nich wiele instancji. Oczywiście, jeśli 50% wszystkich punktów danych należy do jednej klasy, a mój ostateczny klasyfikator jest ogólnie w 50% poprawny, nic nie zyskałem. Równie dobrze mógłbym stworzyć trywialny klasyfikator, który generuje największą klasę bez względu na wejście.

Czy istnieje standardowa metoda oceny jakości klasyfikatora na podstawie znanego zestawu wyników testów dopasowań i trafień dla każdej klasy? Może nawet ważne jest rozróżnienie wskaźników dopasowania dla poszczególnych klas?

Najprostsze podejście, jakie mogę wymyślić, to wykluczenie prawidłowych dopasowań największej klasy. Co jeszcze?

Gerenuk
źródło
Nie jestem pewien, czy dobrze rozumiem pytanie. Czy znasz matrycę pomyłek i miary pochodne ? Czy to odpowiedź na twoje pytanie? A może odwołujesz się do czegoś bardziej skomplikowanego?
steffen
Myślę, że to jest przyczyną mojego zamieszania: w pierwszym akapicie podajesz ... gdzie są prawdziwe klasy i ... : Czy masz na myśli, że instancja może należeć do / ma więcej niż jedną klasę? Czy każde x i należy do / ma dokładnie jedną klasę? Czy możesz wyjaśnić ? xixi
steffen
@steffen: Widziałem macierz zamieszania. W moim szczególnym przypadku mam 4 klasy. Nie jestem więc pewien, które pochodne miary można zastosować i czy mają sens. Każde należy tylko do jednej klasy. Istnieją jednak więcej niż dwie możliwe klasy ogółem i [ 1 , , N ] . xii[1,,N]
Gerenuk
@steffen Te pochodne miary mają zastosowanie przede wszystkim do klasyfikacji binarnej , podczas gdy to pytanie wyraźnie dotyczy więcej niż dwóch klas. Wymaga to zatem zmodyfikowanego rozumienia terminów takich jak „prawdziwie pozytywne”.
Michael McGowan
@MichaelMcGowan Poprosiłem OP o wyjaśnienia, a następnie wykonałem edycję, aby wyraźnie odzwierciedlić problem wieloklasowości, co nie było oczywiste przed edycją (IMHO).
steffen

Odpowiedzi:

16

Podobnie jak w przypadku klasyfikacji binarnej, można użyć empirycznego poziomu błędu do oszacowania jakości klasyfikatora. Niech być klasyfikatorów oraz x I i y i być odpowiednio przykład w bazie danych i klasy. e r r ( g ) = 1gxiyi Jak powiedzieliście, gdy klasy są niezrównoważone, linia bazowa nie wynosi 50%, ale odsetek większej klasy. Możesz dodać wagę do każdej klasy, aby zrównoważyć błąd. NiechWYjest ciężar klasyy. Ustaw ciężary tak, aby1

err(g)=1nin1g(xi)yi
Wyyi zdefiniujważony błąd empirycznyerrW(g)=11Wy1nin1yi=y
errW(g)=1ninWyi1g(xi)yi

Jak powiedział Steffen, macierz nieporozumień może być dobrym sposobem na oszacowanie jakości klasyfikatora. W przypadku binarnym można uzyskać pewną miarę z tej macierzy, na przykład czułość i swoistość, szacując zdolność klasyfikatora do wykrywania konkretnej klasy. Źródłem błędu klasyfikatora może być szczególny sposób. Na przykład klasyfikator może być zbyt pewny siebie podczas przewidywania 1, ale nigdy nie powiedzieć źle, przewidując zero. Wiele klasyfikatorów można sparametryzować w celu kontroli tego współczynnika (fałszywie dodatnie vs fałszywie ujemne), a następnie jesteś zainteresowany jakością cała rodzina klasyfikatorów, nie tylko jedna. Na tej podstawie możesz wykreślić krzywą ROC , a pomiar obszaru pod krzywą ROC daje jakość tych klasyfikatorów.

Krzywe ROC można rozszerzyć dla problemu wieloklasowego. Sugeruję przeczytanie odpowiedzi w tym wątku .

Emile
źródło
1
Czy nie jest konieczne dzielenie ważonego błędu empirycznego przez liczbę klas, aby być w tej samej skali co błąd empiryczny? W przeciwnym razie byłby znacznie większy ...
PhilippPro
17

Do oceny wielostronnych systemów klasyfikacji tekstu używam mikro- i makro-uśrednionego F1 (miara F). Miara F jest zasadniczo ważoną kombinacją precyzji i przypomnijmy to sobie. W przypadku klasyfikacji binarnej podejścia mikro i makro są takie same, ale w przypadku wielu sposobów myślę, że mogą ci pomóc. Możesz myśleć o Micro F1 jako ważonej kombinacji precyzji i przywołania, która daje taką samą wagę każdemu dokumentowi, podczas gdy Macro F1 daje taką samą wagę każdej klasie. Dla każdego równanie miary F jest takie samo, ale obliczasz precyzję i przywołujesz inaczej:

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

Kyle.
źródło
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 
Ashish Markanday
źródło
5
Czy możesz dodać tekst, aby to wyjaśnić?
Gung - Przywróć Monikę