在 R 中绘制 SVM 线性分隔符

Plotting SVM Linear Separator in R

我正在尝试用 e1071 的 svm 绘制分隔 3-class 问题的二维超平面(线)。我使用了 default 方法(因此不涉及公式),如下所示:

library('e1071')
## S3 method for class 'default':
machine <- svm(x, y, kernel="linear")

我似乎无法使用 plot.svm 方法绘制它:

plot(machine, x)
Error in plot.svm(machine, x) : missing formula.

但是我没有用公式方法,我用的是default一个,如果我通过'~'或者'~.' 作为公式参数,它会抱怨矩阵 x 不是 data.frame

提前致谢。

虽然 svm() 允许您使用默认方法或公式方法指定输入,但 plot.svm() 只允许使用公式方法。此外,仅将 x 提供给 plot.svm(),您并没有提供它所需的所有信息。它还需要 y.

试试这个:

library(e1071)

x <- prcomp(iris[,1:4])$x[,1:2]
y <- iris[,5]

df <- data.frame(cbind(x[],y[]))

machine <- svm(y ~ PC1 + PC2, data=df)
plot(machine, data=df)

您的 x 似乎有两个以上的特征变量或列。 由于 plot.svm() 一次仅绘制 2 维,因此您需要通过提供公式参数来明确指定这些维度。

Ex:-  ## more than two variables: fix 2 dimensions

data(iris)
m2 <- svm(Species~., data = iris)
plot(m2, iris, Petal.Width ~ Petal.Length,slice = list(Sepal.Width = 3, Sepal.Length = 4))

如果数据框默认只有两个维度,您可以忽略公式参数。

Ex:- ## a simple example 

data(cats, package = "MASS")
m <- svm(Sex~., data = cats)
plot(m, cats)

可以在此处 plot.svm() 文档中找到这些详细信息 https://www.rdocumentation.org/packages/e1071/versions/1.7-3/topics/plot.svm