2010-04-15 10 views
8

Come visualizzare la classificazione SVM dopo aver eseguito l'addestramento SVM in Matlab?Visualizzazione SVM in MATLAB

Finora, mi sono allenato solo la SVM con:

% Labels are -1 or 1 
groundTruth = Ytrain; 
d = xtrain; 

model = svmtrain(groundTruth, d); 

risposta

0

Partenza questa funzione svm-toy simile a quella in LIBSVM. Ovviamente funziona solo per 2D classificazione binaria

7

Se si utilizza LIBSVM, è possibile tracciare i risultati di classificazione:

% Labels are -1 or 1 
groundTruth = Ytrain; 
d = xtrain; 

figure 

% plot training data 
hold on; 
pos = find(groundTruth==1); 
scatter(d(pos,1), d(pos,2), 'r') 
pos = find(groundTruth==-1); 
scatter(d(pos,1), d(pos,2), 'b') 

% now plot support vectors 
hold on; 
sv = full(model.SVs); 
plot(sv(:,1),sv(:,2),'ko'); 

% now plot decision area 
[xi,yi] = meshgrid([min(d(:,1)):0.01:max(d(:,1))],[min(d(:,2)):0.01:max(d(:,2))]); 
dd = [xi(:),yi(:)]; 
tic;[predicted_label, accuracy, decision_values] = svmpredict(zeros(size(dd,1),1), dd, model);toc 
pos = find(predicted_label==1); 
hold on; 
redcolor = [1 0.8 0.8]; 
bluecolor = [0.8 0.8 1]; 
h1 = plot(dd(pos,1),dd(pos,2),'s','color',redcolor,'MarkerSize',10,'MarkerEdgeColor',redcolor,'MarkerFaceColor',redcolor); 
pos = find(predicted_label==-1); 
hold on; 
h2 = plot(dd(pos,1),dd(pos,2),'s','color',bluecolor,'MarkerSize',10,'MarkerEdgeColor',bluecolor,'MarkerFaceColor',bluecolor); 
uistack(h1, 'bottom'); 
uistack(h2, 'bottom'); 
+0

'dd' è una meshgrid della gamma delle caratteristiche dei dati di allenamento. – Wok

2

Assumendo che i dati ha più di due dimensioni, è possibile eseguire un APC, progetto i dati 2D, quindi assegna loro un colore in base all'output del tuo classificatore svm (es. Rosso per la classe A, blu per la classe B). Questo è veloce da fare e vedrai se c'è qualcosa da visualizzare. Tuttavia, i dati con un'elevata dimensionalità non sono facilmente visualizzabili in 2D.

+0

Cosa intendi con _performare un PCA_? Haw posso farlo? Vuoi spiegare un po 'di più per favore? Voglio visualizzare la classificazione svm sul set di dati FisherIris (usando libsvm). Se ho ragione è 4D –

+0

Per essere onesti, se non sai nemmeno cos'è un PCA (abbreviazione dell'analisi dei componenti principali), probabilmente finiscono per spendere troppo tempo per il risultato finale. Non è banale. Capisco che sarebbe interessante visualizzare il confine della decisione, ma potreste voler prendere in considerazione diverse strategie per analizzare il comportamento dei vostri SVM. Cosa stai cercando di ottenere esattamente? – levesque

+0

Infine ho deciso di usare [stprtool] (http://cmp.felk.cvut.cz/cmp/software/stprtool/) invece di libsvm per ottenere la scelta di tracciare il confine della decisione. Ha funzionato davvero bene. Grazie per la risposta –

-1
model = svmtrain(groundTruth, d, 'ShowPlot', true); 
+1

Puoi aggiungere un po 'più di una spiegazione, per caso ... –