【问题标题】:extracting more than 20 variables by importance via varImp通过 varImp 按重要性提取 20 多个变量
【发布时间】:2018-06-11 19:43:49
【问题描述】:

我正在处理一个包含 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) 会导致以下错误消息:UseMethod("importance") 中的错误:'importance' 没有适用的方法应用于“c('train', 'train.formula')”类的对象

标签: r r-caret


【解决方案1】:

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()

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

【讨论】:

  • 谢谢!这很有效(我尝试了几乎所有可能的 varImp 和重要性的组合 except varImp(rforest_model)$importance haha​​)
  • @Flavio Abdenur 很高兴为您提供帮助。如果答案解决了你的问题consider marking as accepted.
  • 完成,@missuse。我是 Stackoverflow 上的新手,所以仍然掌握它:)
猜你喜欢
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2018-04-23
  • 1970-01-01
相关资源
最近更新 更多