2017-02-20 75 views
3

我試圖使用包e1071中訓練有素的SVM進行預測,但我的數據包含一些缺失值(NA)。R對於缺少數據的預測,SVM返回NA

我想返回的預測爲NA時,該實例有任何缺失的值。我嘗試使用na.action = na.pass如下,但它給我一個錯誤「名稱錯誤(ret2)< - rowns:'names'屬性[150]必須與矢量[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))) 
+2

你可以只分配所有有效的情況下回到一個預測變量在'tmp'設置 - 'TMP [complete.cases(tmp),「predict」] < - predict(model,newdata = tmp [complete.cases(tmp),])'或同等學歷。 – thelatemail

+0

謝謝,這很好。鑑於我必須與支持向量機一起工作,並且想要NA而不是插補,這是要走的路。 – Jake

回答

2

,如果你熟悉caret package,在那裏你可以使用233種不同類型的模型,以適應(包括包裝e1071 SVM),在被稱爲"models clustered by tag similarity"那裏的部分,你可以找到他們使用的數據爲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)
  • 車(rpart包)
  • 車(rpart1SE)
  • 車(rpart2)
  • 成本敏感的CART(rpartCost)
  • 車或序響應(rpartScore)

如果你還是堅持在使用SVM時,您可以使用來自同一軟件包的preProccess function中的knnImpute選項,該選項允許您預測所有觀察結果。

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 
# ...