如何从R中的线性SVM获取决策边界?


9

我需要一个可以为我提供线性SVM模型方程式的软件包。目前,我正在像这样使用e1071

library(e1071)
m = svm(data, labels, type='C', kernel='linear', cost=cost, probability=FALSE, scale=scale)
w = t(m$coefs) %*% data[m$index,]  #Weight vector
b = -model$rho #Offset

但是,我不确定如何e1071::svm()选择肯定和否定类,因此我认为这可能会使不同的数据集搞砸。谁能确认该函数如何确定哪个类别为正,哪个类别为负?

另外,有更好的包装吗?


1
我在相关线程上提供了有关此信息:计算线性SVM模型的决策边界
chl 2012年

Answers:


1

对于数据点您的SVM通过以下方式计算决策值:xd

d <- sum(w * x) + b

如果则标签为,否则为。您还可以通过说出数据矩阵的标签或决策值d>0x+11newdata

predict(m, newdata)

要么

predict(m, newdata, decision.values = TRUE)

使用软件包e1071中的SVM时要小心,请参阅e1071 libsvm出现问题?题。R的其他几个SVM软件包是kernlab,klaR和svmpath,请参阅此概述:A. Karatzoglou和D. Meyer撰写的R中支持向量机


2
谢谢,但是我的问题是关于如何获得w和b值。另外,关于决策值,我想问e1071如何在传递因子时决定训练数据的哪个给定标签为正和负。
reisner

1
我对e1071不熟悉,但是我知道SVM。一个班级被认为是正面的还是负面的都不会影响结果。您可以获取任何数据集并交换类标签,就测试点的分类而言(对于相同的参数),您仍应获得相同的结果。正值和负值用于确定实例是否落在决策边界的右侧。
卡雷努
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.