18 votos

La mejor manera de realizar un SVM multiclase

Sé que el SVM es un clasificador binario. Me gustaría extenderlo a un SVM multiclase. ¿Cuál es la mejor, y tal vez la más fácil, manera de realizarlo?

código: en MATLAB

   u=unique(TrainLabel); 
    N=length(u); 
    if(N>2)    
        itr=1;    
        classes=0;   
        while((classes~=1)&&(itr<=length(u)))   
            c1=(TrainLabel==u(itr));    
            newClass=double(c1); 
            tst = double((TestLabel == itr));
            model = svmtrain(newClass, TrainVec, '-c 1 -g 0.00154');  
            [predict_label, accuracy, dec_values] = svmpredict(tst, TestVec, model);    
            itr=itr+1;   
        end
        itr=itr-1;
    end

¿Cómo se puede mejorar esto?

0 votos

¿Qué hace la variable classes en el código? Parece que es inútil.

0 votos

Si ha llegado a un resultado adecuado, por favor, comparta su código de multiclasificación aquí.

16voto

Rob Allen Puntos 486

Hay muchos métodos de clasificación multiclase. Dos opciones clásicas, que no son específicas de SVM son:

  1. Clasificación de uno a uno (OVA):
    Suponga que tiene las clases A, B, C y D. En lugar de hacer una clasificación de cuatro vías, entrene cuatro clasificadores binarios: A vs. no-A, B vs. no-B, C vs. no-C y D vs. no-D. A continuación, elija la clase positiva que sea "mejor" (por ejemplo, la más alejada del margen en las cuatro ejecuciones). Si ninguna de las clasificaciones es positiva (es decir, todas son no-X), elija la clase "opuesta" a la peor (por ejemplo, la más cercana al margen).

  2. Todos contra todos:
    Entrenar todos los pares de clasificaciones posibles. Clasifica las clases según algún factor (por ejemplo, el número de veces que se han seleccionado) y elige la mejor.

Cuál es la mejor opción ha sido controvertida: Duan y Keerthi tener un estudio empírico que sugiera un método específico de todos contra todos, mientras que Rifkin y Klautau argumentan a favor de un esquema de "uno contra todos". Incluso hay esquemas en los que se aprenden códigos de corrección de errores que describen las etiquetas de clase, en lugar de las propias etiquetas.

Buena suerte.

Editar: Lo que realmente quieres, sobre todo para OVA, es la probabilidad posterior de cada clase. Para algunos métodos, como Naive Bayes, que es trivial para salir. Los SVMs típicamente no le dan probabilidades, pero hay maneras de calcularlas. Véase el artículo de John Platt de 1999 "Probabilistic Outputs for Support Vector Machines..."

2 votos

Para OVA - ¿puede elegir la clase que tiene la mayor probabilidad (inducida por la escala de Platt)?

1 votos

Sí, ese es básicamente el resultado del documento de Duan y Keerthi. Combinan las probabilidades de Platt con el truco de acoplamiento por pares de Hastie y obtienen buenos resultados. Probablemente debería editar el texto para incluirlo. Bien visto, B_Miner.

0 votos

En la SVM, ¿hay que hacer una votación o una suma de valores?

6voto

Dan Appleyard Puntos 223

Permítanme añadir que hay trabajo sobre la ampliación de SVMs a múltiples clases (a diferencia de los métodos que Matt Krause describe que son la descomposición en varias tareas de clasificación binaria). Un trabajo importante es: Sobre la implementación algorítmica de la máquina vectorial multiclase basada en el kernel

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