каретка - результаты окончательной модели случайного леса зависят от настройки сетки для mtry - PullRequest
0 голосов
/ 01 октября 2019

Я хочу исследовать влияние переменной на мою переменную отклика данных, которые я анализирую. Пакет каретки в R дает возможность настроить параметры модели на основе, например, перекрестной проверки, для которой можно определить сетку настройки. Однако я заметил, что результаты модели окончательной модели зависят от выбора сетки настройки для параметра настройки mtry . Из документации я подумал, что окончательная модель будет равна радиочастотной модели с использованием bestTune, независимо от тестируемого диапазона настройки, поэтому я удивлен, наблюдая это. Похоже, что у последней модели есть другие модели в памяти. К сожалению, это также влияет на значения переменных и результаты перекрестной проверки, которые я хочу исследовать. Итак, мой вопрос: я неправильно понял метод? Может кто-нибудь объяснить это наблюдение? Или это ошибка в пакете карет?

Минимальный пример:

library(caret)   # current version 6.0-84

set.seed(234)
data <- data.frame(replicate(10, rnorm(n = 100)))

train_control <- trainControl(method="repeatedcv", number=10, repeats=3, p=0.8,
                              selectionFunction = "tolerance",returnResamp="final", returnData = TRUE)

# tuning grid 1
rfGrid <- expand.grid(mtry=1:8) 

set.seed(234)
modelrf <- train(X1~., data=data, trControl=train_control, ntree=100,
                 method="rf", tuneGrid=rfGrid, importance=TRUE,
                 preProcess=c("center","scale"))

# evaluate
residuals <- data[,"X1"]-modelrf$finalModel$predicted
R2 <- 1 - sum((residuals)^2)/sum((data[,"X1"]-mean(data[,"X1"]))^2)

print(paste("Tuned mtry=", modelrf$bestTune, ", R2=", R2))
varImp(modelrf)

приводит к:

> print(paste("Tuned mtry=", modelrf$bestTune, ", R2=", R2))
[1] "Tuned mtry= 1 , R2= -0.0918368221777204"
> varImp(modelrf)
rf variable importance

    Overall
X7  100.000
X3   81.926
X8   73.912
X9   50.008
X10  46.382
X6   34.118
X2   15.852
X5    3.944
X4    0.000

, в то время как другая сетка настройки приводит к другому результату, даже если bestTune такой же

# tuning grid 2
rfGrid <- expand.grid(mtry=1:5) 

set.seed(234)
modelrf <- train(X1~., data=data, trControl=train_control, ntree=100,
                 method="rf", tuneGrid=rfGrid, importance=TRUE,
                 preProcess=c("center","scale"))

# evaluate
residuals <- data[,"X1"]-modelrf$finalModel$predicted
R2 <- 1 - sum((residuals)^2)/sum((data[,"X1"]-mean(data[,"X1"]))^2)

print(paste("Tuned mtry=", modelrf$bestTune, ", R2=", R2))
varImp(modelrf)

приводит к:

> print(paste("Tuned mtry=", modelrf$bestTune, ", R2=", R2))
[1] "Tuned mtry= 1 , R2= -0.0147000616001627"
> varImp(modelrf)
rf variable importance

     Overall
X8  100.0000
X7   93.9723
X4   92.9581
X6   84.3003
X9   68.4687
X3   64.0240
X10  35.3509
X2    0.5545
X5    0.0000

Почему оба результата отличаются друг от друга?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...