我正在处理涉及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)
答案 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()
请注意,V2是此数据集中的零方差特征,因此它具有0重要性,并且根本不会被模型使用。