Я начал с вашего последнего блока кода и внес некоторые изменения, чтобы иметь функциональный рабочий процесс. Я ответил на ваши вопросы по коду. Я взял на себя смелость дать вам несколько советов и переформатировать ваш код.
## Packages, seed and data
library(tidyverse)
library(tidymodels)
set.seed(123)
df <- read_csv("creditcard.csv")
df <-
df %>%
arrange(-Class) %>%
head(1000) %>%
mutate(Class = as_factor(Class))
## Modelisation
# Initial split
df_split <- initial_split(df)
df_train <- training(df_split)
df_test <- testing(df_split)
Как видите, df_split
возвращает <750/250/1000>
(см. Ниже).
2 ) Чтобы настроить модель xgboost, вам нужно изменить очень мало вещей.
# Models
model_rf <-
rand_forest(mtry = tune(), trees = tune(), min_n = tune()) %>%
set_engine("ranger", importance = "impurity") %>%
set_mode("classification")
model_xgboost <-
boost_tree(mtry = tune(), trees = tune(), min_n = tune()) %>%
set_engine("xgboost", importance = "impurity") %>%
set_mode("classification")
Здесь вы выбираете свою сетку гиперпараметров. Я советую вам использовать неслучайную сетку для оптимального посещения пространства гипермараметров.
# Grid of hyperparameters
grid_rf <-
grid_max_entropy(
mtry(range = c(1, 20)),
trees(range = c(500, 1000)),
min_n(range = c(2, 10)),
size = 30)
Это ваши рабочие процессы, как вы можете видеть, практически ничего не меняется.
# Workflow
wkfl_rf <-
workflow() %>%
add_formula(Class ~ .) %>%
add_model(model_rf)
wkfl_wgboost <-
workflow() %>%
add_formula(Class ~ .) %>%
add_model(model_xgboost)
1) <600/150/750>
означает, что у вас есть 600 наблюдений в вашем тренировочном наборе, 150 в вашем проверочном наборе и в общей сложности 750 наблюдений в исходном наборе данных. Пожалуйста, обратите внимание, что здесь 600 + 150 = 750, но это не всегда так (например, с методами boostrap с повторной выборкой).
# Cross validation method
cv_folds <- vfold_cv(df_train, v = 5)
cv_folds
3) Здесь вы выбираете, какие показатели вы хотите собирать во время настройки, с помощью пакета yardstik.
# Choose metrics
my_metrics <- metric_set(roc_auc, accuracy, sens, spec, precision, recall)
Затем вы можете вычислять различные модели по сетке. Для параметров управления не сохраняйте прогноз и прогресс печати (imho).
# Tuning
rf_fit <- tune_grid(
wkfl_rf,
resamples = cv_folds,
grid = grid_rf,
metrics = my_metrics,
control = control_grid(verbose = TRUE) # don't save prediction (imho)
)
Это некоторые полезные функции для работы с объектом rf_fit
.
# Inspect tuning
rf_fit
collect_metrics(rf_fit)
autoplot(rf_fit, metric = "accuracy")
show_best(rf_fit, metric = "accuracy", maximize = TRUE)
select_best(rf_fit, metric = "accuracy", maximize = TRUE)
Наконец Вы можете подогнать свою модель в соответствии с лучшими параметрами.
# Fit best model
tuned_model <-
wkfl_rf %>%
finalize_workflow(select_best(rf_fit, metric = "accuracy", maximize = TRUE)) %>%
fit(data = df_train)
predict(tuned_model, df_train)
predict(tuned_model, df_test)
4) к сожалению, методы для работы с randomForest
объектами обычно недоступны с parnsnip
выходами
5) Вы можете взглянуть на виньетка о распараллеливании.