Я новичок в R и обучаюсь некоторым методам машинного обучения. В настоящее время я работаю над настройкой гиперпараметров и, чтобы лучше разобраться в этом вопросе, я стараюсь выполнять задачи больше вручную, чем это необходимо. Итак, я использую таблицу со столбцами списка, где каждая строка содержит, среди прочего, свертывание перекрестной проверки обучающего набора и определенные значения гиперпараметров алгоритма случайного леса. Вся сетка содержит все их уникальные комбинации в указанном диапазоне. Модели должны быть построены путем повторения функции ranger
по всем строкам (т. Е. Комбинаций сворачивания / параметров), а затем сохранены в столбце списка. Для этой цели я использую семейство функций карты пакета purrr.
Проблема в том, что этот подход работает только при отображении данных и одного единственного параметра (mtry) на функцию ranger
с помощью map2
. Я знаю, что мне нужно использовать pmap
при сопоставлении более двух элементов функции. Но это, в отличие от случая с двумя элементами, описанного ранее, не работает для меня с данными и двумя параметрами (mtry и min.node.size) в качестве элементов. Функция pmap
каким-то образом не может сопоставить третий элемент (min.node.size) в качестве аргумента функции ranger
, и я получаю следующую ошибку:
«Ошибка в рейнджере (виды ~., data = .x, mtry = .y, min.node.size = .z): объект '.z' не найден»
Это мой код, использующий набор данных радужной оболочки:
### used packages
library(tidyverse)
library(ranger)
library(rsample)
### data preparation
set.seed(123)
initial_split_data <- initial_split(iris, prop = 0.8)
training <- training(initial_split_data)
testing <- testing(initial_split_data)
cv_split <- vfold_cv(training, v = 3)
cv_data <- cv_split %>%
mutate(train = map(.x = splits, .f = ~training(.x)),
validate = map(.x = splits, .f = ~testing(.x)),
validate_species = map(.x = validate, .f = ~.x$Species))
### modeling
## two elements being mapped works:
random_forest_model_mtry <- cv_data %>%
crossing(mtry = seq(2,4,1)) %>%
mutate(model = map2(.x = train, .y = mtry,
.f = ~ranger(Species ~., data = .x, mtry = .y)))
## three elements being mapped does not work:
random_forest_model_mtry_minnode <- cv_data %>%
crossing(mtry = seq(2,4,1),
min.node.size = seq(1,5,1)) %>%
mutate(model = pmap(list(.x = train, .y = mtry, .z = min.node.size),
.f = ~ranger(Species ~., data = .x, mtry = .y, min.node.size = .z)))
Было бы действительно полезно, если бы кто-нибудь мог показать мне, как правильно использовать pmap
в этом случае, чтобы выполнялись случайные модели леса.
С наилучшими пожеланиями