Настройка модели с перекрестной проверкой - PullRequest
0 голосов
/ 03 мая 2018

У меня есть объект настройки модели, который подходит для нескольких моделей и настраивает каждую из них, чтобы найти наилучшую комбинацию гиперпараметров для каждой из моделей. Я хочу выполнить перекрестную проверку части настройки модели, и здесь я сталкиваюсь с дилеммой.

Давайте предположим, что я подбираю только одну модель - классификатор случайных лесов и выполняю 5-кратную перекрестную проверку. В настоящее время для первого сгиба я подгоняю модель случайного леса и выполняю настройку модели. Я выполняю настройку модели с помощью пакета dlib. Я вычисляю метрику оценки (точность, точность и т. Д.) И выбираю наилучшую комбинацию гиперпараметров.

Теперь, когда я опускаю второй фолд, мне следует снова настраивать модель? Потому что, если я это сделаю, я получу другую комбинацию гиперпараметров, чем в первом случае. Если я сделаю это в пять раз, какую комбинацию я выберу?

Перекрестные валидаторы, присутствующие в spark и sklearn, используют поиск по сетке, поэтому для каждого сгиба они имеют одинаковую комбинацию гиперпараметров и не должны беспокоиться о том, что комбинации гиперпараметров меняются между сгибами

Выбор наилучшей комбинации гиперпараметров, которую я получаю, когда я опускаю первый сгиб, и использование ее для последующих сгибов звучит неправильно, потому что тогда вся моя настройка модели зависит от того, какой сгиб был пропущен первым. Однако, если я получаю разные гиперпараметры каждый раз, на какой мне рассчитывать?

TLDR:

Если вы выполняете, скажем, настройку модели на основе производной наряду с перекрестной проверкой, ваша комбинация гиперпараметров изменяется, когда вы выполняете итерации по сгибам. Как выбрать лучшую комбинацию? Вообще говоря, как вы используете перекрестную проверку с методами настройки моделей на основе производных.

PS: Пожалуйста, дайте мне знать, если вам нужно больше деталей

1 Ответ

0 голосов
/ 03 мая 2018

Это скорее комментарий, но он слишком длинный для этого, поэтому вместо этого я публикую его в качестве ответа.

Перекрестная проверка и настройка гиперпараметра - это две разные вещи. Перекрестная проверка выполняется для того, чтобы получить представление об ошибке прогнозирования вне выборки модели. Вы можете сделать это, имея выделенный набор валидации, но это поднимает вопрос, если вы переоснащаетесь к этим конкретным данным валидации. Как следствие, мы часто используем перекрестную проверку, когда данные разбиваются на k сгибов, и каждый сгиб используется один раз для проверки, а остальные - для подгонки. После того как вы сделали это для каждого сгиба, вы объединяете ошибки прогнозирования в одну метрику (например, усредняя ошибку по каждому сгибу). Затем это говорит вам кое-что об ожидаемой производительности для невидимых данных для данного набора гиперпараметров.

Как только вы получите эту единственную метрику, вы можете изменить свой гиперпараметр, повторить и посмотреть, не получите ли вы меньшую ошибку с новым гиперпараметром. Это часть настройки hpyerparameter. Часть CV предназначена только для получения хорошей оценки производительности модели для данного набора гиперпараметров, т.е. вы не меняете гиперпараметры «между» сгибами.

Я думаю, что одним из источников путаницы может быть различие между гиперпараметрами и параметрами (иногда их также называют «весами», «важностями признаков», «коэффициентами» и т. Д.). Если вы используете подход на основе градиентной оптимизации, они меняются между итерациями до тех пор, пока не будет достигнута сходимость или правило остановки. Это, однако, отличается от поиска гиперпараметров (например, сколько деревьев нужно посадить в случайном лесу?).

Кстати, я думаю, что подобные вопросы лучше размещать в разделе Перекрестной проверки или Науки о данных здесь, в StackOverflow.

...