我可以在我的数据集上使用R包“e1071”运行svm,但我无法使用任何两个预测变量绘制图形。即使经过Google搜索,我也无法找到解决方案。专家请帮我解决这个问题:
我有一个包含以下属性的数据集:
> dim(fulldata)
[1] 153 2915
> str(fulldata)
'data.frame': 153 obs. of 2915 variables:
$ label : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
$ V12 : num 1.372 -1.541 0.201 1.06 1.815 ...
$ V14 : num 0.052 -1.442 1.022 -0.35 0.192 ...
$ V17 : num 0.885 -2.569 0.326 1.574 1.394 ...
$ V37 : num 0.356 2.884 -0.452 0.067 0.282 ...
$ V51 : num -0.018 -1.71 1.084 -0.21 0.091 ...
$ V66 : num 0.178 0.264 -3.189 0.451 0.831 ...
$ V67 : num 0.693 -0.698 -0.335 0.076 1.016 ...
$ V69 : num -0.383 -0.316 1.332 -0.643 0.195 ...
$ V70 : num 0.203 0.196 -0.83 0.024 0.257 -0.33 -0.731 0.668 0.39 -0.12 ...
我可以使用e1071软件包运行svm,但无法使用任何两个预测变量进行绘图
svm(y = fulldata [,1],x = fulldata [, - 1],probability = T,na.rm = T,kernel =“linear”)
Call:
svm.default(x = fulldata[, -1], y = fulldata[, 1], kernel = "linear",
probability = T, na.rm = T)
Parameters:
SVM-Type: C-classification
SVM-Kernel: linear
cost: 1
gamma: 0.0003431709
Number of Support Vectors: 60
但是
> plot(svm(y=fulldata[,1], x=fulldata[,-1], probability=T,na.rm=T,
kernel="linear"),fulldata,fulldata[,2]~fulldata[,3])
Error in terms.default(x) : no terms component nor attribute
以下是有关我的会话的信息
sessionInfo() R版本3.0.1(2013-05-16) 平台:x86_64-unknown-linux-gnu(64位)
locale:
[1] LC_CTYPE=en_IN LC_NUMERIC=C LC_TIME=en_IN
[4] LC_COLLATE=en_IN LC_MONETARY=en_IN LC_MESSAGES=en_IN
[7] LC_PAPER=C LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=en_IN LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] MASS_7.3-26 e1071_1.6-3
loaded via a namespace (and not attached):
[1] class_7.3-7 tcltk_3.0.1 tools_3.0.1
答案 0 :(得分:5)
来自?formula
通过例如lm和glm函数拟合的模型以紧凑符号表示 形成。 〜运算符是这种模型形成的基础。形式为y的表达式 〜模型被解释为响应y由线性建模的规范 预测器由模型象征性地指定。这样的模型由一系列由+运算符分隔的术语组成。 这些术语本身由变量和因子 名称组成。
使用带有变量名称的公式可以修复它...一个假的例子如下
library(e1071)
fulldata <- data.frame("label" = gl(2,150),
"V1" = rnorm(300),
"V2" = rnorm(300),
"V3" = rnorm(300),
"V4" = rnorm(300),
"V5" = rnorm(300),
"V6" = rnorm(300),
"V7" = rnorm(300),
"V8" = rnorm(300),
"V9" = rnorm(300),
"V10" = rnorm(300))
str(fulldata)
my.svm <- svm(label ~ .,
probability=TRUE,
na.rm=TRUE,
kernel="linear",
data = fulldata)
my.svm
plot(my.svm,
data = fulldata,
formula = V1 ~ V2)