使用ranger随机森林模型提取估计值时遇tidy方法报错
解决ranger随机森林模型无法用tidy()提取估计值的问题
在使用tidymodels结合ranger包构建回归模型时,执行tidy()提取特征相关估计值会报错:
Error: No tidy method for objects of class ranger
而相同流程下用LiblineaR引擎的SVM模型可以正常通过tidy()得到特征系数。
核心原因
随机森林属于树集成模型,不存在像线性模型、SVM那样的“特征系数估计值”。这类模型通过决策树的分裂规则拟合数据,衡量特征影响力的指标是特征重要性,而非每个特征对应一个线性系数。
解决方案:提取特征重要性
要获取ranger模型中各分词特征的影响力,需先开启模型的变量重要性计算,再提取对应结果:
修改模型定义,开启变量重要性
在set_engine()中加入importance参数,可选值为"permutation"(置换重要性,可靠性更高)或"impurity"(基于节点不纯度的重要性):rf.spec <- rand_forest(trees = 50) %>% set_engine("ranger", importance = "permutation") %>% set_mode("regression")提取并整理特征重要性
无需使用tidy(),直接从模型对象中提取重要性并整理成tidy格式:# 提取特征重要性并按降序排列 rf_feature_importance <- rf.fit %>% pull_workflow_fit() %>% pluck("fit") %>% # 获取底层ranger模型对象 importance() %>% # 提取重要性数值 tibble(term = names(.), importance = .) %>% # 转换为tibble格式 arrange(-importance)
结果说明
得到的importance列代表特征对模型预测性能的贡献程度,和SVM的estimate(线性系数)含义不同:
- SVM的系数反映特征对预测值的线性影响方向与大小
- 随机森林的特征重要性反映特征在模型分裂过程中对降低预测误差的贡献
内容的提问来源于stack exchange,提问作者I_like_insights
相关产品推荐
相关产品推荐

