Я использую R-пакет randomForest, и чтобы понять важность переменных, мы можем исследовать varImpPlot, который показывает среднее уменьшение Джини. Я подробно изучил Случайный Лес и хорошо знаю, как эта модель работает в деталях, я не могу полностью понять, как рассчитывается среднее уменьшение Джини, или, скорее, почему оно зависит от численности населения.
![enter image description here](https://i.stack.imgur.com/kElrY.png)
Когда мы вычислили индекс Джини, мы можем агрегировать среднее уменьшение Джини по следующей формуле (деленной на количество деревьев):
![enter image description here](https://i.stack.imgur.com/oEuPs.png)
Я понимаю, что при большем населении в каждом дереве будет больше расщеплений, но разве в среднем эти расщепления не должны приводить к очень небольшому уменьшению индекса Джини?
Вот пример кода, показывающий, что я имею в виду (как и ожидалось, количество деревьев не влияет на среднее уменьшение Джини, но популяция оказывает огромное влияние и кажется более или менее линейной с размером популяции):
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 раз при каждом увеличении населения:
![enter image description here](https://i.stack.imgur.com/B294x.png)
![enter image description here](https://i.stack.imgur.com/Qm1Ql.png)
![enter image description here](https://i.stack.imgur.com/PY26d.png)
Я предполагаю, что существует вес, основанный на количестве людей в каждом проведенном разделении. То есть разделение, которое выполняется в первых узлах, которое разделяет 1000 людей весом тяжелее, чем разделение, которое проводится далее по дереву, скажем, 10 люди, я не могу найти это ни в одной литературе, хотя, поскольку кажется, что все расчеты сделаны с учетом доли населения, а не абсолютных чисел.
Что мне не хватает?