Эластичная сеть
Материал из MachineLearning.
м |
(→Пример) |
||
Строка 20: | Строка 20: | ||
[[Изображение: Lasso_and_elastic_net_example.png]] | [[Изображение: Lasso_and_elastic_net_example.png]] | ||
- | [http://scikit-learn.org/stable/auto_examples/linear_model/plot_lasso_coordinate_descent_path.html#example-linear-model-plot-lasso-coordinate-descent-path-py Пример использования Lasso и ElasticNet] в Python на | + | [http://scikit-learn.org/stable/auto_examples/linear_model/plot_lasso_coordinate_descent_path.html#example-linear-model-plot-lasso-coordinate-descent-path-py Пример использования Lasso и ElasticNet] в Python на данных идущих в комплекте с пакетом SkLearn. В данном примере рассматриваются данные о диабетиках. Собраны данные с 442 пациентов у каждого замерено 10 физиологических признаков, среди которых вес, пол, возраст и давление в крови. В качестве целевого признака известна непрерывная величина характеризующая прогрессивность болезни за последний год. Ставится задача предсказания по физиологическим характеристикам человека прогрессивность болезни. Строится две модели <tex>\lambda_2 = 0</tex> (Lasso), <tex>\lambda_2 = 0.7</tex> (Elastic-Net). На графике изображены значения весов обученной модели в зависимости от коэффициента регуляризации <tex>\lambda_1</tex>. По графику видно, что веса признаков в эластичной сети в зависимости от L1 регуляризатора более гладкие по сравнению с лассо. Тем не менее можно заметить, что поведение весов очень похоже. Эластичная сеть не так жестко зануляет коэффициенты, то есть они обнулились только в самой левой точке(очень большой регуляризатор). |
+ | |||
== Ссылки == | == Ссылки == | ||
<references /> | <references /> |
Текущая версия
Эластичная сеть — модель регрессии с двумя регуляризаторами l1, l2[1].
Содержание |
Определение
Пусть известны измерения объектов. Каждый объект представим в виде пары , , . Для удобства будем записывать это в матричном виде: . Классическая задача регрессии ставится следующим образом:
- .
В силу неточности измерений данных или каких либо еще ошибок с целью построения наилучшей модели вводят регуляризатор или несколько регуляризаторов. Тогда получается следующая задача оптимизации:
- .
Частными случаями являются модели лассо () и гребневой регрессии (). Для каждого фиксированного можно перебрать все возможные значения параметра (поскольку по этому параметру это кусочно-линейная функция с конечным числом точек, в которых она не дифференцируема)[1].
Реализации
- Matlab: Функция lasso, для задания l2 регуляризации есть дополнительный аргумент Alpha[1].
- Python: В пакете sklearn есть библиотека linear_model в которой есть класс ElasticNet[1].
- R: Пакет glmnet[1].
Во всех реализациях используется подход LARS, который как раз и позволяет найти все точки перегиба функционала по .
Также в Matlab и Python есть соответствующие функции для выбора оптимальных значений параметров по кросс-валидации: в Matlab это все та же функция lasso, в Python это класс ElasticNetCV.
Пример
Пример использования Lasso и ElasticNet в Python на данных идущих в комплекте с пакетом SkLearn. В данном примере рассматриваются данные о диабетиках. Собраны данные с 442 пациентов у каждого замерено 10 физиологических признаков, среди которых вес, пол, возраст и давление в крови. В качестве целевого признака известна непрерывная величина характеризующая прогрессивность болезни за последний год. Ставится задача предсказания по физиологическим характеристикам человека прогрессивность болезни. Строится две модели (Lasso), (Elastic-Net). На графике изображены значения весов обученной модели в зависимости от коэффициента регуляризации . По графику видно, что веса признаков в эластичной сети в зависимости от L1 регуляризатора более гладкие по сравнению с лассо. Тем не менее можно заметить, что поведение весов очень похоже. Эластичная сеть не так жестко зануляет коэффициенты, то есть они обнулились только в самой левой точке(очень большой регуляризатор).