Эластичная сеть

Материал из MachineLearning.

Перейти к: навигация, поиск

Эластичная сеть — модель регрессии с двумя регуляризаторами l1, l2[1].

Содержание

Определение

Пусть известны измерения n объектов. Каждый объект представим в виде пары (x_i, y_i),  x_i \in \mathbb{R}^k,  y_i \in \mathbb{R} . Для удобства будем записывать это в матричном виде: (X, y) . Классическая задача регрессии ставится следующим образом:

\left|y - Xw\right|^2 \to \min_w.

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

\left|y - Xw\right|^2_2 + \lambda_1 \left|w\right|_1 + \lambda_2 \left|w\right|^2_2 \to \min_w.

Частными случаями являются модели лассо (\lambda_2 = 0) и гребневой регрессии (\lambda_1 = 0 ). Для каждого фиксированного \lambda_2 можно перебрать все возможные значения параметра \lambda_1 (поскольку по этому параметру это кусочно-линейная функция с конечным числом точек, в которых она не дифференцируема)[1].

Реализации

  • Matlab: Функция lasso, для задания l2 регуляризации есть дополнительный аргумент Alpha[1].
  • Python: В пакете sklearn есть библиотека linear_model в которой есть класс ElasticNet[1].
  • R: Пакет glmnet[1].

Во всех реализациях используется подход LARS, который как раз и позволяет найти все точки перегиба функционала по  \lambda_1.

Также в Matlab и Python есть соответствующие функции для выбора оптимальных значений параметров по кросс-валидации: в Matlab это все та же функция lasso, в Python это класс ElasticNetCV.

Пример

Изображение: Lasso_and_elastic_net_example.png

Пример использования Lasso и ElasticNet в Python на данных идущих в комплекте с пакетом SkLearn. В данном примере рассматриваются данные о диабетиках. Собраны данные с 442 пациентов у каждого замерено 10 физиологических признаков, среди которых вес, пол, возраст и давление в крови. В качестве целевого признака известна непрерывная величина характеризующая прогрессивность болезни за последний год. Ставится задача предсказания по физиологическим характеристикам человека прогрессивность болезни. Строится две модели \lambda_2 = 0 (Lasso), \lambda_2 = 0.7 (Elastic-Net). На графике изображены значения весов обученной модели в зависимости от коэффициента регуляризации \lambda_1. По графику видно, что веса признаков в эластичной сети в зависимости от L1 регуляризатора более гладкие по сравнению с лассо. Тем не менее можно заметить, что поведение весов очень похоже. Эластичная сеть не так жестко зануляет коэффициенты, то есть они обнулились только в самой левой точке(очень большой регуляризатор).

Ссылки

Личные инструменты