43 votos

Cómo determinar la calidad de un clasificador multiclase

Dado

  • un conjunto de datos con instancias $x_i$ junto con $N$ clases en las que cada instancia $x_i$ pertenece exactamente a una clase $y_i$
  • un clasificador multiclase

Después de la formación y las pruebas, básicamente tengo una tabla con el verdadero clase $y_i$ y el previsto clase $a_i$ para cada instancia $x_i$ en el conjunto de pruebas. Así que para cada instancia tengo una coincidencia ( $y_i= a_i$ ) o un fallo ( $y_i\neq a_i$ ).

¿Cómo puedo evaluar la calidad del partido? La cuestión es que algunas clases pueden tener muchos miembros, es decir, que muchas instancias pertenecen a ella. Obviamente, si el 50% de todos los puntos de datos pertenecen a una clase y mi clasificador final acierta en un 50%, no he ganado nada. Podría haber hecho un clasificador trivial que diera como resultado la clase más grande sin importar la entrada.

¿Existe un método estándar para estimar la calidad de un clasificador basado en los resultados conocidos del conjunto de pruebas de coincidencias y aciertos para cada clase? ¿Quizás sea incluso importante distinguir las tasas de coincidencia para cada clase en particular?

El enfoque más sencillo que se me ocurre es excluir los partidos correctos de la clase más grande. ¿Qué más?

23voto

John Puntos 151

Al igual que la clasificación binaria, se puede utilizar el error empírico para estimar la calidad de su clasificador. Dejemos que $g$ sea un clasificador, y $x_i$ y $y_i$ sea respectivamente un ejemplo en su base de datos y su clase. $$err(g) = \frac{1}{n} \sum_{i \leq n} \mathbb{1}_{g(x_i) \neq y_i}$$ Como has dicho, cuando las clases están desequilibradas, la línea de base no es el 50%, sino la proporción de la clase más grande. Podrías añadir un peso a cada clase para equilibrar el error. Dejemos que $W_y$ sea el peso de la clase $y$ . Establece los pesos de forma que $\frac{1}{W_y} \sim \frac{1}{n}\sum_{i \leq n} \mathbb{1}_{y_i = y}$ y definir el error empírico ponderado $$err_W(g) = \frac{1}{n} \sum_{i \leq n} W_{y_i} \mathbb{1}_{g(x_i) \neq y_i}$$

Como dijo Steffen, el matriz de confusión podría ser una buena forma de estimar la calidad de un clasificador. En el caso binario, se puede derivar alguna medida de esta matriz, como la sensibilidad y la especificidad, estimando la capacidad de un clasificador para detectar una clase concreta. La fuente de error de un clasificador podría estar en una forma particular. Por ejemplo, un clasificador podría tener demasiada confianza cuando predice un 1, pero nunca decir que se equivoca cuando predice un 0. Muchos clasificadores pueden parametrizarse para controlar esta tasa (falsos positivos frente a falsos negativos), y entonces te interesa la calidad de toda la familia de clasificadores, no sólo de uno. A partir de esto se puede trazar el ROC curva, y midiendo la área bajo la curva ROC te da la calidad de esos clasificadores.

Las curvas ROC pueden ampliarse para su problema multiclase. Le sugiero que lea la respuesta de este rosca .

21voto

LachlanG Puntos 133

Para evaluar los sistemas de clasificación de textos multidireccionales, utilizo la F1 micro y macromedida (medida F). La medida F es esencialmente una combinación ponderada de precisión y recuperación que. Para la clasificación binaria, los enfoques micro y macro son los mismos, pero, para el caso multidireccional, creo que pueden ayudarte. Puede pensar en Micro F1 como una combinación ponderada de precisión y recuperación que da el mismo peso a cada documento, mientras que Macro F1 da el mismo peso a cada clase. Para cada una de ellas, la ecuación de la medida F es la misma, pero la precisión y la recuperación se calculan de forma diferente:

$$F = \frac{(\beta^{2} + 1)PR}{\beta^{2}P+R},$$

donde $\beta$ se suele fijar en 1. Entonces,

$$P_{micro}=\frac{\sum^{|C|}_{i=1}TP_{i}}{\sum^{|C|}_{i=1}TP_{i}+FP_{i}}, R_{micro}=\frac{\sum^{|C|}_{i=1}TP_{i}}{\sum^{|C|}_{i=1}TP_{i}+FN_{i}}$$

$$P_{macro}=\frac{1}{|C|}\sum^{|C|}_{i=1}\frac{TP_{i}}{TP_{i}+FP_{i}}, R_{macro}=\frac{1}{|C|}\sum^{|C|}_{i=1}\frac{TP_{i}}{TP_{i}+FN_{i}}$$

donde $TP$ es Verdadero Positivo, $FP$ es falso positivo, $FN$ es falso negativo, y $C$ es la clase.

2voto

David Dollar Puntos 2138
# 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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X