如何在R中构建多类SVM?

时间:2015-12-17 06:36:48

标签: r svm

我正在使用支持向量机进行项目手写模式识别(Alphabets)。我总共 26个班级,但我无法在 R 中使用SVM进行分类。我只能在二进制类的情况下对图像进行分类。如何在R?

中将SVM用于多类SVM

我正在使用“e1071”套餐。

提前致谢。

3 个答案:

答案 0 :(得分:4)

对于多类分类器,您可以获得每个类的概率。训练模型时可以设置'probability = TRUE'。在'预测'api。这将为您提供每个班级的概率。以下是虹膜数据集的示例代码:

data(iris)
attach(iris)
x <- subset(iris, select = -Species) 
y <- Species
model <- svm(x, y, probability = TRUE)
pred_prob <- predict(model, x, decision.values = TRUE, probability = TRUE)

使用上面的代码,'pred_prob'将具有其他数据中的概率。您只能使用以下语句访问对象中的概率:

attr(pred_prob, "probabilities")

         setosa  versicolor   virginica
1   0.979989881 0.011347796 0.008662323
2   0.972567961 0.018145783 0.009286256
3   0.978668604 0.011973933 0.009357463
...

希望这有帮助。

注意:我相信当你给出'概率'时,svm会执行一个vs rest分类器,因为在设置'probability'参数的模型中设置'probability'参数需要花费更多的时间。

答案 1 :(得分:1)

e1071中没有直接等效的多类SVM。此外,所有使用SVM进行多类分类的方法都使用了诸如“休息”和“休息”之类的技术。或编码等。以下是详细说明最常见方法的参考资料...... http://arxiv.org/ftp/arxiv/papers/0802/0802.2411.pdf

如果要将e1071用于多类SVM,最好创建26个svm模型,每个类一个,并使用概率分数进行预测。这种方法应该足以用于手写模式识别。

答案 2 :(得分:0)

我想批准的答案已经过时了。包 e1071 中使用的 libsvm 还支持“1-vs.-1”模型中的多类分类。即,它创建了 (L-choose-2) 个分离平面。

这是一个示例代码:

# Create 2d data
set.seed(1)
x1 = matrix(c(rnorm(20, 0), rnorm(20, 0)), ncol=2)
x2 = matrix(c(rnorm(20, 0), rnorm(20, 4)), ncol=2)
x3 = matrix(c(rnorm(20, 4), rnorm(20, 0)), ncol=2)
x4 = matrix(c(rnorm(20, 4), rnorm(20, 4)), ncol=2)
x = rbind(x1,x2,x3,x4)
y = factor(c(rep(1,20), rep(2,20), rep(3,20), rep(4,20)))

# Multiclass Classification (1 vs. 1)
fit = svm(y~x, kernel = "linear", cost = 10, scale=F)
plot(x, col=y, xlim=c(-3,6), ylim=c(-2.5,6.5))
table(y, predict(fit))