Come determinare la qualità di un classificatore multiclasse


30

Dato

  • un set di dati con istanze insieme a classi cui ogni istanza appartiene esattamente a una classe N x i y ixiNxiyi
  • un classificatore multiclasse

Dopo l'addestramento e i test ho sostanzialmente una tabella con la vera classe e la classe prevista per ogni istanza nel set di test. Quindi per ogni istanza ho una corrispondenza ( ) o una mancanza ( ).a i x i y i = a i y ia iyiaixiyi=aiyiai

Come posso valutare la qualità della partita? Il problema è che alcune classi possono avere molti membri, cioè molte istanze appartengono ad esso. Ovviamente se il 50% di tutti i punti dati appartiene a una classe e il mio classificatore finale è complessivamente corretto al 50%, non ho guadagnato nulla. Avrei potuto anche creare un classificatore banale che produce quella classe più grande, qualunque sia l'input.

Esiste un metodo standard per stimare la qualità di un classificatore in base ai risultati del set di test noti di partite e risultati per ciascuna classe? Forse è persino importante distinguere i tassi di corrispondenza per ciascuna classe particolare?

L'approccio più semplice che mi viene in mente è quello di escludere le partite corrette della classe più grande. Cos'altro?


Non sono sicuro di aver compreso correttamente la domanda. Conosci la matrice di confusione e le misure derivate ? È questa la risposta alla tua domanda? O ti riferisci a qualcosa di più complicato?
Steffen,

Penso che questa sia la fonte della mia confusione: nel primo paragrafo affermi .. dove yi sono le classi reali e ... : Vuoi dire che un'istanza può appartenere / ha più di una classe? O ogni appartiene / ha esattamente una classe? Potete per favore chiarire? x ixixi
Steffen,

@steffen: ho visto la matrice di confusione. Nel mio caso particolare ho 4 classi. Quindi non sono sicuro di quali misure derivate possano essere utilizzate e avrebbero senso. Ogni appartiene a una sola classe. Tuttavia ci sono più di due possibili classi in generale . i [ 1 , , N ]xii[1,,N]
Gerenuk,

@steffen Tali misure derivate si applicano principalmente alla classificazione binaria , mentre questa domanda tratta esplicitamente di più di due classi. Ciò richiede quindi una comprensione modificata di termini come "vero positivo".
Michael McGowan,

@MichaelMcGowan Ho chiesto chiarimenti all'OP e successivamente ho eseguito una modifica per riflettere esplicitamente il problema della multiclasse, che non era ovvio prima della modifica (IMHO).
Steffen,

Risposte:


16

Come la classificazione binaria, puoi utilizzare il tasso di errore empirico per stimare la qualità del tuo classificatore. Let sia un classificatore e x i e y i essere rispettivamente un esempio nella base di dati e la sua classe. e r r ( g ) = 1gxiyi Come hai detto, quando le classi sono sbilanciate, la linea di base non è del 50% ma la proporzione della classe più grande. È possibile aggiungere un peso su ogni classe per bilanciare l'errore. LasciateWysia il peso della classey. Impostare i pesi in modo tale chee definire l'errore empirico ponderato

err(g)=1nin1g(xi)yi
WyyerrW(g)=11Wy1nin1yi=y
errW(g)=1ninWyi1g(xi)yi

Come ha detto Steffen, la matrice di confusione potrebbe essere un buon modo per stimare la qualità di un classificatore. Nel caso binario, è possibile derivare alcune misure da questa matrice come sensibilità e specificità, stimando la capacità di un classificatore di rilevare una particolare classe. La fonte di errore di un classificatore potrebbe essere in un modo particolare. Ad esempio, un classificatore potrebbe essere troppo fiducioso quando prevede un 1, ma non dire mai sbagliato quando si predice uno 0. Molti classificatori possono essere parametrizzati per controllare questo tasso (falsi positivi contro falsi negativi), e quindi si è interessati alla qualità del intera famiglia di classificatori, non solo una. Da questo puoi tracciare la curva ROC e misurare l' area sotto la curva ROC ti dà la qualità di quei classificatori.

Le curve ROC possono essere estese per il problema della multiclasse. Ti consiglio di leggere la risposta di questa discussione .


1
Non è necessario dividere l'errore empirico ponderato per il numero di classi, per essere sulla stessa scala dell'errore empirico? Altrimenti sarebbe molto più grande ...
PhilippPro

17

Per valutare i sistemi di classificazione del testo a più vie, utilizzo la F1 a media e macro media (misura F). La misura F è essenzialmente una combinazione ponderata di precisione e lo ricorda. Per la classificazione binaria, gli approcci micro e macro sono gli stessi, ma, nel caso a più vie, penso che potrebbero aiutarti. Puoi pensare a Micro F1 come una combinazione ponderata di precisione e richiamo che dà lo stesso peso ad ogni documento, mentre Macro F1 dà lo stesso peso ad ogni classe. Per ciascuno, l'equazione della misura F è la stessa, ma si calcola la precisione e si richiama in modo diverso:

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
Puoi aggiungere del testo per spiegarlo?
gung - Ripristina Monica
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.