【问题标题】:How to perform multi-class classification using 'svm' of e1071 package in R如何使用 R 中 e1071 包的“svm”执行多类分类
【发布时间】:2014-03-27 10:05:50
【问题描述】:

我想使用e1071 包的svm 函数执行多类分类。但是从svm的文档中我了解到,它只能进行二进制分类。 vignettes 文档说明了多类分类:“为了允许多类分类,libsvm 使用一对一技术,通过拟合所有二元子分类器并通过投票机制找到正确的类 em>”。
我仍然不明白的是,我们是否可以在 R 中使用 svme1071 执行多类分类?如果是,请说明我们如何通过 iris 数据集进行处理。

【问题讨论】:

  • help("svm") 中的第一个示例完全符合您的要求。
  • @fabians 是的,你对这个例子是正确的,我之前已经看过了。那么,是不是意味着e1071svm 可以进行多类分类,而不仅限于二分类呢?此函数在具有 10 个输出类的数据集上的工作方式是否与 iris 具有 3 个相同?
  • 在另一个帖子中回复了类似的问题。以下是链接:stackoverflow.com/a/37697836/4861626

标签: r classification svm libsvm


【解决方案1】:

鸢尾花数据集包含三个类标签:“Iris setosa”、“Iris virginica”和“Iris versicolor”。要使用 svm 采用平衡的一对一分类策略,您可以训练三个二元分类器:

第一个分类器的训练集仅包含“Iris setosa”和“Iris virginica”实例。第二个分类器的训练集只包含“Iris setosa”和“Iris versicolor”实例。第三个分类器的训练集——我想现在你已经知道了——只包含“Iris virginica”和“Iris versicolor”实例。

要对未知实例进行分类,请应用所有三个分类器。一个简单的投票策略可以选择最常分配的类标签,更复杂的也可以考虑每个分配的类标签的 svm 置信度分数。

编辑(此原则与svm 一起使用):

# install.packages( 'e1071' )
library( 'e1071' )
data( iris )
model <- svm( iris$Species~., iris )
res <- predict( model, newdata=iris )

【讨论】:

  • 这是解决问题的一种非常好的方法。但是,在此之前,我想知道e1071svm 是否可以直接进行这种多类分类。
  • 我问的原因是,如果我有一个包含 10 个输出类的数据,我需要对 10C2(10 个组合 2)= 45 个这样的分类器进行建模,这是一项艰巨的任务。
  • 好的 :) 所以简短的回答是肯定的,svm 也可以进行多类分类,它的工作方式与二进制相同(请参阅我的答案中的编辑)。
【解决方案2】:

R 文档说“对于具有 k 级 k>2 的多类分类,libsvm 使用‘一对一’方法,其中训练了 k(k-1)/2 个二元分类器;适当的类是通过投票方案找到的。”

【讨论】:

  • 引用文档并不能真正回答问题。
猜你喜欢
  • 2016-08-13
  • 2018-02-10
  • 2023-03-18
  • 2017-02-24
  • 2011-11-15
  • 2020-02-09
  • 2012-06-16
  • 2016-09-21
  • 2019-01-21
相关资源
最近更新 更多