【问题标题】:SVM MATLAB implementation Error plotting decision boundarySVM MATLAB 实现 绘制决策边界时出错
【发布时间】:2016-01-15 07:38:45
【问题描述】:

我正在尝试在 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 表示负例。

【问题讨论】:

  • matlab 会抛出什么错误?你能把它复制到你的代码下吗?
  • 嗨,我已经添加了它..
  • visualizeBoundaryLinear 看起来像什么?错误发生在该函数中,但 visualizeBoundaryLinear 不是本机 MATLAB 发行版的一部分。
  • 我想做的是绘制由 SVM 获得的线性决策边界。为什么 visualboundarylinear 函数会抛出错误。它不应该帮助我做我想做的事吗?
  • 是的,它应该这样做,但代码正在该函数中发生......如果我们看不到代码在做什么,我们如何帮助您?

标签: matlab machine-learning svm


【解决方案1】:

如果您查看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 向量。

【讨论】:

  • 好吧..所以双重形式使我们能够使用内核。这些权重到底是什么……如果我想绘制得到的线性决策边界该怎么办?编辑:权重给出了分离超平面的方向。所以 fitcsvm 实际上并没有找到方向?
  • 权重给出了分离超平面的方向..所以 fitcsvm 找不到权重..在这种情况下我该怎么做?
  • 我已更新我的答案以包含此过程的公式。您的代码可能看起来略有不同。
  • 好的..所以由于解决了对偶问题,我们得到了 alpha 向量..并且 w 是通过该线性组合获得的。现在,因为我们有 w 我们可以绘制线性决策边界..但是截距 b 的值呢..我们也需要找到正确的..我如何将这些参数传递给函数图?跨度>
猜你喜欢
  • 2021-07-30
  • 2016-07-13
  • 2011-07-19
  • 2012-10-11
  • 2019-09-07
  • 2018-12-20
  • 2021-05-17
  • 2019-04-22
  • 2018-12-31
相关资源
最近更新 更多