【问题标题】:Confusion related to svm与 svm 相​​关的困惑
【发布时间】:2012-11-26 22:30:30
【问题描述】:

我正在尝试理解这个与 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并不大。为什么会这样?

【问题讨论】:

    标签: machine-learning artificial-intelligence svm


    【解决方案1】:

    我根本不知道 mathworks,但根据您的链接,您使用 svmtrain() 函数(描述为 here):

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

    所以你的数据点只是被规范化了。尝试设置autoscale=false

    【讨论】:

      【解决方案2】:

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

      每个机器学习问题都有两个阶段:

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

      如果你有三个阶段,那就更好了:

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

      Very short and basic introduction to ML

      ML course

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

      【讨论】:

        猜你喜欢
        • 2013-04-05
        • 2012-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多