R语言使用Caret包获取随机森林各类别变量重要性问题求助
随机森林按类别输出变量重要性解决方法
核心原理
caret包的varImp()默认汇总输出全局变量重要性,你可以直接调用底层randomForest原生函数获取分类别结果,caret训练完成的模型存储在$finalModel字段中,为标准randomForest对象。
操作步骤
- 第一步:调整训练代码(可选,若需要精度下降类重要性)
训练时传入importance = TRUE参数,即可同时保存基尼系数下降、分类精度下降两类重要性指标:odFit = train(x = df_5[,-22], y = df_5$`kpres$cluster`, ntree=20,method="rf",metric = "Accuracy", trControl = control,tuneGrid = tunegrid, importance = TRUE # 新增参数 ) - 第二步:提取分类别变量重要性
调用randomForest原生importance()函数,不指定class参数时默认输出所有类别的对应重要性:# 输出所有类别的变量重要性 all_class_imp <- importance(odFit$finalModel) # 输出指定类别(如第1类)的变量重要性 class1_imp <- importance(odFit$finalModel, class = 1) - 第三步:分类别可视化示例
可通过长表转换+分面绘制每个类别的变量重要性条形图:library(tidyr) library(ggplot2) # 转为数据框并整理格式 imp_df <- as.data.frame(all_class_imp) imp_df$variable <- rownames(imp_df) imp_long <- pivot_longer(imp_df, cols = -variable, names_to = "类别", values_to = "重要性得分") # 分面绘图 ggplot(imp_long, aes(x = 重要性得分, y = reorder(variable, 重要性得分))) + geom_col(fill = "#1f77b4") + facet_wrap(~类别) + labs(y = "变量名称", x = "变量重要性得分") + theme_bw()
内容的提问来源于stack exchange,提问作者Anilaaryan
相关产品推荐
相关产品推荐

