我刚开始学习SVM,并且一直在寻找合适的SVM使用。从我看到的所有SVM中,训练标签向量基本上是由1和-1组成的向量。我不明白为什么会这样。我原本以为训练向量的每一行应该是一个独特的数字,用来标记其相应的训练实例。
假设我有一个包含m个标签和n个实例的数据集,每个实例是一个d维向量。使用仅包含-1和1的标签向量似乎很奇怪。但我真的不知道如何在超平面上区分这m个标签。能有人解释一下吗?
回答:
SVM在内部是一个二元分类器。这意味着它只能区分两个标签。因此,它非常适合那些问题可以表述为“给定向量是否具有属性X?”并且答案是“是”(+1)或“不是”(-1)的问题。
但现实生活中有很多问题需要更多标签,该怎么办呢?为了解决具有m个标签的问题,比如“图片上的动物是什么类型:猫、狗还是马?”,你基本上会创建一个SVM的集合,它们会为特定的标签投票。有很多可能性,但其中两种最流行:
- 一对所有方法。给定m个标签,你创建m个模型,第i个SVM被训练来识别对象是否具有标签“i”,因此你将标签“i”训练为+1,其余所有样本训练为-1。然后,在分类时,你询问每个SVM是否识别该样本——如果有平局——你使用SVM的决策函数(到超平面的距离)来打破平局(距离最远的获胜)
- 一对一方法。现在你创建m(m-1)/2个SVM。每个SVM回答问题“这个样本是更倾向于i标签还是j标签”,对于每一对(i, j)标签(在m个标签中选择两个标签有m(m-1)/2种方式)。因此,在分类过程中,你询问每个这样的SVM,它们“投票”,你总结票数,得票最多的标签获胜(同样在平局情况下,你可以使用决策函数)。