Как использовать функции каретки для достижения тех же результатов, что и для цикла? Классификация Случайный лесной уход

#r #classification #random-forest #cross-validation #r-caret

Вопрос:

Я хочу запустить cv Монте-Карло 100 раз для своих данных, мои данные классифицируются по 2 классам. Я хочу использовать пакет каретки для достижения того же самого, в основном я не понимаю, как усреднить результаты точности, например, с помощью каретки?

 # Initialize data for Binary classification
dataset$ID <- factor(dataset$ID)

# Initialize number of iterations
num_iter=100 

# Vectors to store results
acc_vec<-c()

# Function with for loop

    rf <- function(dataset)
    {
      for (i in 1:num_iter)
      {
        trainIndex <-createDataPartition(dataset$ID, p=0.8,list=FALSE)
        dataset_train <-dataset[trainIndex, ]
        dataset_test <-dataset[-trainIndex, ]
        rf <- randomForest(ID~., data=dataset_train, importance=TRUE) 
        x_test <- dataset_test[, -1]
        y_test <- dataset_test$ID

        predictions <- predict(rf, x_test)

        acc_vec <- append(acc_vec, accuracy(actual= y_test, predicted= predictions))

      }

      print(mean(acc_vec))
    }
 

Ответ №1:

От того же автора caret , есть совершенно новая среда для моделирования под названием tidymodels , которая может быть полезна для упрощения моделирования.

Вот канонический пример, с резюме Монте-Карло.

 library(tidymodels)

 # load some fake data and create train and test
data(cells)
set.seed(123)
cell_split <- initial_split(cells %>% select(-case),  strata = class)

train <- training(cell_split)
test  <- testing(cell_split)
 

Теперь вам нужно настроить рабочий процесс, добавив перекрестную проверку (возможно, вам придется установить ranger — в данном случае — пакет).:

 # first setup your model
rf_spec <- 
  rand_forest(trees = 100) %>% 
  set_engine("ranger") %>% 
  set_mode("classification")
 

Помните, что вы также можете создавать сетки гиперпараметров для настройки.

Теперь вы создаете свою стратегию проверки:

 set.seed(123)
# I've put 10, you can change parameters
cross_val_mc <- mc_cv(train, prop = .5, times = 10)
 

Теперь вы определяете свой рабочий процесс:

 set.seed(123)
rf_wf <- 
  workflow() %>%
  add_model(rf_spec) %>%
  add_formula(class ~ .)
 

И соответствовать вашему повторному образцу:

 set.seed(123)
rf_fit_rs <- 
  rf_wf %>% 
  fit_resamples(cross_val_mc)

collect_metrics(rf_fit_rs)

# A tibble: 2 x 6
  .metric  .estimator  mean     n std_err .config             
  <chr>    <chr>      <dbl> <int>   <dbl> <chr>               
1 accuracy binary     0.824    10 0.00308 Preprocessor1_Model1
2 roc_auc  binary     0.896    10 0.00352 Preprocessor1_Model1
 

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

1. @ЛУКА, это как-то помогает?