我正在尝试理解与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
这些不属于样本点。任何澄清
我也试着运行自己的例子 这就是我得到的。
我不明白分离边界恰好位于其中一个样本点上。我不认为这是最好的超平面。它应该已经定义了一些决定边界,我想。它还圈出了支持向量,我不确定那些应该是支持向量。最奇怪的是从超平面到点的边距并不大。为什么会这样?
答案 0 :(得分:2)
我根本不懂数学作品,但根据您的链接,您使用svmtrain()
函数(描述为here):
SupportVectors
- 数据点矩阵,每行对应于规范化数据空间中的支持向量。在根据“AutoScale”参数应用归一化后,此矩阵是Training输入数据矩阵的子集。
所以你的数据点只是规范化了。尝试设置autoscale=false
。
答案 1 :(得分:0)
是的,snøreven是对的。我只是让它更通用:
每个ML问题都有两个阶段:
如果你有三个阶段,那就更好了:
Very short and basic introduction to ML
在您的特定情况下,您需要在Matlab中训练SVM分类模型,然后您可以通过svmclassify
函数使用它。