#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. @ЛУКА, это как-то помогает?