Используя 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)
, я получаю:
Что не является желаемой гиперплоскостью.Я как можно больше играл со значениями и искал разные сэмплы такого рода, но я не могу понять, как я должен использовать простое и смещение для создания правильной гиперплоскости.