我正在尝试使用e1071包中经过训练的SVM进行预测,但我的数据包含一些缺失值(NA)。
我希望当该实例有任何缺失值时,返回的预测为NA。我尝试使用na.action = na.pass,但是它给了我一个错误"名称错误(ret2)< - rowns:' names' attribute [150]的长度必须与vector [149]"。
的长度相同如果我使用na.omit,那么我可以获得没有丢失数据的实例的预测。 如何获得包括NA在内的预测?
library(e1071)
model <- svm(Species ~ ., data = iris)
print(length(predict(model, iris)))
tmp <- iris
tmp[1, "Sepal.Length"] <- NA
print(length(predict(model, tmp, na.action = na.pass)))
答案 0 :(得分:2)
如果您熟悉caret package,您可以使用233种不同类型的模型(包括来自包e1071的SVM),在"models clustered by tag similarity"部分,您可以找到一个csv他们用来对算法进行分组的数据。
有一个名为 Handle Missing Predictor Data 的列,它告诉您哪些算法可以执行您想要的操作。不幸的是,SVM不包括在内,但这些算法是:
如果你仍然坚持使用SVM,你可以使用同一个包中preProccess function的knnImpute选项,这样你就可以预测你的所有观察结果。
答案 1 :(得分:0)
您可以将所有有效案例分配回tmp
集合中的预测变量:
tmp[complete.cases(tmp), "predict"] <- predict(model, newdata=tmp[complete.cases(tmp),])
tmp
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species predict
#1 NA 3.5 1.4 0.2 setosa <NA>
#2 4.9 3.0 1.4 0.2 setosa setosa
#3 4.7 3.2 1.3 0.2 setosa setosa
# ...