通过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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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