Лассо или Ридж для коррелированных переменных

Я пытаюсь понять цитату: "При наличии коррелированных переменных регрессия гребня может быть предпочтительным выбором". Допустим, у нас есть переменные a1,a2,b1,c2 и 2 a"s коррелированы. Если мы используем Lasso, то это может устранить один из "s. И Лассо, и Ридж будут делать усадку. Похоже, Лассо может быть лучше в этих условиях. Но цитата говорит, что Ридж лучше. Это неправильная цитата или я что-то упустил?(Может быть, слишком просто)

2 ответа

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

Чтобы дать краткий ответ на ваш вопрос:

Всегда хорошо иметь некоторую регуляризацию, поэтому по возможности избегайте "простой" линейной регрессии. Ridge можно считать хорошей регуляризацией по умолчанию, однако, если вы считаете, что из вашего набора функций только некоторые функции действительно полезны, вам следует рассмотреть LASSO Regularization или, в качестве альтернативы, Elastic Net (пояснено ниже). Эти два метода имеют тенденцию уменьшать "бесполезные" весовые характеристики до нуля.

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

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

Уравнение1: Упругое сетевое уравнение

Гиперпараметр коэффициента смешивания r находится в диапазоне от 0 до 1 и определяет степень использования штрафов L2 или L1 (0 - ребро, 1 - лассо).

Наконец, библиотека Python Scikit-Learn сделала ElasticNet доступной для легкой реализации. Например:

from sklearn.linear_model import ElasticNet
elastic_net= ElasticNet(alpha= 0.1, l1_ratio= 0.5) # l1_ratio is the mix r
elastic_net.fit(X,y)

Если вы ищете более математическое объяснение того, как регуляризация LASSO работает по сравнению с регуляризацией Риджа, я рекомендую вам обратиться к книге Аурелиана Джерона " Практические занятия по машинному обучению" или этому ресурсу Стэнфорда по регуляризации (четкие параллели пакетам MATLAB): https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

Вот график, сгенерированный питоном, сравнивающий две функции штрафов и затрат:

Сравнение регуляризации LASSO и Ridge: на LASSO мы можем наблюдать, что траектория Batch Gradient Descent имеет небольшой отскок по желобу к концу. Это происходит главным образом из-за того, что крутизна наклона резко изменяется при O_2 = 0. Скорость обучения должна постепенно уменьшаться, чтобы приблизиться к глобальному минимуму (* рисунок получен согласно руководству Hands-on-ML

На LASSO мы можем наблюдать, что путь Пакетного градиентного спуска имеет небольшой отскок через желоб к концу. Это происходит главным образом из-за того, что крутизна наклона резко изменяется при O_2 = 0. Скорость обучения должна постепенно уменьшаться, чтобы приблизиться к глобальному минимуму (рисунок, полученный в соответствии с руководством Hands-on-ML).

Надеюсь, это поможет!

Вообще нет предпочтительного подхода. LASSO, скорее всего, приведет некоторые коэффициенты к 0, тогда как Ridge не уменьшит их значения.

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

Если возможно, почему бы не реализовать оба подхода и не выполнить перекрестную проверку, чтобы увидеть, какие из них дают лучшие результаты?

Наконец, я бы также порекомендовал изучить Elastic Net, который является своего рода гибридом LASSO и Ridge.

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

--ISL

Другие вопросы по тегам