【问题标题】:Read multiple rds models and use predict function in lapply?读取多个 rds 模型并在 lapply 中使用预测功能?
【发布时间】:2019-05-23 14:56:24
【问题描述】:

我有一堆模型保存为 .rds,在读取所有模型后,我在测试数据的循环中使用预测函数,显示预测方法错误,但使用单个模型是有效的。 (模型是使用 mlr 包构建的)

我从一个文件夹中读取所有模型并在测试数据上使用 lapply,

files = list.files(path = 'C:/rf_models', pattern = '\\.rds$', full.names = TRUE)
read_models <- do.call("rbind", lapply(files, readRDS))
print(lapply(read_models, function (x) predict(x, newdata = as.data.frame(test_data))))

它显示在错误下方并在控制台中打开浏览[1]>

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "c('FilterWrapper', 'BaseWrapper', 'Learner')"
Called from: predict(x, newdata = as.data.frame(test_data))
Browse[1]>

即使我使用 for 循环

for (i in 1:80){
  pred_models <- predict(read_models[[i]], newdata = as.data.frame(test_data))
}

也显示

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "c('FilterWrapper', 'BaseWrapper', 'Learner')"

所有都在我已经加载了 mlr 库的同一个 R 脚本中完成

如果我单独阅读模型,它正在工作

model <- readRDS("C:/rf_models/rf_models_31.rds")
prediction <- predict(model, newdata = as.data.frame(test_data))
prediction
Prediction: 1 observations
predict.type: prob
threshold: 0=0.50,1=0.50
time: 0.03
  truth prob.0 prob.1 response
1     0   0.12   0.88        1

我希望 pred_models 存储所有预测。

【问题讨论】:

  • 我认为读取多个 .rds 模型无法正常工作
  • 我不确定do.call("rbind") 是否在这里做得很好。为什么不在这里使用一个简单的 lapply?

标签: r mlr


【解决方案1】:

只是使用它工作的文件名加载

files = list.files(path = 'C:/rf_models', pattern = '.rds$', full.names = TRUE)
for (i in 1:80){
  model <- readRDS(files[i])
  prediction <- predict(model, newdata = as.data.frame(test_data))
  print(prediction)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2022-01-26
    相关资源
    最近更新 更多