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

问题描述 投票:2回答:1

我正在处理涉及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)
r r-caret
1个回答
11
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.