Настройка гиперпараметра с использованием пакета MLR - PullRequest
0 голосов
/ 28 июня 2018

Я хочу настроить гиперпараметры для случайного леса, используя пакет MLR. У меня есть несколько вопросов:

1) Как мне решить, какой из параметров мне следует настроить? Я что-то слышал о том, чтобы поддерживать num.trees как можно выше в вычислительном отношении и настраивать mtry? (Хотя я не могу найти что-либо в Интернете, подтверждающее это)

2) Каким должен быть мой диапазон настройки mtry? Здесь хорошее эмпирическое правило между 0 и 1/3 параметра? Если да, то как бы я интегрировал это в приведенный ниже код, если бы у меня были разные наборы данных (то есть, что я бы написал вместо нижнего = 0 и верхнего = 10)?

3) И наконец, имеет ли смысл создавать ученика дважды, один раз с помощью функции makeLearner, где я устанавливаю параметр в par.vals, а затем один раз с помощью функции makeTuneWrapper? Не перезаписывает ли это тогда?

learnerRF = makeLearner("regr.ranger", par.vals = list("num.trees" = 5000)) 
parsRF = makeParamSet(
  makeIntegerParam("mtry", lower = 0 , upper = 10), 
)
tuneRF = makeTuneControlGrid() 
inner = makeResampleDesc("CV", iters = 10)
learnerRF = makeTuneWrapper(learnerRF, resampling = inner, par.set = parsRF,control = tuneRF, show.info = FALSE) 

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Вы можете заглянуть в эти две статьи, которые пытаются ответить на ваши вопросы:

http://jmlr.org/papers/v18/17-269.html

https://arxiv.org/abs/1804.03515

tuneRanger - пакет, специально предназначенный для настройки случайного леса в R.

0 голосов
/ 28 июня 2018

Ответ на 1 и 2 одинаков - столько, сколько вы можете себе позволить в вычислительном отношении, то есть сделайте количество параметров и их диапазонов как можно большим. Это обеспечит максимально возможный выигрыш, учитывая наибольшее количество параметров конфигурации.

Что касается 3, вам не нужно создавать отдельного ученика перед вызовом makeTuneWrapper() (и нет никакого смысла устанавливать параметры там, которые вы позже настраиваете). Вы можете сделать оба за один шаг, как это:

learnerRF = makeTuneWrapper("regr.ranger", resampling = inner, par.set = parsRF, 
                            control = tuneRF, show.info = FALSE)
...