在R的Tidymodels中提取交叉验证各折的OOB误差
解决Tidymodels交叉验证中提取随机森林OOB误差的问题
你的思路方向是对的,只需从提取的ranger引擎对象中进一步取出OOB误差值即可。ranger拟合的随机森林模型里,分类任务的OOB误差存储在$prediction.error属性中,你可以通过以下两种方式获取:
方法一:拟合时直接提取OOB误差
修改control_resamples中的extract函数,直接从模型引擎中取出OOB误差并整理成表格格式,方便后续查看:
rf_fit_rs <- rf_wf %>% fit_resamples( folds, control = control_resamples( verbose=TRUE, save_pred = TRUE, extract=function (x) { mod <- extract_fit_engine(x) # 分类任务下,prediction.error就是OOB误分率 tibble(oob_error = mod$prediction.error) } ) ) # 查看每个折的OOB误差 rf_fit_rs$extracts
方法二:从已拟合结果中事后提取
如果已经运行了你原本的代码,也可以用purrr包从保存的模型引擎中提取OOB误差:
library(purrr) library(tibble) # 提取每个折的OOB误差值 oob_errors <- map_dbl(rf_fit_rs$extracts, ~ .x[[1]]$prediction.error) # 整理成可读性更好的表格 oob_results <- tibble( 折数 = paste0("第", 1:length(oob_errors), "折"), OOB误差 = oob_errors ) print(oob_results)
注意:如果是回归任务,ranger的prediction.error对应OOB均方误差;分类任务则对应OOB误分率,需根据你的任务类型解读结果。
内容的提问来源于stack exchange,提问作者llmspn
相关产品推荐
相关产品推荐

