在每本书和例子中,它们总是只显示二进制分类(两个类),新的向量可以属于任何一个类。
这里的问题是我有4个班级(c1,c2,c3,c4)。我已经训练了4个班级的数据。
对于新向量,输出应该类似于
C1 80%(获胜者)
c2 10%
c3 6%
c4 4%
怎么做?我打算使用libsvm(因为它最受欢迎)。我不太了解它。如果你们中的任何人以前使用它,请告诉我我应该使用的具体命令。
答案 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)是特征向量]