【问题标题】:R SVM return NA for predictions with missing data对于缺少数据的预测,R SVM 返回 NA
【发布时间】:2017-07-09 03:41:19
【问题描述】:

我正在尝试使用包 e1071 中经过训练的 SVM 进行预测,但我的数据包含一些缺失值 (NA)。

当该实例有任何缺失值时,我希望返回的预测为 NA。我尝试使用 na.action = na.pass 如下,但它给了我一个错误“名称错误(ret2)

如果我使用 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)))

【问题讨论】:

  • 您可以将所有有效案例分配回tmp 集合中的预测变量 - tmp[complete.cases(tmp), "predict"] &lt;- predict(model, newdata=tmp[complete.cases(tmp),]) 或等效项。
  • 谢谢,太好了。鉴于我必须使用 SVM 并且想要 NA 而不是插补,这是要走的路。

标签: r svm


【解决方案1】:

如果您熟悉 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)
  • CART 或序数响应 (rpartScore)

如果您仍然坚持使用 SVM,您可以使用同一包中 preProccess function 中的 knnImpute 选项,这应该可以让您预测所有观察结果。

【讨论】:

    【解决方案2】:

    您可以将所有有效案例分配回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
    # ...
    

    【讨论】:

      猜你喜欢
      • 2015-03-03
      • 2019-02-15
      • 1970-01-01
      • 2016-03-13
      • 2018-11-01
      • 1970-01-01
      • 2019-05-14
      • 2018-07-22
      • 1970-01-01
      相关资源
      最近更新 更多