SVM MATLAB实现错误绘制决策边界

时间:2015-10-16 14:01:06

标签: matlab machine-learning svm

我正在尝试在MATLAB中进行二进制分类,但以下代码最后会抛出错误。

   load('ex6data1.mat');

% Plot training data
plotData(X, y);



fprintf('Program paused. Press enter to continue.\n');
pause;

model=fitcsvm(X,y);
visualizeBoundaryLinear(X,y,model); //error shows up here i guess


fprintf('Paused');




Error window
   Error using subsref
No appropriate method, property, or field 'w' for class
'ClassificationSVM'.

Error in classreg.learning.internal.DisallowVectorOps/subsref (line
21)
                [varargout{1:nargout}] = builtin('subsref',this,s);

Error in visualizeBoundaryLinear (line 7)
w = model.w;

Error in Untitled2 (line 18)
visualizeBoundaryLinear(X,y,model);

注意:正例为Y为1,负数为-1。

1 个答案:

答案 0 :(得分:0)

如果您查看MATLAB documentation for fitcsvm,就会发现没有属性w,这就是错误。

您需要自己计算权重w,因为MATLAB正在解决SVM的双重形式。更多详细信息可以在这里找到。如果您想了解更多信息,请查看this reference。您可以使用以下公式:

w = zeros( size(x(1,:)) );
for i=1:N
    w = w + alpha(i)*y(i)*x(i,:);
end

您可以使用模型中返回的alpha和您的数据的组合来计算w向量。