gpt4 book ai didi

r-caret - bagImpute 错误并从 caret 包预测

转载 作者:行者123 更新时间:2023-12-04 04:04:30 25 4
gpt4 key购买 nike

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

可重现的例子:

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"

最佳答案

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

x a matrix or data frame. Non-numeric predictors are allowed but will be ignored.

您很可能在应该忽略非数值变量的部分中发现了一个错误,该错误会抛出一个无意义的错误,而不是忽略它们。

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

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 , 以克服上述限制。

关于r-caret - bagImpute 错误并从 caret 包预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62745430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com