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?
machine-learning
matlab
svm
multi-class
Lakesh
fuente
fuente
classes
en el código? Parece ser inútil.Respuestas:
Existen muchos métodos para la clasificación de varias clases. Dos opciones clásicas, que no son específicas de SVM son:
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).
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 ..."
fuente
Permítanme agregar que hay trabajo en extender SVM a múltiples clases (a diferencia de los métodos que Matt Krause describe que se descomponen en varias tareas de clasificación binaria). Un trabajo importante es: en la implementación algorítmica de la máquina de vectores basada en kernel multiclase
fuente