Различные результаты с помощью randomForest () и randomForest каретки (method = «rf»)

Я новичок в уходе, и я просто хочу убедиться, что я полностью понимаю, что он делает. С этой целью я пытался воспроизвести результаты, полученные из модели randomForest (), с использованием функции traint) для метода method = "rf". К сожалению, я не смог получить совпадающие результаты, и мне интересно, что я пропускаю.

Я также добавлю, что, учитывая, что randomForest использует начальную загрузку для генерации выборок, подходящих для каждого из ntrees, и оценивает ошибку на основе прогнозов «из пакета», я немного не в курсе разницы между указанием «oob» и «boot». "в вызове функции trainControl. Эти параметры дают разные результаты, но ни один из них не соответствует модели randomForest ().

Хотя я читал веб-сайт пакета Caret (http://topepo.github.io/caret/index.html), а также различные вопросы StackOverflow, которые кажутся потенциально актуальными, но я так и не смог понять, почему модель caret method = "rf" дает разные результаты из randomForest (). Большое спасибо за любые идеи, которые вы можете предложить.

Вот воспроизводимый пример, использующий набор данных CO2 из пакета MASS.

library(MASS)
data(CO2)

library(randomForest)
set.seed(1)
rf.model <- randomForest(uptake ~ ., 
                       data = CO2,
                       ntree = 50,
                       nodesize = 5,
                       mtry=2,
                       importance=TRUE, 
                       metric="RMSE")

library(caret)
set.seed(1)
caret.oob.model <- train(uptake ~ ., 
                     data = CO2,
                     method="rf",
                     ntree=50,
                     tuneGrid=data.frame(mtry=2),
                     nodesize = 5,
                     importance=TRUE, 
                     metric="RMSE",
                     trControl = trainControl(method="oob"),
                     allowParallel=FALSE)

set.seed(1)
caret.boot.model <- train(uptake ~ ., 
                     data = CO2,
                     method="rf",
                     ntree=50,
                     tuneGrid=data.frame(mtry=2),
                     nodesize = 5,
                     importance=TRUE, 
                     metric="RMSE",
                     trControl=trainControl(method="boot", number=50),
                     allowParallel=FALSE)

 print(rf.model)
 print(caret.oob.model$finalModel) 
 print(caret.boot.model$finalModel)

Производит следующее:

печать (rf.model)

      Mean of squared residuals: 9.380421
                % Var explained: 91.88

печать (caret.oob.model $ finalModel)

      Mean of squared residuals: 38.3598
                % Var explained: 66.81

печать (caret.boot.model $ finalModel)

      Mean of squared residuals: 42.56646
                % Var explained: 63.16

И код, чтобы посмотреть на важность переменной:

importance(rf.model)

importance(caret.oob.model$finalModel)

importance(caret.boot.model$finalModel)

Ответы на вопрос(1)

Ваш ответ на вопрос