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

Мы будем использовать некоторые из наиболее распространенных решений по переобучению, используя sci-kit learn и примеры кода Tensorflow.

Решения высокого уровня для переобучения

  • Уменьшить сложность модели
  • Регуляризация (корректировка весов)
  • Ансамблевые модели
  • Ранняя остановка
  • Больше данных
  • Перекрестная проверка

Уменьшить сложность модели

Сложность модели можно уменьшить, применив приведенное ниже к модели машинного и глубокого обучения соответственно:

  • Drop Features / уменьшение размерности (с использованием PCA)
  • Отбросьте нейроны (используя Drop Layers)

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

Теперь ты говоришь мне, что я сумасшедший! Разве больше информации не лучше?

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

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

«Автоматический» процесс уменьшения размеров / характеристик может быть выполнен с помощью алгоритма контролируемого машинного обучения Анализ главных компонентов (PCA).

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

Регуляризация

Регуляризация - это практика манипулирования коэффициентами или весами входных данных.

Есть много способов сделать это, при этом некоторые модели построены для включения регуляризации по умолчанию, например, модели регрессионного машинного обучения; LASSO (регуляризация L1) и Ridge (регуляризация L2).

  • Регуляризация L1 - пытается ограничить веса / коэффициенты признаков до нуля (но не совсем нуля).
  • Регуляризация L2 - пытается установить некоторые веса равными нулю, что исключает эти особенности из процесса прогнозирования.

Дополнительный процесс глубокого обучения для регуляризации использует class_weight, который задается при подборе модели.

Ансамбль

Интересный способ преодолеть переоснащение - использовать ансамблевые модели, которые берут модели «слабого ученика» и объединяют их для создания «супер» модели. Это можно сделать тремя способами:

  • Бэггинг - однородные модели запускаются параллельно.
  • Повышение - однородные модели запускаются в сериях
  • Стекирование - сочетание разнородных моделей

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

Повышение аналогично пакетированию, однако модели запускаются линейно (последовательно), в результате чего следующая модель в серии «учится» у предыдущих моделей. Популярные модели, такие как XGboost и ADAboost, используют этот процесс.

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

Важным гиперпараметром классификатора голосования является «жесткое голосование», при котором используется прогноз наивысшей вероятности из всех моделей, или «мягкое голосование», при котором используется среднее.

К сожалению, у нас нет определенного пакета в Tensorflow, который делал бы то же самое, однако мы можем воспроизвести это вручную, запустив несколько моделей глубокого обучения и усреднив результаты. Подробный пример можно найти здесь

Ранняя остановка

Ранняя остановка обычно отмечается в моделях глубокого обучения, где эпохи (итерации модели) останавливаются, когда производительность по данным тестирования / проверки начинает ухудшаться.

Мы можем увидеть пример использования модуля EarlyStopping в Tensorflow, где мы установили очень большое количество эпох.

Мы можем сделать это в машинном обучении, установив параметры в определенных моделях научного обучения, например n_estimators в Random Forest или n_jobs в Линейная регрессия

Больше данных

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

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

Другой способ - проектирование функций, при котором мы получаем дополнительные функции от других. Лучше всего это показано в нашей заявке Kaggle Titanic, где мы извлекаем дополнительные характеристики, такие как длина имени пассажира, титул пассажира (мистер, мисс и т. Д.) , группировка / биннинг функций и т. д.

Перекрестная проверка

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

Затем модель оценивается на предмет того, насколько хорошо она справилась с данными теста, также называемыми «неизвестными данными», поскольку эти данные не использовались при подборе / обучении модели.

Существует множество методов перекрестной проверки, таких как K-свертывание и исключение-один и т. Д. Однако самый простой и наиболее известный метод - удержание; , где часть данных откладывается для более позднего тестирования. Чаще всего это используется с модулем научных материалов train_test_split:

Вывод

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

Пример уменьшения переобучения с использованием слоев Ранняя остановка и Отключение можно найти в нашей Блокноте Kaggle: Борьба с переобучением с помощью слоев Ранняя остановка и выпадение