【问题标题】:Error with bagImpute and predict from caret packagebagImpute 出错并从 caret 包中预测
【发布时间】:2020-10-25 22:48:21
【问题描述】:

尝试使用 caret 包中的 preProcess 函数时出现以下错误。 predict 函数适用于 knn 和中值插补,但会导致 bagging 错误。我应该如何编辑我对预测函数的调用。

可重现的例子:

data = iris
set.seed(1)
data = as.data.frame(lapply(data, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.8, 0.2), size = length(cc), replace = TRUE) ]))

preprocess_values = preProcess(data, method = c("bagImpute"), verbose = TRUE)
data_new = predict(preprocess_values, data)

这会产生以下错误:

> data_new = predict(preprocess_values, data)
Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "NULL"

【问题讨论】:

    标签: r-caret imputation


    【解决方案1】:

    插入符号中的预处理/插补函数仅适用于数值变量。 如preProcess的帮助中所述

    x 矩阵或数据框。允许使用非数字预测变量,但将被忽略。

    您很可能在应该忽略非数值变量的部分中发现了一个错误,该错误会引发非信息性错误,而不是忽略它们。

    如果您删除因子变量,则插补有效

    library(caret)
    
    df <- iris
    set.seed(1)
    df <- as.data.frame(lapply(data, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.8, 0.2), size = length(cc), replace = TRUE) ]))
    df <- df[,-5] #remove factor variable
               
    preprocess_values <- preProcess(df, method = c("bagImpute"), verbose = TRUE)
    
    data_new <- predict(preprocess_values, df)
    

    最后一行代码有效,但导致一堆警告:

    In cprob[tindx] + pred :
      longer object length is not a multiple of shorter object length
    

    这些警告不是来自插入符号,而是来自对ipred::bagging 的内部调用,caret::preProcess 在内部调用。这些错误的原因是数据中的实例,当它们被删除时,一行中有 3 个 NA 值

    df <- df[rowSums(sapply(df, is.na)) != 3,]
    
    preprocess_values <- preProcess(df, method = c("bagImpute"), verbose = TRUE)
    
    data_new <- predict(preprocess_values, df)
    

    警告消失。

    您应该查看食谱,特别是 step_bagimpute,以克服上述限制。

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 2017-01-29
      • 2017-08-11
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 2018-05-11
      • 2014-09-27
      • 2014-07-30
      相关资源
      最近更新 更多