ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это руководство предназначено для всех, кто уже знаком с линейной алгеброй, линейной регрессией и тем, что делает линейная регрессия и для чего она используется. Многие идеи, лежащие в основе регрессий Риджа и Лассо, основаны на линейной регрессии, поэтому это очень необходимый строительный блок для изучения.

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

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

Ридж-регрессия также называется регуляризацией нормы L2 в машинном обучении и использует штрафной термин лямбда (λ). В гребневой регрессии функция стоимости изменяется путем добавления штрафного члена (λ) к квадрату величины коэффициентов следующим образом:

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

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

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

Чтобы продолжить пример регрессий Риджа и Лассо в действии, я буду использовать игрушечный набор данных из SciKit-Learn под названием Диабет. Эти данные состоят из 11 столбцов (10 прогностических атрибутов и 1 целевой переменной) и 442 строк, представляющих каждого отдельного пациента в наборе данных. Дополнительные сведения об отдельных атрибутах приведены ниже:

  • возраст возраст в годах
  • пол,пол пациента
  • ИМТ, индекс массы тела
  • bp среднее артериальное давление
  • s1 tc, общий холестерин сыворотки
  • s2 ldl, липопротеины низкой плотности
  • s3 hdl, липопротеины высокой плотности
  • s4 tch, общий холестерин/ЛПВП
  • s5 ltg, возможно, логарифмический уровень триглицеридов в сыворотке
  • s6 glu, уровень сахара в крови
  • цель, количественная мера прогрессирования заболевания через год после исходного уровня

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

Здесь у нас есть представление наших переменных-предикторов (X) на графике:

Как мы видим, данные действительно уже масштабированы. Я также уже разделил данные от цели и предикторов, но в приведенном ниже блоке кода я сделал это снова. Пока мы этим занимаемся, продолжайте, импортируйте и выполните разделение теста поезда, установите размер теста на 30% и случайное состояние на 42 для воспроизводимости. Помните, что мы хотим протестировать нашу модель на «невидимых» данных, но, поскольку они редко бывают у вас под рукой, вам нужно привыкнуть к идее разделения данных. Набор поездов — это то, что будет использоваться для подгонки и обучения вашей модели, в то время как ваши данные тестирования будут действовать как ваши «невидимые данные» и должны оставаться относительно нетронутыми, пока не придет время протестировать вашу модель. В большинстве случаев вы хотите убедиться, что у вас больше обучающих данных, чем тестовых данных, поэтому 30% — это довольно стандартный размер теста, хотя он меняется в зависимости от поля. Разделение тестов на обучение в самом начале также помогает предотвратить утечку данных*.

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

Теперь мы импортировали наши модели и подогнали их к обучающим данным. Я использую параметры по умолчанию для всех трех. Для моделей хребта и лассо вы можете установить альфа-параметр по своему усмотрению, так как он используется вместо лямбды. Для Sci-Kit Learn альфа-канал по умолчанию для обеих моделей установлен на 1. Теперь давайте снова перейдем к нашим прогнозам, используя тестовые данные.

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

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

Как видите, каждая модель работала довольно плохо, и лучшей оказалась линейная регрессия. Конечно, вы можете настроить свои модели, чтобы увидеть, сможете ли вы получить другую и, надеюсь, лучшую точность, чем в начале. Например, я буду отображать результаты после изменения альфа-параметров Ridge и Lasso на 0,5. и повторный запуск последних нескольких ячеек.

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

В целом регрессии Риджа и Лассо так же просты в использовании в Python, как и линейные регрессии. Конечно, все они имеют разные приложения, и лучший выбор для каждого сценария зависит от проблемы. Если у вас есть большие наборы данных, но вы хотите сохранить все параметры, лучше всего использовать Lasso или Ridge. Для получения дополнительной помощи и информации о том, как эти методы работают в python, а также соответствующей документации, перейдите по ссылкам ниже.

ДОПОЛНИТЕЛЬНЫЕ РЕСУРСЫ:

*Информация об утечке данных — https://machinelearningmastery.com/data-leakage-machine-learning/

Лассо (питон)- https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html

Ридж (питон)- https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html

Линейная регрессия (python) — https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression

Среднеквадратическая ошибка (MSE) - https://statisticsbyjim.com/regression/mean-squared-error-mse/

УДАЧИ!