2

我试图理解这个与 svm 有关的例子http://www.mathworks.com/help/bioinfo/ref/svmclassify.html

我运行了获取虹膜数据的示例,并按照示例中给出的方式绘制了 svm。然而,当我查看 svmstruct 中的支持向量时,我得到了很多新值。AFAIK,支持向量应该是样本本身,位于边缘的那些。但是,当我打印 svmStruct.SupportVectors 时,我会得到不同的值,例如

-0.0073   -0.4143
   -0.3706   -0.4143
   -0.2495   -0.1789
   -0.1284    0.2919
   -0.0073   -0.4143
   -0.1284   -0.6498
    0.1139    0.0565
    0.2350   -0.1789
   -0.4918   -0.1789
   -0.2495   -0.4143
   -0.4918    0.0565
    0.1139   -0.4143
   -0.0073    0.2919
   -0.1284    0.2919
   -0.0073    0.2919
    0.2350   -0.4143
    0.8406   -0.6498
   -0.1284    0.2919
    0.2350    0.2919

这些不在样本点中。任何澄清

我也尝试运行我自己的示例,这就是我得到的。

我不明白分离边界恰好位于样本点之一上。我不认为这是最好的超平面。我猜它应该定义了一些稍微低一些的决策边界。它也圈出了支持向量,我不确定那些应该是支持向量。最奇怪的是超平面到点的margin并不大。为什么会这样?

在此处输入图像描述

4

2 回答 2

2

我根本不知道mathworks,但是根据您的链接,您使用了该svmtrain()函数(在此处描述):

SupportVectors— 数据点矩阵,每行对应于标准化数据空间中的支持向量。该矩阵是训练输入数据矩阵的子集,在根据“AutoScale”参数应用归一化之后。

所以你的数据点只是被标准化。尝试设置autoscale=false

于 2012-12-09T12:44:46.330 回答
0

是的,snøreven 是对的。我只是让它更笼统:

每个 ML 问题都有两个阶段:

  1. 训练模型
  2. 测试/使用训练好的模型

更好的是,如果你有三个阶段:

  1. 训练模型
  2. 评估模型(它是否足以满足我的目的?)
  3. 测试/使用训练好的模型

非常简短和基本的机器学习介绍

机器学习课程

在您的特定情况下,您需要在 Matlab 中训练一个用于 SVM 分类的模型,然后您可以通过该svmclassify函数使用它。

于 2012-12-11T16:24:02.960 回答