Eu sei que o SVM é um classificador binário. Eu gostaria de estendê-lo ao SVM de várias classes. Qual é a melhor e talvez a maneira mais fácil de realizá-la?
código: em 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
Como isso pode ser melhorado?
machine-learning
matlab
svm
multi-class
lakesh
fonte
fonte
classes
faz no código? Parece ser inútil.Respostas:
Existem muitos métodos para a classificação de várias classes. Duas opções clássicas, que não são específicas do SVM, são:
Classificação de um contra todos (OVA):
suponha que você tenha as classes A, B, C e D. Em vez de fazer uma classificação de quatro vias, treine quatro classificadores binários: A vs. não-A, B vs. não-B , C vs. não-C e D vs. não-D. Em seguida, escolha a classe positiva que é "melhor" (por exemplo, mais afastada da margem nas quatro corridas). Se nenhuma das classificações for positiva (ou seja, todas elas não são X), escolha o "oposto" da classe que é pior (por exemplo, o mais próximo da margem).
Tudo contra todos:
Treine todos os pares possíveis de classificações. Classifique as classes por algum fator (por exemplo, número de vezes selecionado) e escolha o melhor.
O que funciona melhor foi controverso: Duan e Keerthi têm um estudo empírico que sugere um método específico de tudo contra todos, enquanto Rifkin e Klautau defendem um esquema de um contra todos. Existem até esquemas em que se aprende códigos de correção de erros que descrevem os rótulos das classes, em vez dos próprios rótulos.
Boa sorte!
Edit: O que você realmente deseja, especialmente para o OVA, é a probabilidade posterior de cada classe. Para alguns métodos, como Naive Bayes, isso é trivial. Os SVMs normalmente não fornecem probabilidades, mas existem maneiras de calculá-las. Veja o artigo de John Platt, 1999, "Saídas probabilísticas para máquinas de vetores de suporte ..."
fonte
Deixe-me acrescentar que há um trabalho para estender SVMs para várias classes (em oposição aos métodos que Matt Krause descreve que são decompostos em várias tarefas de classificação binária). Um trabalho importante é: Sobre a implementação algorítmica da máquina vetorial baseada em kernel multiclasse
fonte