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

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

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

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

  1. Добавить больше наблюдений
  2. Регуляризация

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

Поскольку добавление большего количества наблюдений занимает много времени и часто не предоставляется, мы будем использовать технику регуляризации, чтобы уменьшить переобучение. Существует несколько методов регуляризации, все они используют одну и ту же концепцию добавления ограничений на веса независимых переменных (кроме theta_0), однако они различаются способом ограничения. Мы рассмотрим три самых популярных метода регуляризации:

  • Регрессия гребня (L2)
  • Регрессия лассо (L1)
  • Регрессия Elastic-Net (смесь L1 и L2)

Мы пробуем другую регуляризацию, используя Набор данных о жилищном строительстве в Мельбурне от Kaggle.

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

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

Как мы и ожидали, высокая производительность на поезде, но плохая по тестовой, что указывает на переоснащение.

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

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

  • α = 0, без ограничений по весу, это просто линейная регрессия
  • α ›0, веса становятся близкими к нулю.

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

Используя возможности sklearn, вот следующий код, использующий регрессию Риджа.

После тестирования различных значений α мы используем значение α, которое обеспечивает лучшую производительность для обучения регрессии Риджа. Pd.Series.idxmin () выводит индекс минимального значения в серии, то есть индекс с минимальным значением RMSE (функция стоимости, которую мы используем, функция стоимости может быть MSE или любой другой).

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

L на восток A абсолютное S повреждение и S выборы O perator ( Лассо) Регрессия, также известная как регуляризация «L1». Единственное различие между термином регуляризации Ridge и Lasso состоит в том, что в регрессии Lasso он добавляет норму L1 вектора веса к функции стоимости, что позволяет регрессии Lasso устранять наименее важные особенности, то есть выполнять автоматический выбор функций. Гиперпараметр α ведет себя так же, поэтому α = 0 - это линейная регрессия.

Lasso также предлагается в sklearn как Lasso, просто замените Ridge () из предыдущего блока кода на Lasso () (без параметра решателя), и мы будем настроены на использование регрессии Lasso.

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

Мы запустим Lasso и Ridge с несколькими значениями α и посмотрим, что произойдет с весами объектов при увеличении α.

Приведенный выше код создает два фрейма данных:

Для каждого столбца α в его строках указаны веса для каждой функции, например, в первой строке указано, что при α = 0,05 вес функции комнат равен 278369, что означает, что это информативная функция, поскольку она высока по сравнению с другими функциями.

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

Действительно, по мере увеличения α лассо уменьшает все больше и больше весов объектов до нуля, однако для Ridge даже с большим α количеством нулей остается неизменным (веса будут уменьшаться, но никогда не достигнем нуля).

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

Наконец, Elastic Net имеет термин регуляризации, который представляет собой просто сочетание условий регуляризации Ridge и Lasso, и их соотношение регулируется соотношением смешивания r. Член регуляризации Elastic Net, добавленный к функции затрат, показан ниже.

Вы можете увидеть, когда

  • r = 0, то член регуляризации Лассо переходит в 0. Elastic Net = Ridge
  • r = 1, член регуляризации хребта = 0. Эластичная сеть = лассо.

Предлагается Sklearn как ElasticNet () и содержит параметр l1_ratio, который представляет собой соотношение смеси r. Его можно использовать, просто заменив Ridge () на ElasticNet () с дополнительным параметром l1_ratio.

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

Надеюсь, вам понравился мой блог, и, пожалуйста, поправьте меня, если есть дезинформация, спасибо! :)

Использованная литература: