我训练了一个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)
Run Code Online (Sandbox Code Playgroud)
错误消息来自predict()是:
Error in names(ret2) <- rowns :
'names' attribute [4170] must be the same length as the vector [4106]
Run Code Online (Sandbox Code Playgroud)
数据的头部看起来像......
> 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
Run Code Online (Sandbox Code Playgroud)
该用户具有相同的错误消息.问题是他/她没有使用数据帧.这不是我的问题.
> class(test)
[1] "data.frame"
> class(train)
[1] "data.frame"
Run Code Online (Sandbox Code Playgroud)
我不确定为什么会发生这种错误或者它意味着什么.追溯()和调试(预测)也没有帮助.
由于您尚未提供数据,因此很难提供解决方案.然而,我的猜测是,你有64行与NA值GA或BW在您的测试数据.如果删除包含任何NA的行,我认为您的预测将运行:
predict(mysvm, newdata = test[!rowSums(is.na(test)), ])
Run Code Online (Sandbox Code Playgroud)
那当然意味着你不会对这些行进行任何预测.你如何处理这取决于你(例如你可以归咎于缺失的值或适合你的特定用例的任何东西).
| 归档时间: |
|
| 查看次数: |
3670 次 |
| 最近记录: |