2015-02-17 2 views
0

Я использую svmlib для классификации линейно двумерных неразделимых данных. Я могу обучить svm и получить w и b, используя svmlib. Используя эту информацию, я могу построить границу решения вместе с векторами поддержки, но я не уверен в том, как рисовать поля, используя информацию, которую мне дает svmlib.Границы поля SVM с использованием MATLAB и libsvm

Ниже мой код:

model = svmtrain(Y,X, '-s 0 -t 0 -c 100'); 

w = model.SVs' * model.sv_coef; 
b = -model.rho; 
if (model.Label(1) == -1) 
    w = -w; b = -b; 
end 
y_hat = sign(w'*X' + b); 

sv = full(model.SVs); 

% plot support vectors 
plot(sv(:,1),sv(:,2),'ko', 'MarkerSize', 10); 

% plot decision boundary 
plot_x = linspace(min(X(:,1)), max(X(:,1)), 30); 
plot_y = (-1/w(2))*(w(1)*plot_x + b); 
plot(plot_x, plot_y, 'k-', 'LineWidth', 1) 
+0

Маржа - это расстояние между границей решения и векторами поддержки. Как бы вы хотели это сделать? – hbaderts

ответ

2

Это зависит от того, что вы имеете в виду под «полями». Это также зависит от того, какую версию SVM вы говорите (отделимо от несепарабельной), но так как вы упомянули libsvm, я предполагаю, что вы имеете в виду более общую, не разделяемую версию.

Термин «маржа» может относиться к евклидову расстоянию от разделительной гиперплоскости к гиперплоскости, определяемой wx+b=1 (или wx+b=-1). Это расстояние задано 1/norm(w).

«Маржа» также может относиться к краю определенного образца x, который является евклидовым расстоянием x от разделительной гиперплоскости. Она задается

(WX + Ь)/норма (ш)

отметить, что это знаковое расстояние, то есть это негатив/позитив, в зависимости от того, какой стороне гиперплоскости в точка x проживает. Вы можете нарисовать его как линию от точки, перпендикулярной к гиперплоскости.

Еще одно интересного значения фиктивного переменная xi, которая является «алгебраическим» расстоянием (не евклидовое) вектора поддержки от «жестких» краев, определяемых wx+b=+1 (или -1). Она положительна только для опорных векторов, и если точка не является опорным вектором, его xi равен 0. Более компактно:

хи = тах (0, 1 - у * (ш '* х + б))

где y - это ярлык.

+0

Я думаю, что я просто не понимаю теорию svm правильно. Учитывая ваши уравнения, как узнать, какой вектор поддержки использовать для получения поля? Будет ли это правильно классифицированный вектор поддержки, который находится дальше всего от границы решения? – user115188

+0

Я отредактирую свой ответ, так как он недостаточно короткий для комментария –

Смежные вопросы