Я довольно плохо знаком с R и изучаю некоторые техники машинного обучения. В настоящее время я работаю над настройкой гиперпараметра и, чтобы лучше понять суть вопроса, стараюсь выполнять задачи более вручную, чем нужно. Поэтому я использую тиббл со столбцами списка, где каждая строка содержит, помимо прочего, сгиб перекрестной проверки обучающего набора и определенные значения гиперпараметров алгоритма случайного леса. Вся сетка содержит все их уникальные комбинации в указанном диапазоне.
Модели должны быть построены путем итерации функции ranger
по всем строкам (т. Е. Комбинации сгиб / параметр) и затем сохранены в столбце списка. Для этой цели я использую семейство функций карты пакета purrr.
Проблема заключается в том, что этот подход работает только при отображении данных и одного отдельного параметра ( mtry ) в функцию ranger
с использованием map2
. Я знаю, что мне нужно использовать pmap
при отображении более 2 элементов в функцию. Но это, в отличие от описанного выше случая с двумя элементами, не работает для меня с данными и двумя параметрами ( mtry и min.node.size ) в качестве элементов. Функция pmap
почему-то не может отобразить третий элемент ( min.node.size ) в качестве аргумента функции ranger
, и я получаю следующую ошибку:
"Ошибка в рейнджере (Вид ~., Данные = .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
в этом случае, чтобы модели случайных лесов выполнялись.
С уважением