在R中绘制SVM线性分离器

3

我正在尝试使用e1071的svm绘制2维超平面(直线),以分离一个3类问题。我使用了默认方法(因此没有涉及公式),如下所示:

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.

但我没有使用formula方法,而是使用了default方法。如果我将'~''~.'作为公式参数传递,它会抱怨矩阵x不是data.frame

  • 在使用default方法的同时,有没有一种方法可以绘制2D问题的拟合分隔符?
  • 我该如何实现这个目标?

提前致谢。


你能贴出一个可复现的例子吗,包含一个小的数据框?谢谢。 - undefined
x <- prcomp(iris[,1:4])$x[,1:2]y <- iris[,5] - undefined
2个回答

3
看起来虽然svm()方法允许你使用默认或者公式的方式指定输入,但是plot.svm()只接受公式方式。同时,在调用plot.svm()时只输入x并不足够,还需要提供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)

svmplot


1

看起来你的 x 有超过两个特征变量或列。 由于 plot.svm() 一次只能绘制二维图形,你需要通过提供一个公式参数来明确指定这些维度。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接