R SVM 对于缺失数据的预测返回 NA

问题描述 投票:0回答:3

我正在尝试使用 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)))
r svm
3个回答
4
投票

如果您熟悉 caret 包,您可以在其中使用 233 种不同类型的模型进行拟合(包括包 e1071 中的 SVM),在名为 “按标签相似性聚类的模型” 的部分中,您可以找到一个 csv以及他们用来对算法进行分组的数据。

那里有一个名为“处理丢失的预测数据”的专栏,它告诉您哪些算法可以做您想要的事情。不幸的是 SVM 不包含在那里,但这些算法是:

增强分类树 (ada)
  • 袋装 AdaBoost (AdaBag)
  • AdaBoost.M1(AdaBoost.M1)
  • C5.0(C5.0)
  • 成本敏感的C5.0(C5.0Cost)
  • 单个 C5.0 规则集(C5.0Rules)
  • 单个C5.0树(C5.0Tree)
  • 购物车(r部分)
  • 购物车(rpart1SE)
  • 购物车(rpart2)
  • 成本敏感型 CART (rpartCost)
  • CART 或序数响应 (rpartScore)
  • 如果您仍然坚持使用 SVM,您可以使用同一包中的
preProccess 函数

中的 knnImpute 选项,这应该允许您预测所有观察结果。


1
投票
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 # ...



0
投票
predict

输出包含

names()
属性中的原始行号这一事实:
tmp[names(predict(model,tmp)),"predict"] = predict(model,tmp)

	
© www.soinside.com 2019 - 2024. All rights reserved.