Встречается на 16% собеседований по Data Engineer

Что такое регуляризация в машинном обучении

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

Как это работает

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

L1-регуляризация (Lasso)

L1 добавляет штраф, равный сумме абсолютных значений коэффициентов:

python
# Пример L1-регуляризации в sklearn
from sklearn.linear_model import Lasso

lasso = Lasso(alpha=0.1)  # alpha — сила регуляризации
lasso.fit(X_train, y_train)

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

L2-регуляризация (Ridge)

L2 добавляет штраф, равный сумме квадратов коэффициентов:

python
from sklearn.linear_model import Ridge

ridge = Ridge(alpha=1.0)  # alpha — сила регуляризации
ridge.fit(X_train, y_train)

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

Пример

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

python
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Разделение данных
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Без регуляризации
lr = LinearRegression()
lr.fit(X_train, y_train)
pred_lr = lr.predict(X_test)

# С L2-регуляризацией
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
pred_ridge = ridge.predict(X_test)

# С L1-регуляризацией
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
pred_lasso = lasso.predict(X_test)

print(f"MSE без регуляризации: {mean_squared_error(y_test, pred_lr):.3f}")
print(f"MSE с L2: {mean_squared_error(y_test, pred_ridge):.3f}")
print(f"MSE с L1: {mean_squared_error(y_test, pred_lasso):.3f}")

Подводные камни

  • Выбор alpha: слишком маленькое значение почти не влияет на модель, слишком большое — приводит к недообучению. Обычно alpha подбирают с помощью кросс-валидации.
  • Масштабирование признаков: регуляризация чувствительна к масштабу признаков. Перед применением L1/L2 необходимо стандартизировать данные, иначе штраф будет неравномерно распределяться.
  • L1 vs L2: L1 может быть нестабильной при наличии коррелирующих признаков — она выбирает один из них случайным образом. L2 более устойчива в таких случаях.
  • Интерпретация: L1 обнуляет коэффициенты, что упрощает интерпретацию, но может потерять информацию. L2 сохраняет все признаки, но уменьшает их влияние.

Когда использовать

Регуляризация применяется почти всегда при обучении линейных моделей, особенно когда признаков много или есть мультиколлинеарность. L1 предпочтительна, когда нужно автоматически отобрать значимые признаки. L2 — когда все признаки потенциально полезны, но их влияние нужно сгладить. Также регуляризация используется в нейронных сетях (например, dropout — вариант регуляризации), но в контексте линейных моделей чаще говорят о L1 и L2.

Коротко

  • Регуляризация — метод борьбы с переобучением через штраф за сложность модели.
  • L1 (Lasso) обнуляет коэффициенты, полезен для отбора признаков.
  • L2 (Ridge) уменьшает коэффициенты, но не обнуляет их.
  • Гиперпараметр alpha контролирует силу регуляризации, его подбирают кросс-валидацией.
  • Перед регуляризацией признаки нужно масштабировать.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы