Является ли ранняя остановка H2O только для дерева? - PullRequest
0 голосов
/ 30 сентября 2018

Я читаю следующие два примера

Оба они при настройке поиска по сетке исправляют ntree вместо того, чтобы подавать список ntree, например

[i * 100 for i in range(1, 11)]. 

Вот мой вопрос

  1. Мне интересно, потому что ранняя остановка настроена против ntree?Например, мы можем установить ntree = 1000 и score_tree_interval = 100, тогда он может оценить производительность модели от 100, 200, ... до 1000. Я правильно понимаю?
  2. Но если мой поиск по сетке такжевключить learn_rate и max_depth.Будет ли ранняя остановка также сравниваться с learn_rate и max_depth?Я имею в виду, что в пределах одного и того же числа дерева, например, ntree = 500, когда оно оценивает различную скорость обучения [0,01, 0,015, 0,025, 0,05, 0,1], остановится ли оно где-нибудь в списке скорости обучения?
  3. Вдокумент «stopping_tolerance» (http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/stopping_tolerance.html) описывает, что «модель прекратит обучение после достижения трех событий оценки подряд, в которых значение ошибочной классификации модели не улучшится на 1e-3». Так, каковы три оценкисобытия - это 3 разных числа дерева или одинаковое количество деревьев, но разная скорость обучения?

1 Ответ

0 голосов
/ 05 октября 2018

Как отметил Даррен Кук в комментариях, ранняя остановка для каждой модели, которую вы строите, и ранняя остановка для поиска по сетке.

Для отдельного GBM ntrees (число деревьев) настраивается с ранней остановкой (то есть используя stopping_tolerance, stopping_rounds, stopping_metric, указанный в алгоритме).Вы можете увидеть это, если откроете поток и посмотрите на график истории выигрышей вашей отдельной модели.Вы увидите, что количество деревьев - это ось X.

Для поиска по сетке у вас есть добавленный слой ваших гиперпараметров.Таким образом, если вы установите ntrees = 100 в своей модели GBM, и вы будете использовать сетку для скорости обучения = [0,01, 0,015], вы создадите две модели: одну с ntrees = 100 и скоростью обучения = 0,01, а вторую модель с ntrees = 100 и обучением.показатель = 0,015.И, например, в первой модели каждая итерация будет иметь разное количество деревьев, в то время как скорость обучения будет фиксированной.

Итак, глядя на ваши конкретные вопросы:

  1. да, это правильно

  2. таблица будет видеть, есть ли улучшениямежду вашей разной скоростью обучения (0,01, 0,015 и т. д.) и максимальной глубиной.Итак, опять то, что вы говорите, правильно.Сетка остановится, если она не увидит каких-либо улучшений с разными скоростями обучения и максимальными значениями глубины (т.е. она не будет продолжать строить новые модели).

  3. Так что здесь вам нужно выделитьмодель и сетка поиска.Отдельная модель прекратит сборку (добавление деревьев), если не увидит улучшения после трех событий скоринга (и здесь ваши learn_rate и max_depth будут исправлены, в то время как ntrees изменились).Затем мы выходим к сетке, сетка прекратит строить новые модели, если она не увидит указанное пользователем улучшение между отдельными построенными моделями.

...