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

我正在处理一个包含超过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)

回答:

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

library(mlbench) #for data setlibrary(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,并且完全未被模型使用。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注