MATLAB中的SVM可视化

8

我该如何在Matlab中进行SVM训练后可视化分类结果?

目前为止,我只进行了SVM训练:

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

model = svmtrain(groundTruth, d);
4个回答

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');

dd 是训练数据特征范围的网格。 - Wok

2

假设您的数据具有两个以上的维度,您可以执行PCA,将数据投影到2D,然后根据您的svm分类器的输出(例如,将A类分配为红色,将B类分配为蓝色)来为它们着色。这样做很快,您就可以看到是否有可视化的内容。但是,高维度的数据不太可能在2D中轻松可视化。


什么是“执行PCA”?我该怎么做?您能再解释一下吗?我想在FisherIris数据集上可视化svm分类(使用libsvm)。如果我没错的话,它是4D的。 - Zahra E
说实话,如果你甚至不知道PCA(主成分分析)是什么,你可能会花费太多时间来得到最终结果。这并不是一件简单的事情。我理解你想要可视化决策边界,但你可能需要考虑不同的策略来分析你的SVM的行为。你究竟想要实现什么目标? - levesque
最终我决定使用stprtool而不是libsvm来选择绘制决策边界。它运行得非常好。感谢您的回复。 - Zahra E

0

看看这个类似于LIBSVM的svm-toy函数。显然,它只适用于二维二元分类。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接