如何在 R 中构建多类 SVM?

How to build multiclass SVM in R?

我正在使用支持向量机进行项目手写模式识别(字母表)。我总共有 26 classes,但我无法 classify 在 R 中使用 SVM。只有当图像是二进制 class 时,我才能 class 化图像。如何在 R 中将 SVM 用于 Multiclass SVM

我正在使用 "e1071" 包。

提前致谢。

e1071 中没有 Multiclass SVM 的直接等价物。此外,所有将 SVM 用于 multiclass classification 的方法都使用 'one vs rest' 或编码等技术。这是一个详细介绍最常见方法的参考... http://arxiv.org/ftp/arxiv/papers/0802/0802.2411.pdf

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

对于多 class classifier,您可以获得每个 class 的概率。您可以在训练模型时设置 'probability = TRUE',并在 'predict' api 中设置。这将为您提供每个 class 的概率。下面是鸢尾花数据集的示例代码:

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
...

希望对您有所帮助。

注意:我相信当你在内部给 'probability' 时,svm 执行一个 vs rest classifier 因为,'probability' 参数集与 [= 的模型相比需要更多时间23=] 参数未设置。

我想批准的答案已经过时了。 e1071 包中使用的 libsvm 还支持“1-vs.-1”模型中的多 class class 化。即,它创建 (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))