2015-10-16 43 views
0

我试图做在MATLAB二元分类,但下面的代码在最后抛出一个错误。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代表负数。

+0

并MATLAB抛出什么错误?你可以在你的代码下复制它吗? – BillBokeey

+0

嗨,我已经添加了它.. –

+1

什么'visualizeBoundaryLinear'看起来像?错误发生在该函数中,但是'visualizeBoundaryLinear'不是本地MATLAB分布的一部分。 – rayryeng

回答

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载体。

+0

好的..所以双重形式使我们能够使用内核。这些权重究竟是什么?如果我想绘制结果的线性决策边界,我该怎么办?编辑:权重给出了分离超平面的方向..所以fitcsvm并不真正找到方向? –

+0

权重给出了分离hyperplane的方向..所以fitcsvm没有找到权重..在这种情况下,我该怎么做? –

+0

我已经更新了我的答案,以包含此程序的公式。你的代码可能看起来有些不同。 – GJStein