La mejor manera de realizar SVM multiclase

18

Sé que el SVM es un clasificador binario. Me gustaría extenderlo a SVM multiclase. ¿Cuál es la mejor y quizás la forma más fácil 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?

Lakesh
fuente
¿Qué hace la variable classesen el código? Parece ser inútil.
¿Llegaste a alguna conclusión? Tengo este problema con mi trabajo. Si ha llegado a un rusult adecuado, comparta su código de clasificación múltiple aquí. Gracias.
me.rasouli

Respuestas:

16

Existen muchos métodos para la clasificación de varias clases. Dos opciones clásicas, que no son específicas de SVM son:

  1. Clasificación de uno contra todos (OVA):
    suponga que tiene 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 frente a no-C y D frente a no-D. Luego, elija la clase positiva que sea "mejor" (p. Ej., La más alejada del margen en las cuatro carreras). Si ninguna de las clasificaciones es positiva (es decir, no todas son X), elija el "opuesto" de la clase que sea peor (por ejemplo, el más cercano al margen).

  2. All-vs-All:
    entrena todos los pares posibles de clasificaciones. Clasifique las clases por algún factor (por ejemplo, # de veces seleccionadas) y elija la mejor.

Lo que funciona mejor ha sido polémico: Duan y Keerthi tienen un estudio empírico que sugiere un método específico de todos contra todos, mientras que Rifkin y Klautau abogan por un esquema de uno contra todos. Incluso hay esquemas en los que uno aprende códigos de corrección de errores que describen las etiquetas de clase, en lugar de las etiquetas en sí.

¡Buena suerte!

Editar: lo que realmente quieres, particularmente para OVA, es la probabilidad posterior de cada clase. Para algunos métodos, como Naive Bayes, es trivial salir. Los SVM generalmente no le dan probabilidades, pero hay formas de calcularlos. Vea el artículo de 1999 de John Platt "Resultados probabilísticos para máquinas de vectores de soporte ..."

Matt Krause
fuente
2
Para OVA, ¿puede elegir la clase que tiene la mayor probabilidad (inducida por la escala de Platt)?
B_Miner
1
Sí, eso es básicamente el resultado del artículo 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 incluir eso. Buena captura B_Miner!
Matt Krause
en SVM, ¿necesita votar o hacer una suma de fondos?
Lakesh
@lakesh, One-vs-all o All-vs-all son como esquemas de votación. Si está utilizando un conjunto de clasificadores binarios, debe hacer algo para convertirlos en un clasificador de varias clases. Alternativamente, puede usar el SVM modificado descrito por carlosdc a continuación ...
Matt Krause
que es ese algo
Lakesh