我正在使用 R 包 randomForest 并且要了解变量的重要性,我们可以研究 varImpPlot ,它显示平均降低基尼系数。我已经详细研究了随机森林,并且非常了解该模型的详细工作原理,关于如何计算平均下降基尼系数,或者更确切地说为什么它取决于人口规模,我无法完全理解。
当我们计算出 Gini 指数时,我们可以通过以下公式(除以树的数量)来汇总平均下降 Gini:
我知道当人口较多时,每棵树中的分裂数量会更多,但这些分裂平均不应该在基尼指数上有很小的下降吗?
这是显示我的意思的示例代码(正如预期的那样,树的数量不会影响平均基尼系数的下降,但人口有很大的影响,并且似乎或多或少与人口规模呈线性关系):
install.packages("randomForest")
library(randomForest)
set.seed(1)
a <- as.factor(c(rep(1, 20), rep(0, 30)))
b <- c(rnorm(20, 5, 2), rnorm(30, 4, 1))
c <- c(rnorm(25, 0, 1), rnorm(25, 1, 2))
data <- data.frame(a = a, b = b, c = c)
rf <- randomForest(data = data, a ~ b + c, importance = T, ntree = 300)
varImpPlot(rf)
a2 <- as.factor(c(rep(1, 200), rep(0, 300)))
b2 <- c(rnorm(200, 5, 2), rnorm(300, 4, 1))
c2 <- c(rnorm(250, 0, 1), rnorm(250, 1, 2))
data2 <- data.frame(a2 = a2, b2 = b2, c2 = c2)
rf2 <- randomForest(data = data2, a2 ~ b2 + c2, importance = T, ntree =
300)
varImpPlot(rf2)
a3 <- as.factor(c(rep(1, 2000), rep(0, 3000)))
b3 <- c(rnorm(2000, 5, 2), rnorm(3000, 4, 1))
c3 <- c(rnorm(2500, 0, 1), rnorm(2500, 1, 2))
data3 <- data.frame(a3 = a3, b3 = b3, c3 = c3)
rf3 <- randomForest(data = data3, a3 ~ b3 + c3, importance = T, ntree =
300)
varImpPlot(rf3)
产生以下这些图,我们看到 x 轴随着人口的每次增加而增加大约 10 倍:
我的猜测是,在进行的每个拆分中都有一个基于人数的权重,也就是说,在第一个节点中进行的拆分,拆分 1000 人的权重比在树下进行的拆分更重,比如 10 人,我尽管在任何文献中都找不到这一点,因为似乎所有计算都是通过考虑人口的比例而不是绝对数字来进行的。
我错过了什么?