gpt4 book ai didi

r - e1071 R 包中的 SVM 方程?

转载 作者:行者123 更新时间:2023-11-30 08:22:00 27 4
gpt4 key购买 nike

我有兴趣测试 SVM 性能,将多个个体分为四个组/类。当使用 MATLAB 中的 svmtrain LibSVM 函数时,我能够根据该方程的值获得用于将这些个体分为 4 个组的三个方程。方案可以如下:

                All individuals (N)*
|
Group 1 (n1) <--- equation 1 ---> (N-n1)
|
(N-n1-n2) <--- equation 2 ---> Group 2 (n2)
|
Group 3 (n3) <--- equation 3 ---> Group 4(n4)

*N = n1+n2+n3+n4

有没有办法使用 e1071 R 包中的 svm 函数获得这些方程?

最佳答案

e1071 中的

svm 使用“一对一”策略进行多类分类(即所有对之间进行二元分类,然后进行投票)。因此,要处理这种分层设置,您可能需要手动执行一系列二元分类器,例如组 1 与所有组,然后组 2 与剩下的任何组,等等。此外,基本的 svm函数不会调整超参数,因此您通常需要使用包装器,例如 e1071 中的 tune 或优秀 中的 train插入符 包。

无论如何,要在 R 中对新个体进行分类,您不必手动将数字代入方程。相反,您可以使用 predict 通用函数,该函数具有适用于 SVM 等不同模型的方法。对于这样的模型对象,您通常还可以使用通用函数 plotsummary。以下是使用线性 SVM 的基本思想的示例:

require(e1071)

# Subset the iris dataset to only 2 labels and 2 features
iris.part = subset(iris, Species != 'setosa')
iris.part$Species = factor(iris.part$Species)
iris.part = iris.part[, c(1,2,5)]

# Fit svm model
fit = svm(Species ~ ., data=iris.part, type='C-classification', kernel='linear')

# Make a plot of the model
dev.new(width=5, height=5)
plot(fit, iris.part)

# Tabulate actual labels vs. fitted labels
pred = predict(fit, iris.part)
table(Actual=iris.part$Species, Fitted=pred)

# Obtain feature weights
w = t(fit$coefs) %*% fit$SV

# Calculate decision values manually
iris.scaled = scale(iris.part[,-3], fit$x.scale[[1]], fit$x.scale[[2]])
t(w %*% t(as.matrix(iris.scaled))) - fit$rho

# Should equal...
fit$decision.values

enter image description here

将实际类别标签与模型预测制成表格:

> table(Actual=iris.part$Species, Fitted=pred)
Fitted
Actual versicolor virginica
versicolor 38 12
virginica 15 35

svm模型对象中提取特征权重(用于特征选择等)。在这里,Sepal.Length 显然更有用。

> t(fit$coefs) %*% fit$SV
Sepal.Length Sepal.Width
[1,] -1.060146 -0.2664518

为了了解决策值的来源,我们可以手动计算它们,即特征权重和预处理特征向量的点积减去截距偏移量rho。 (预处理意味着如果使用 RBF SVM 等,可能会居中/缩放和/或内核转换)

> t(w %*% t(as.matrix(iris.scaled))) - fit$rho
[,1]
51 -1.3997066
52 -0.4402254
53 -1.1596819
54 1.7199970
55 -0.2796942
56 0.9996141
...

这应该等于内部计算的值:

> head(fit$decision.values)
versicolor/virginica
51 -1.3997066
52 -0.4402254
53 -1.1596819
54 1.7199970
55 -0.2796942
56 0.9996141
...

关于r - e1071 R 包中的 SVM 方程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7390173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com