首页 文章

svm预测错误

提问于
浏览
4

我训练了一个svm模型 . 我想测试它,但我在predict()函数中遇到错误 . 为简单起见,我在这里将测试和训练数据拆分为非随机70/30分割 .

library(e1071)

train <- mydata[1:9731, ] 
test  <- mydata[(9731+1):13901, ]

mysvm <- svm(formula = outcome ~ BW + GA, data = train, type = "C-classification", kernel = "linear", gamma = 1, cost = 2)    
predict(mysvm, newdata=test)

错误消息来自predict()是:

Error in names(ret2) <- rowns : 
  'names' attribute [4170] must be the same length as the vector [4106]

数据的头部看起来像......

> head(mydata)
    BW  outcome GA
1 2.00 Survived 34
2 2.81 Survived 41
3 1.85 Survived 35
4 2.23 Survived 32
5 1.21 Survived 34
6 2.91 Survived 37

This user有相同的错误消息 . 问题是他/她没有使用数据帧 . 这不是我的问题 .

> class(test)
[1] "data.frame"
> class(train)
[1] "data.frame"

我不确定为什么会发生这种错误或者它意味着什么 . traceback()和debug(预测)也没有帮助 .

2 回答

  • -1

    由于您尚未提供数据,因此很难提供解决方案 . 但是,我的猜测是你的测试数据中有 GABW 的64行 NA 值 . 如果您删除任何NA的行,我认为您的预测将运行:

    predict(mysvm, newdata = test[!rowSums(is.na(test)), ])
    

    那当然意味着你不会对这些行进行任何预测 . 您如何处理这取决于您(例如,您可以归咎于缺失的值或适合您的特定用例的任何内容) .

  • 6

    我用:

    model < - svm(y = labels,x = data,...)

    pred < - 预测(模型,数据)

    一切都很好 .

相关问题