使用svmtrain和svmmodel,我们应该绘制一个超平面来分离两个数据集合。通过样本,我得到了数据:
c = [1 1; 2 1.5; 2 1;3 1.5];
N = 10; X = []; sigma = 0.2;
for i = 1:4
X = [X; sigma*randn(N,2) + repmat(c(i,:),N,1)];
end
Y = [ones(1,2*N) -ones(1,2*N)];
plot(X(1:end/2,1),X(1:end/2,2),'+')
hold all
plot(X(end/2+1:end,1),X(end/2+1:end,2),'o')
hold on
因此,据我了解,我必须使用原始向量来获得超平面,如下所示:y = w'x + b,如下所示:
model = svmtrain(Y',X,'-s 0 -t 0 -c 1')
w = model.SVs' * model.sv_coef;
b = -model.rho;
if model.Label(1) == -1
w = -w;
b = -b;
end
但是,当我添加
plot(w+b)
我得到:
这不是所需的超平面。我已经尽我所能地使用了这些值,并且查找了这种类型的不同样本,但是我无法弄清楚应该如何使用原始和偏差来产生适当的超平面。