r-caret - bagImpute 错误并从 caret 包中预测
问题描述
preProcess
尝试使用包中的功能时出现以下错误caret
。该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"
解决方案
插入符号中的预处理/插补函数仅适用于数值变量。如帮助中所述preProcess
xa 矩阵或数据框。允许使用非数字预测变量,但将被忽略。
您很可能在应该忽略非数值变量的部分中发现了一个错误,该错误会引发无信息错误,而不是忽略它们。
如果删除因子变量,则插补有效
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
是要克服上述限制。
推荐阅读
- react-native - 将 this.state 传递给静态函数
- java - Java 通用类< ? 扩展接口>作为参数
- debugging - 在 Visual Studio 2019 上没有足够的权限在本地系统上附加 w3p 进程?
- reactjs - 下一个 js '_next/static/YzkQBtj6rd9b69Th7lZs0/pages/index.js' 错误
- kubernetes - 删除命名空间并移除发布
- java - Selenium 中的 SearchContext 和 WebDriver 接口有什么区别或它们之间的关系是什么?
- docker - 在两台服务器上的 docker 上运行 ELK 堆栈
- c# - 如何将excel VSTO add in 转换成.xll 直接通过excel添加
- android - 如何在 MySQL 中更改行的列变量时自动更新应用程序的视图
- php - 当 PHP 文件从 bash 脚本运行时,环境变量值未在 PHP 中使用 getenv()