Перейти к основному содержимому

Регуляризация в линейной регрессии

Идея регуляризации

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

loss-vs-model-complexity.png

Поэтому важно подобрать сложность модели таким образом, чтобы её сложность соответствовала сложности реальных данных (точка A на графике).

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

Как говорилось во введении в регуляризацию, самым распространённым способом регуляризации является добавление дополнительного слагаемого (регуляризатора R(w)R(\mathbf{w})) в функцию потерь

L(wX,Y)=1Nn=1N(xnTwyn)2+λR(w)minwL(\mathbf{w}|X,Y)=\frac{1}{N}\sum_{n=1}^{N}(\mathbf{x}_n^T\mathbf{w} -y_{n})^2+{\color{red}\lambda R(\mathbf{w})} \to \min_\mathbf{w}

Гиперпараметр λ>0\lambda>0 определяет силу регуляризации.

Популярными способами выбора R(w)R(\mathbf{w}) являются:

  • L2-регуляризация

    R(w)=w22=d=0Dwd2, вариант: R(w)=d=1Dwd2R(\mathbf{w})=\| \mathbf{w} \|_2^2=\sum_{d=0}^D w_d^2,\quad \text{ вариант: }\,R(\mathbf{w})=\sum_{d={\color{red}1}}^D w_d^2
  • L1-регуляризация

R(w)=w1=d=0Dwd, вариант: R(w)=d=1DwdR(\mathbf{w})=\| \mathbf{w} \|_1=\sum_{d=0}^D \vert w_d \vert, \quad \text{ вариант: }\,R(\mathbf{w})=\sum_{d={\color{red}1}}^D |w_d|
  • ElasticNet-регуляризация
R(w)=αw22+(1α)w1,α[0,1]R(\mathbf{w})=\alpha \| \mathbf{w} \|_2^2 +(1-\alpha) \| \mathbf{w} \|_1,\quad \alpha\in[0,1]

При регуляризации всех весов, но без смещения w0w_0, регуляризация будет смещать прогнозы модели в сторону константного прогноза, давая в среднем несмещённый прогноз даже с случае очень сильной регуляризации (высокого значения λ\lambda). Если же и смещение будет подвергаться регуляризации, то прогнозы модели будет смещаться в сторону нуля. Поэтому вариант не подвергать смещение w0w_0 регуляризации является более предпочтительным.

Особенности решения с регуляризацией

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

Линейная регрессия с L2-регуляризацией называется гребневой регрессией (ridge regression), а с L1-регуляризацией - лассо-регрессией (LASSO, Least Absolute Shrinkage and Selection Operator).

Сравнительные достоинства L1 и L2 регуляризации были приведены ранее.

Вкратце напомним, что L1-регуляризация может выдавать оптимальное решение, в котором часть весов будет в точности равна нулю. В контексте линейной регрессии это означает автоматический отбор признаков, поскольку признаки при нулевых коэффициентах вообще не будут оказывать влияния на прогнозы модели. Чем выше гиперпараметр λ\lambda, тем больше признаков будет отброшено из модели. Его полезно варьировать для обнаружения самых значимых признаков для прогнозирования.

L2 регуляризация, в свою очередь, способствует более равномерному распределению весов по признакам и более полному учёту входной информации.

ElasticNet-регуляризация обладает обоими свойствами и требует задания дополнительного гиперпараметра α[0,1]\alpha\in[0,1].

Гиперпараметр λ\lambda обычно подбирают по прогнозам на валидационной выборке или используя кросс-валидацию по логарифмической сетке значений [106,105,...105,106][10^{-6},10^{-5},...10^5,10^6]. Найдя наилучшее значение, его можно уточнить по более мелкой сетке в окрестности найденного значения.

Решение для линейной регрессии с L1 и ElasticNet регуляризацией находится численными методами, а для гребневой регрессии (L2 регуляризация) его можно найти аналитически.

Будет ли изменение масштаба признаков (после перенастройки модели с новым масштабом) влиять на решение линейной регрессии с регуляризацией?

Да, будет. Например, если признак уменьшим в 100 раз, то соответствующий коэффициент при признаке будет стремиться к увеличению в 100 раз, однако регуляризация не даст в полной мере это реализовать.

Пример запуска в Python

Использование гребневой регрессии:
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_absolute_error

X_train, X_test, Y_train, Y_test = get_demo_regression_data()
model = Ridge(alpha=1) # инициализация модели, alpha-вес при регуляризаторе
model.fit(X_train,Y_train) # обучение модели
Y_hat = model.predict(X_test) # построение прогнозов
print(f'Средний модуль ошибки (MAE): {mean_absolute_error(Y_test, Y_hat):.2f}')

Больше информации. Полный код.

Использование LASSO регрессии:
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_absolute_error

X_train, X_test, Y_train, Y_test = get_demo_regression_data()
model = Lasso(alpha=1) # инициализация модели, alpha-вес при регуляризаторе
model.fit(X_train,Y_train) # обучение модели
Y_hat = model.predict(X_test) # построение прогнозов
print(f'Средний модуль ошибки (MAE): {mean_absolute_error(Y_test, Y_hat):.2f}')

Больше информации. Полный код.

Регуляризация зашумлением входов

Альтернативным способом регуляризации является обучение на признаках, к которым добавлен случайный шум δRD\mathbf{\delta}\in \mathbb{R}^D. Это заставляет модель уменьшать веса, чтобы не допустить большой ошибки прогнозирования, если добавляемый шум окажется велик. При этом при применении модели шум не добавляется.

Шум удовлетворяет двум свойствам:

  • нулевое мат. ожидание: Eδ=0\mathbb{E}\mathbf{\delta}=0,

  • нескореллированные компоненты, каждая из которых имеет дисперсию λ\lambda:

cov(δ)=E{δδT}=λI,\text{cov}(\mathbf{\delta})=\mathbb{E}\{\mathbf{\delta}\mathbf{\delta}^T\}=\lambda I,

где II - единичная матрица.

Если усреднять по всевозможным реализациям шума, то получим, что зашумление признаков эквивалентно L2L_2 регуляризации.

Доказательство эквивалентности
L(w)=E{1Ni=1N(yiy^i)2}=E{1Ni=1N(yi(xi+δi)Tw)2}=E{1Ni=1N((yixiTw)δiTw)2}=E{1Ni=1N(yixiTw)22δiTw(yixiTw)+wTδiδiTw}=E{1Ni=1N(yixiTw)2}2E{δiTw(yixiTw)}+E{wTδiδiTw}=1Ni=1N(yixiTw)2+λw22,\begin{align*} L(\mathbf{w}) &= \mathbb{E} \left\{ \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y}_i)^2 \right\} = \mathbb{E} \left\{ \frac{1}{N} \sum_{i=1}^N (y_i - (\mathbf{x}_i+\mathbf{\delta}_i)^T \mathbf{w})^2 \right\} \\ &= \mathbb{E} \left\{ \frac{1}{N} \sum_{i=1}^N ((y_i - \mathbf{x}_i^T \mathbf{w})-\mathbf{\delta}_i^T \mathbf{w})^2 \right\} \\ &= \mathbb{E} \left\{ \frac{1}{N} \sum_{i=1}^N (y_i - \mathbf{x}_i^T \mathbf{w})^2 - 2 \mathbf{\delta}_i^T \mathbf{w} (y_i - \mathbf{x}_i^T \mathbf{w}) + \mathbf{w}^T \mathbf{\delta}_i \mathbf{\delta}_i^T \mathbf{w} \right\} \\ &= \mathbb{E} \left\{ \frac{1}{N} \sum_{i=1}^N (y_i - \mathbf{x}_i^T \mathbf{w})^2 \right\} - 2 \mathbb{E} \left\{ \mathbf{\delta}_i^T \mathbf{w} (y_i - \mathbf{x}_i^T \mathbf{w}) \right\} + \mathbb{E} \left\{\mathbf{w}^T \mathbf{\delta}_i \mathbf{\delta}_i^T \mathbf{w} \right\} \\ &=\frac{1}{N} \sum_{i=1}^N (y_i - \mathbf{x}_i^T \mathbf{w})^2 + \lambda \|\mathbf{w}\|_2^2, \end{align*}

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