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

时间:2018-01-02 03:25:38

标签: r r-caret

我正在处理涉及100多个功能的大型数据集(这些功能都是相关的,因为它们已被过滤;原始数据集有500多个功能)。我通过插入符号包中的train()函数创建了一个随机森林模型,并使用" ranger"方法。

这里的问题是:如何按重要性提取所有变量,而不是仅仅前20个最重要的变量? varImp()函数默认只生成前20个变量。

这里有一些示例代码(减去训练集,非常大):

library(caret)
rforest_model <- train(target_variable ~ .,
                       data = train_data_set,
                       method = "ranger",
                       importance = "impurity)

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

varImp(rforest_model)

1 个答案:

答案 0 :(得分:10)

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重要性,并且根本不会被模型使用。