如何使用支持向量机(SVM)进行多类分类

时间:2009-12-24 13:01:25

标签: machine-learning svm libsvm

在每本书和例子中,它们总是只显示二进制分类(两个类),新的向量可以属于任何一个类。

这里的问题是我有4个班级(c1,c2,c3,c4)。我已经训练了4个班级的数据。

对于新向量,输出应该类似于

  

C1 80%(获胜者)

     

c2 10%

     

c3 6%

     

c4 4%

怎么做?我打算使用libsvm(因为它最受欢迎)。我不太了解它。如果你们中的任何人以前使用它,请告诉我我应该使用的具体命令。

8 个答案:

答案 0 :(得分:37)

LibSVM使用 one-against-one 方法来解决多类学习问题。来自FAQ

  

问:libsvm用于多类SVM的方法是什么?你为什么不使用“1-against-the rest”方法?

     

这是一对一的。我们在做了以下比较后选择了它:C.-W。许和C.-J.林。 A comparison of methods for multi-class support vector machines,IEEE Transactions on Neural Networks,13(2002),415-425。

     

“1-against-the rest”是一种很好的方法,其性能可与“1-against-1”相媲美。我们只是因为培训时间较短而做后者。

答案 1 :(得分:18)

常用的方法是One vs. Rest和One vs. One。 在第一种方法中,您将获得n个分类器,结果类将获得最高分。 在第二种方法中,得到的类是通过所有分类器的多数投票获得的。

AFAIR,libsvm支持多类分类策略。

答案 2 :(得分:4)

通过递归地选择类集的随机分区,您总是可以将多类分类问题简化为二元问题。由于分区问题较小,因此子学习问题需要较少的示例,因此这不一定比一次学习所有项目更有效或更有效。 (它可能最多需要更长的定时时间,例如两倍长)。它也可能导致更准确的学习。

我不一定推荐这个,但它是你问题的一个答案,是一种可以应用于任何二进制学习算法的通用技术。

答案 3 :(得分:1)

使用SVM Multiclass库。在the SVM page by Thorsten Joachims

找到它

答案 4 :(得分:0)

它没有用于多类预测的特定开关(命令)。如果您的训练数据集包含两个以上的类,它会自动处理多类预测。

答案 5 :(得分:0)

与二元预测相比没什么特别之处。请参阅以下基于SVM的3级预测示例。

install.packages("e1071")
library("e1071")
data(iris)
attach(iris)
## classification mode
# default with factor response:
model <- svm(Species ~ ., data = iris)
# alternatively the traditional interface:
x <- subset(iris, select = -Species)
y <- Species
model <- svm(x, y) 
print(model)
summary(model)
# test with train data
pred <- predict(model, x)
# (same as:)
pred <- fitted(model)
# Check accuracy:
table(pred, y)
# compute decision values and probabilities:
pred <- predict(model, x, decision.values = TRUE)
attr(pred, "decision.values")[1:4,]
# visualize (classes by color, SV by crosses):
plot(cmdscale(dist(iris[,-5])),
     col = as.integer(iris[,5]),
     pch = c("o","+")[1:150 %in% model$index + 1])

答案 6 :(得分:0)

/etc/puppet/modules/module_name/template

答案 7 :(得分:0)

使用SVM进行多类分类; 不是(一对一)和不是(一对REST)。

相反,要学习两类分类器,其中特征向量是(x,y),其中x是数据,y是与数据关联的正确标签。

训练差距是正确班级的值与最近的其他班级的值之间的差。

在推断时,选择具有最大值的“ y” (x,y)的值。

y = arg_max(y')W.(x,y')[W是权重向量,(x,y)是特征向量]

请访问链接: https://nlp.stanford.edu/IR-book/html/htmledition/multiclass-svms-1.html#:~:text=It%20is%20also%20a%20simple,the%20label%20of%20structural%20SVMs%20