当包含na.action = na.pass时,caretEnsemble失败

时间:2019-03-01 11:21:42

标签: r machine-learning na r-caret

我想使用R包'caretEnsemble'中的'caretList'函数创建一个集成模型

当我在整体代码中包含代码na.action = na.pass时,我得到了错误

"Error in as.vector(x, "character") : 
  cannot coerce type 'closure' to vector of type 'character'"

据我了解,当您尝试使用R函数作为对象时,会发生此错误。但是我的代码看起来正确,并且我使用相同的代码成功地在R包“插入符”中训练了单独的模型

如果我排除na.action = na.pass,则会收到错误消息

"Error in na.fail.default(list(y = c(2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L,: missing values in object"

如果在排除了所有不完整行(任何观察结果都为na的数据集)上运行模型,则模型将运行。 我的数据集包含19个(所有数字)预测变量,30905行(观测值),其中包含几个na值(某些变量最大为18 000 na)。所以我不想只用完整的行建模。

我的模型代码如下:

set.seed(1269)
    mycontrol<- trainControl(
      method="repeatedcv", number = 5, repeats = 5,
      savePredictions = "final",
      classProbs=TRUE,
      index = createResample(dat$y,25),
      summaryFunction=twoClassSummary
    )

model_list <- caretList(
  y~., data=dat,
  trControl=mycontrol,
  na.action = na.pass,
  methodList=c("ranger","gbm")
  )

我已经检查了数据的结构。预测变量是两类因子,响应变量都是数字或整数。我还使用相同的数据成功地在插入符号中训练了独立模型,所以我怀疑数据是否有问题。

有人对我有可能解决的办法吗?谢谢。

编辑:我在建模之前使用了R包“ DMwR”中的函数“ knnImputation”来估算NA值,而不是将其包括在“预处理”函数/阶段中。现在我的模型正在运行。但是我仍然很想知道为什么会出现这些错误。

0 个答案:

没有答案