我正在尝试使用 e1071 包中经过训练的 SVM 进行预测,但我的数据包含一些缺失值 (NA)。
当该实例有任何缺失值时,我希望返回的预测为 NA。我尝试使用 na.action = na.pass 如下,但它给了我一个错误“名称错误(ret2)<- rowns : 'names' attribute [150] must be the same length as the 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)))
如果您熟悉 caret 包,您可以在其中使用 233 种不同类型的模型进行拟合(包括包 e1071 中的 SVM),在名为 “按标签相似性聚类的模型” 的部分中,您可以找到一个 csv以及他们用来对算法进行分组的数据。
那里有一个名为“处理丢失的预测数据”的专栏,它告诉您哪些算法可以做您想要的事情。不幸的是 SVM 不包含在那里,但这些算法是:
增强分类树 (ada)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
# ...
predict
输出包含
names()
属性中的原始行号这一事实:tmp[names(predict(model,tmp)),"predict"] = predict(model,tmp)