как построить график зависимости RMSE от количества попыток деревьев при упаковке в мешки при использовании train() и перекрестной проверки в r

#r #machine-learning #plot #tree #regression

#r #машинное обучение #сюжет #дерево #регрессия

Вопрос:

Я изучаю этот веб-сайт о методе пакетирования. https://bradleyboehmke.github.io/HOML/bagging.html

Я собираюсь использовать функцию train () с перекрестной проверкой для пакетирования. что-то вроде приведенного ниже.
насколько я понял, nbagg= 200 сообщает r попробовать 200 деревьев, вычислить RMSE для каждого и вернуть количество деревьев (здесь 80 ), для которых достигается наилучший RMSE.
теперь, как я могу увидеть, какие значения RMSE других значений nbagg были получены в этой модели. например, график зависимости RMSE от количества деревьев на этом веб-сайте (начните вводить метод cv и функцию train (), как показано на рисунке ниже)

 ames_bag2 <- train(
  Sale_Price ~ .,
  data = ames_train,
  method = "treebag",
  trControl = trainControl(method = "cv", number = 10),
  nbagg = 200,  
  control = rpart.control(minsplit = 2, cp = 0)
)
ames_bag2
## Bagged CART 
## 
## 2054 samples
##   80 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 1849, 1848, 1848, 1849, 1849, 1847, ... 
## Resampling results:
## 
##   RMSE      Rsquared   MAE     
##   26957.06  0.8900689  16713.14
 

введите описание изображения здесь

Комментарии:

1. решил ли мой ответ вашу задачу?

Ответ №1:

Поскольку пример, которым вы поделились, не полностью воспроизводим, я взял другой пример из mtcars набора данных, чтобы проиллюстрировать, как вы можете это сделать. Вы можете расширить это для своих данных.

Примечание: RMSE, показанный здесь, представляет собой среднее значение из 10 RMSE, поскольку число CV здесь равно 10. Поэтому мы сохраним только это. В приведенном здесь примере также добавлены соответствующие библиотеки. И установить максимальное количество деревьев равным 15, просто для примера.

 library(ipred)
library(caret)
library(rpart)
library(dplyr)
data("mtcars")

n_trees <-1

error_df <- data.frame()

while (n_trees <= 15) {
  
  ames_bag2 <- train(
    mpg ~.,
    data = mtcars,
    method = "treebag",
    trControl = trainControl(method = "cv", number = 10),
    nbagg = n_trees,  
    control = rpart.control(minsplit = 2, cp = 0)
  )
  
  error_df %>%
    bind_rows(data.frame(trees=n_trees, rmse=mean(ames_bag2[["resample"]]$RMSE)))-> error_df
    
  n_trees <- n_trees 1
  
}
 

error_df покажет результат.

 > error_df
   trees     rmse
1      1 2.493117
2      2 3.052958
3      3 2.052801
4      4 2.239841
5      5 2.500279
6      6 2.700347
7      7 2.642525
8      8 2.497162
9      9 2.263527
10    10 2.379366
11    11 2.447560
12    12 2.314433
13    13 2.423648
14    14 2.192112
15    15 2.256778