How do I visualize the SVM classification once I perform SVM training in Matlab?
So far, I have only trained the SVM with:
% Labels are -1 or 1
groundTruth = Ytrain;
d = xtrain;
model = svmtrain(groundTruth, d);
If you are using LIBSVM, you can plot classification results:
% 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');
Assuming your data has more than two dimensions, you can perform a PCA, project the data to 2D, then assign them a color according to the output of your svm classifier (e.g., red for class A, blue for class B). This is quick to do and you will see if there is anything to visualize. However, data with a high dimensionality are not likely to be easily visualizable in 2D.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With