我正在尝试根据svm训练的模型预测A值。 这就是我的列车和测试数据的样子:
A B C D
r00 r01 r02 r03
... ... ... ...
代码片段如下:
featvecs = [“B”]
for (f in 1:nrow(featvecs)) {
tuned <- svm(A ~., data = train[,c("A",featvecs[f,])], gamma = 0.01, cost = 10, kernel= "radial")
svm.predict <- predict(tuned, test[,featvecs[f,]])
}
我收到了svm.predict行的以下错误,我不确定为什么?
Error in 1:nrow(newdata) : argument of length 0
列车数据的结构:
structure(list(A = structure(6L, .Label = c("'1'",
"'2'", "'3'" ), class = "factor"), B = structure(15L, .Label = c(...)...)
测试数据的结构:
structure(list(A = structure(2L, .Label = c("'1'",
"'2'", "'3'" ), class = "factor"), B = structure(17L, .Label = c(...)...)
答案 0 :(得分:0)
我怀疑featvecs
只有一列,因此featvecs[f,]
的长度为1
。
然后test[,featvecs[f,]]
输出一个向量而不是预期的data.frame(请参阅mtcars[, "mpg"]
和mtcars[, "mpg", drop = FALSE]
之间的差异),nrow()
应用于向量输出{{ 1}}:NULL
的源代码中的1:nrow(newdata)
会导致您的错误svm.predict()
。
尝试将1:NULL
添加到drop = FALSE
,以便获得data.frame。