Всегда ли лучше использовать весь набор данных для обучения окончательной модели?

24

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

Мой вопрос: всегда ли это лучше? Что, если производительность действительно ухудшается?

Например, давайте предположим случай, когда модель получает около 65% при классификации подмножества тестирования. Это может означать, что либо модель обучена недостаточно, либо что подмножество тестирования состоит из выбросов. В последнем случае тренировка с ними окончательной модели снизит ее производительность, и вы узнаете об этом только после ее развертывания.

Перефразируя мой начальный вопрос:

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

pcko1
источник

Ответы:

14

После того как вы получили оптимальные гиперпараметры для вашей модели, после обучения, перекрестной проверки и т. Д., Теоретически можно обучить модель на всем наборе данных для развертывания в рабочей среде. Теоретически это будет лучше обобщать.

ОДНАКО вы больше не можете претендовать на статистические данные / производительность на тестовые данные, поскольку у вас больше нет тестового набора данных.

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

Но если бы вы знали целевые значения новых данных, зачем вам сначала тренировать модель?

В целом, я бы сказал, что если у вас достаточно данных с достаточным разнообразием, то следует перетасовать и разделить данные. Обучение 80:20: тест должен быть достаточным для обучения надежной модели и не беспокоиться о проблемах обобщения (если, конечно, вы упорядочите модель).

PyRsquared
источник
+1, спасибо за ответ! кажется случайным перемешиванием набора данных перед разделением на 80/20, вероятно, заставляет нас чувствовать себя «статистически» уверенно (:
pcko1
2
Предполагается, что производительность вашего тестового набора будет распространена на всю совокупность, если вы сделали это правильно. Хотя у вас нет тестового набора после применения вашего метода ко всему набору данных, производительность ваших исходных перекрестно проверенных наборов поездов / тестов является объективной оценкой производительности вашего алгоритма обучения. В этом весь смысл CV - не для обучения или параметризации модели, а для оценки эффективности процесса построения модели. Ваша производительность на любых тестовых наборах до моделирования с полными данными - это ваша оценка производительности на полных данных.
Ядерный Ван
13

Интересный вопрос. Я лично не видел это для продуктов, идущих в производство, но понимаю логику.

Теоретически, чем больше данных увидит ваша развернутая модель, тем лучше ее обобщить. Поэтому, если вы обучили модель на полном наборе имеющихся у вас данных, она должна обобщать лучше, чем модель, которая видела только, например, наборы поезд / вал (например, ~ 90%) из полного набора данных.

Проблема с этим (и причина, по которой мы в первую очередь разделяем данные на обучающие / проверочные / тестовые наборы!) Заключается в том, что мы хотим иметь возможность делать статистические заявления о точности невидимых данных. Как только мы снова переучиваем модель по всем данным, мы уже не можем делать такие заявления.

[Редактировать]

Вот смежный вопрос о перекрестной проверке , где принятый ответ подчеркивает мне подобные вещи и упоминает другие способы ведения дел.


Мы зациклились:

  1. тренировать модель
  2. оцените эффективность на наборе валидации если удовлетворительно, перейдите к шагу 5
  3. изменить модель
  4. перейти к шагу 1
  5. оценить производительность на тестовом наборе
  6. Представленная модель с точностью теста, найденной в шаге 5

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

Проверка работоспособности будет состоять в том, чтобы снова протестировать окончательную повторно обученную модель на исходном тестовом наборе; ожидая, что результаты будут выше, чем когда-либо, когда модель увидела только набор «поезд / вал», потому что она действительно видела тестовый набор во время тренировки. Это не даст мне уверенности на 100%, что эта окончательная модель превосходит все будущие, но, по крайней мере, она настолько хороша, насколько это возможно с данными.

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

n1k31t4
источник
+1, спасибо за ваши усилия и за указание на этот пост, я пропустил его! Что касается вашего предложения протестировать модель на всем наборе обучающих данных в конце, я думаю, что вы не получите никакой ценной информации по ее результатам. Просто потому, что алгоритм обучения обычно основан на оптимизации функций стоимости, поэтому обученная модель является оптимальной с учетом данных обучения. Низкая точность данных о поездах не означает, что они не оптимальны, а просто означает, что они просто не могут работать лучше, учитывая этот набор данных и выбранную архитектуру алгоритма. Вы не можете сделать вывод о его внешней валидности.
pcko1
1
Пожалуйста! Я полностью согласен с вашим утверждением (хотя я и сказал проверять окончательную обученную модель на исходных данных испытаний , а не на обучении). В любом случае, я все еще хотел бы видеть, что окончательная модель не сделала чего-то совершенно неожиданного. Теория и практика не всегда совпадают :)
n1k31t4
6

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

Это требует некоторого привыкания, но это то, что вам нужно, чтобы освоиться. Когда вы говорите: «Что, если производительность действительно ухудшается?», Ответ уверен, что это может произойти. Фактическая производительность может быть хуже, чем вы предполагали / прогнозировали. Это также может быть лучше. Оба возможны. Это неизбежно. Существует некоторая неотъемлемая, непреодолимая неопределенность.

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

Вы не можете позволить этому обездвижить вас. Тот факт, что можно сделать хуже, чем вы предсказывали, не является причиной, чтобы избежать развертывания в производстве модели, обученной на данных. В частности, это также возможно сделать плохо, если вы этого не сделаете. Вполне возможно, что модель, обученная по всем данным (поезд + проверка + тест), будет хуже, чем модель, обученная только на части поезд + проверка. Также возможно, что это будет лучше. Поэтому вместо того, чтобы искать гарантию, мы должны спросить себя: что дает нам наилучшие шансы на успех? Что наиболее вероятно будет наиболее эффективным?

И в этом случае, когда вы хотите развернуть в производство, лучшее, что вы можете сделать, это использовать все доступные вам данные. С точки зрения ожидаемой производительности, использование всех данных не хуже, чем использование некоторых данных, и потенциально лучше. Таким образом, вы можете также использовать все доступные вам данные для обучения модели при построении производственной модели. Все может пойти плохо - всегда можно получить неудачу, когда вы используете статистические методы - но это дает вам наилучший шанс, что все пойдет хорошо.

В частности, стандартная практика выглядит следующим образом:

  1. Зарезервируйте некоторые из ваших данных в длительном тестовом наборе. Не существует жесткого правила о том, какую долю использовать, но, например, вы можете зарезервировать 20% для набора тестов и оставить оставшиеся 80% для обучения и проверки. Обычно все разбиения должны быть случайными.

  2. Затем используйте данные обучения и проверки, чтобы опробовать несколько архитектур и гиперпараметров, экспериментируя, чтобы найти лучшую модель, какую только сможете. Возьмите 80%, оставленные для обучения и проверки, и разбейте их на обучающий набор и проверочный набор, обучите модель, используя обучающий набор, а затем измерьте ее точность на проверочном наборе. Если вы используете перекрестную проверку, вы будете делать это разделение много раз и усреднять результаты по набору проверки; в противном случае вы сделаете один сплит (например, 70% / 30% от 80%, или что-то в этом роде) и оцените производительность на наборе проверки. Если у вас есть много гиперпараметров, попробуйте сделать это один раз для каждого варианта настройки гиперпараметра. Если вам нужно попробовать много архитектур, сделайте это для каждой подходящей архитектуры. Вы можете повторить это, используя то, что вы

  3. Когда вы довольны, вы замораживаете выбор архитектуры, гиперпараметров и т. Д. Теперь ваши эксперименты завершены. Как только вы достигнете этой точки, вы никогда не сможете попробовать какие-либо другие варианты снова (без получения нового нового набора тестов) - так что не переходите к этой точке, пока не будете уверены, что готовы.

  4. Когда вы будете готовы, тогда вы обучаете модель на полном наборе обучения + проверки (то есть 80%), используя архитектуру и гиперпараметры, которые вы выбрали ранее. Затем измерьте его точность на удерживаемом тестовом наборе. Это ваша оценка / прогноз того, насколько точным будет этот подход к моделированию. Вы получаете один номер здесь. Это то, что есть: если вы не довольны им, вы не можете вернуться к шагам 1 и 2 и провести больше экспериментов; это было бы недействительным.

  5. Наконец, для производственного использования вы можете обучить модель на всем наборе данных, обучении + проверке + наборе тестов и использовать ее в производственном использовании. Обратите внимание, что вы никогда не измеряете точность этой производственной модели, поскольку у вас нет оставшихся данных для этого; Вы уже использовали все данные. Если вы хотите оценить, насколько хорошо он будет работать, вы имеете право использовать оценочную точность, полученную на шаге 4, в качестве прогноза того, насколько хорошо он будет работать в производстве, поскольку это лучший из доступных прогнозов его будущей производительности. Как всегда, никаких гарантий нет - это только лучшая оценка, возможная с учетом имеющейся у нас информации. Вполне возможно, что это может быть хуже, чем вы предсказывали, или лучше, чем вы предсказывали - это всегда так.

DW
источник
+1 за усилия, хотя я не полностью согласен :) например, когда вы упоминаете «С точки зрения ожидаемой производительности, использование всех данных не хуже, чем использование некоторых данных, и потенциально лучше». Я не вижу причины этого. С другой стороны, второй момент, который вы упоминаете, кажется очень важным, перекрестная проверка! по сути, вы тренируетесь / проверяете все образцы, поэтому, вероятно, вы отклоняете выбросы в выбранной конечной модели. Спасибо за Ваш ответ.
pcko1
@ pcko1, принцип прост. Если у вас есть данные, вы должны использовать все это или некоторые из них? Зачем? Может быть, когда мы получаем данные, прежде чем что-то делать, мы должны просто взять 10% и выбросить их, и никогда не смотреть на них. На самом деле, если выбросить что-то хорошо, то выбросить еще лучше, поэтому, возможно, нам следует выбросить все наши данные. Это абсурдно, верно? Зачем? Посмотрите, сможете ли вы выяснить, почему, а затем попробуйте применить это в этой ситуации. Надеюсь, это заставляет задуматься!
DW
3

Одна из причин наличия набора данных состоит в том, чтобы избежать переобучения. Если вы используете перекрестную проверку, вы по существу позволяете всему набору данных действовать в качестве обучающего набора, но переподготовка не позволит вам проверить, есть ли признаки переобучения. Я полагаю, что в любом случае (перекрестная проверка или переподготовка со всем набором данных) не должно кардинально изменить ваш результат (по моему необразованному предположению), но вы не сможете выполнить настройку гиперпараметра или проверить производительность вашей модели, поскольку вы этого не сделаете есть тестовый набор. Трудно сказать, окажется ли это лучше, но я думаю, что единственный способ узнать это - сделать A / B из двух моделей на основе реальных данных с течением времени.

Лирик
источник