SVM分类是否仅用于具有两个标签的数据集分类?

我刚开始学习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,它们“投票”,你总结票数,得票最多的标签获胜(同样在平局情况下,你可以使用决策函数)。

Related Posts

在Python的sklearn中遇到”ValueError: Expected 2D array, got 1D array instead”错误 [duplicate]

此问题已有答案: ValueError: Expect…

CNN: 拆分训练集、测试集和验证集并保存训练进度

我正在为以下问题编写代码: 我有一个包含训练和测试目录…

如何在Python中将关键词lambda用作XGBoost的参数?

我在尝试用Python训练XGBoost机器学习模型时…

我在尝试为我的“情感分析”项目制作前端,但无法弄清楚如何让我的“prediction_function”在前端工作

我正在制作一个可以用于任何语言的情感分析项目。它的工作…

### 在使用Python机器学习模型时,精确度和F分数出现未定义警告 [duplicate]

这个问题已经有了答案: UndefinedMetric…

使用多个包含多条线和数据点的go.Figure对象创建子图

如何使用一组包含多条线和数据点的go.Figure对象…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注