【发布时间】:2019-04-02 20:24:42
【问题描述】:
我使用以下代码构建了我的 SVM 模型:
X1 = c(2, 2, -2, -2, 1, 1, -1, -1)
X2 = c(2, -2, -2, 2, 1, -1, -1, 1)
Y = c(1, 1, 1, 1, 2, 2, 2, 2)
alldata = data.frame(X1, X2, Y)
svm_model <- svm(alldata$Y ~ . , kernel = "radial", type = "C-classification", alldata)
现在,我想用值(4,5) 对新实例进行分类。我尝试使用命令:
predict(svm_model, c(4,5))
但我收到以下错误:
Error in dimnames(x) <- dn :
length of 'dimnames' [2] not equal to array extent
接下来我创建了一个如下所示的小数据框,尝试进行分类并得到显示的结果:
b1 = c(4)
b2 = c(5)
b = data.frame(b1,b2)
predict(svm_model, b)
1 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
1 1 1 1 2 2 2 2
我在哪里犯错了?
【问题讨论】:
-
您在公式中使用的变量名称需要与新 data.frame 中用于预测的名称完全匹配(否则 R 如何知道哪些值映射到哪些变量)。试试
b = data.frame(X1=b1,X2=b2)。此外,您应该只使用Y ~ .作为公式(不要使用$)并设置data=alldata。这使得使用 predict 等函数更加安全。
标签: r machine-learning svm