我正在尝试在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 :(得分: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
向量。