在Matlab中使用原始向量绘制线性超平面

时间:2018-10-16 16:31:03

标签: matlab svm libsvm

使用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

ScatterPlot_SampleData

因此,据我了解,我必须使用原始向量来获得超平面,如下所示: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)

我得到:

ScatterPlot_Separated_Hyperplane

这不是所需的超平面。我已经尽我所能地使用了这些值,并且查找了这种类型的不同样本,但是我无法弄清楚应该如何使用原始和偏差来产生适当的超平面。

0 个答案:

没有答案