R tidymodels用tune_race调优随机森林出现arrange()回收错误求解
报错触发原因
核心原因是竞速调优过程中,部分参数组合在交叉验证折叠上返回了空的metrics结果,finetune包的淘汰逻辑读取不到有效指标值,在做数据排序时触发了长度不匹配的报错,具体诱因通常为以下三类:
- recipe中
step_naomit设置了skip = TRUE,重抽样验证集处理时跳过了缺失值删除步骤,如果验证集存在缺失值,会导致ranger模型预测失败,返回空结果,无法计算roc_auc、accuracy指标。 - 单变量分类场景下,
step_smote处理小样本交叉验证折叠时,可能出现某类别样本量不足无法生成合成样本的情况,导致预处理后的验证集为空,后续指标计算失败。 - 旧版本finetune包对空指标结果的容错处理不足,和当前环境的dplyr、tune版本存在兼容性问题。
解决方法
- 优先修改recipe配置,删除
step_naomit的skip = TRUE参数,保证重抽样验证集也会执行缺失值删除逻辑:
rec_1v_s <- data_train %>% recipe(var_class ~ var1) %>% step_naomit(everything()) %>% step_normalize(all_numeric()) %>% step_smote(var_class)
如果确定不需要在验证集做缺失值删除,也可以提前对全数据集做缺失值清洗,避免后续出现空样本的情况。
- 检查交叉验证折叠的样本分布,生成折叠时使用分层抽样,保证每个折叠的
var_class各类样本量都满足SMOTE的运行要求:
set.seed(123) folds <- vfold_cv(data_train, v = 5, strata = var_class)
如果样本本身极度不均衡,可以调低SMOTE的neighbors参数,或者直接替换SMOTE为分类权重调整(比如ranger的class.wt参数),避免小样本折叠预处理失败。
- 测试阶段先关闭并行做串行运行,确认参数配置可行后再开启并行,避免并行环境下的异常信息被屏蔽。
- 上述操作都无效的情况下,升级相关依赖包到最新版本:
install.packages(c("finetune", "tune", "dplyr", "tidymodels"))
内容的提问来源于stack exchange,提问作者Joselina Davyt-Colo
相关产品推荐
相关产品推荐

