Построение линейной гиперплоскости с использованием простого вектора в Matlab - PullRequest
0 голосов
/ 16 октября 2018

Используя 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

Что не является желаемой гиперплоскостью.Я как можно больше играл со значениями и искал разные сэмплы такого рода, но я не могу понять, как я должен использовать простое и смещение для создания правильной гиперплоскости.

...