【问题标题】:Error in 1:nrow(newdata) : argument of length 0 while using SVM predict1:nrow(newdata) 中的错误:使用 SVM 预测时长度为 0 的参数
【发布时间】:2017-02-22 03:41:15
【问题描述】:

我正在尝试根据 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(...)...)

【问题讨论】:

  • 如果你能提供一个你正在经历的整个过程的小例子——尤其是你数据的一小部分dput(head(train)),这很有用。

标签: r machine-learning svm predict rscript


【解决方案1】:

我怀疑featvecs 只有一列,所以featvecs[f,] 的长度是1

然后test[,featvecs[f,]] 输出一个向量而不是预期的data.frame(请参阅mtcars[, "mpg"]mtcars[, "mpg", drop = FALSE] 之间的区别),并将nrow() 应用于向量输出NULL:源中的1:nrow(newdata) svm.predict() 的代码给出了导致您的错误的 1:NULL

尝试将drop = FALSE 添加到test[,featvecs[f,], drop = FALSE] 以获得一个data.frame。

【讨论】:

  • 非常感谢。像魅力一样工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多