2010-04-15 46 views
8

在Matlab中執行SVM訓練後,如何可視化SVM分類?MATLAB中的支持向量機可視化

到目前爲止,我只訓練了SVM具有:

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

model = svmtrain(groundTruth, d); 

回答

0

退房類似於一個在LIBSVM這個svm-toy功能。顯然,它僅適用於2D二元分類

7

如果您正在使用LIBSVM,你可以繪製分類結果:

% 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'是訓練數據特徵範圍的網格。 – Wok 2014-08-18 14:39:04

2

假設你的數據有兩個以上的維度,您可以執行PCA,項目的數據2D,然後根據您的svm分類器的輸出爲它們分配顏色(例如,紅色代表A級,藍色代表B級)。這很快就會做,你會看到是否有任何可視化。但是,具有高維度的數據在2D中不可能很容易看到。

+0

通過_執行PCA_是什麼意思?唧我能做到嗎?你能多解釋一下嗎?我想要想象FisherIris數據集上的svm分類(使用libsvm)。如果我是正確的,那就是4D – 2012-12-28 15:58:56

+0

說實話,如果你甚至不知道PCA是什麼(主成分分析的簡寫),那麼你可能最終花費太多時間來達到最終結果。這不是微不足道的。 我知道將可視化的決策邊界很有趣,但您可能需要考慮不同的策略來分析SVM的行爲。你究竟想達到什麼目的? – levesque 2013-01-07 16:42:11

+0

最後,我決定使用[stprtool](http://cmp.felk.cvut.cz/cmp/software/stprtool/)代替libsvm來獲得繪製決策邊界的選擇。它工作得很好。感謝您的回覆 – 2013-01-08 05:59:49

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

您是否可以多加一點解釋? – 2014-10-31 20:37:32