通过varImp按重要性提取超过20个变量

6
我正在处理一个包含100多个特征的大型数据集(这些特征都是相关的,因为它们已经被筛选过了;原始数据集有超过500个特征)。我使用caret包中的train()函数和"ranger"方法创建了一个随机森林模型。
问题是:如何提取所有变量的重要性,而不仅仅是前20个最重要的变量?默认情况下,varImp()函数只提供前20个变量的重要性。
以下是一些示例代码(不包括非常庞大的训练集):
library(caret)
rforest_model <- train(target_variable ~ .,
                       data = train_data_set,
                       method = "ranger",
                       importance = "impurity)

以下是提取变量重要性的代码:

varImp(rforest_model)

请注意,在这种情况下,importance()无法正常工作:importance(rforest_model)会导致以下错误信息:“Error in UseMethod("importance") : no applicable method for 'importance' applied to an object of class "c('train', 'train.formula')"” - Flavio Abdenur
1个回答

20

varImp函数提取所有变量的重要性(即使它们未被模型使用),它只打印出前20个变量。考虑以下示例:

library(mlbench) #for data set
library(caret)
library(tidyverse)

set.seed(998)
data(Ionosphere)

rforest_model <- train(y = Ionosphere$Class,
                       x = Ionosphere[,1:34],
                       method = "ranger",
                       importance = "impurity")

nrow(varImp(rforest_model)$importance) #34 variables extracted

让我们来检查它们:

varImp(rforest_model)$importance %>% 
  as.data.frame() %>%
  rownames_to_column() %>%
  arrange(Overall) %>%
  mutate(rowname = forcats::fct_inorder(rowname )) %>%
  ggplot()+
    geom_col(aes(x = rowname, y = Overall))+
    coord_flip()+
    theme_bw()

enter image description here

请注意,V2在这个数据集中是一个方差为零的特征,因此它的重要性为0,模型不会使用它。


谢谢!这个完美地解决了问题。(我已经尝试了几乎所有可能的varImp和importance组合,除了varImp(rforest_model)$importance哈哈) - Flavio Abdenur
@Flavio Abdenur 很高兴能帮忙。如果答案解决了您的问题,请考虑将其标记为已接受(https://stackoverflow.com/help/someone-answers)。 - missuse
完成了,@missuse。我是Stackoverflow上的新手,还在适应中 :) - Flavio Abdenur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接