Ответ
Основной инструмент борьбы с переобучением в линейных моделях — регуляризация, которая штрафует модель за слишком большие веса.
1. Ridge-регрессия (L2-регуляризация): Добавляет к функции потерь штраф, пропорциональный сумме квадратов весов. Сжимает коэффициенты, но не обнуляет.
from sklearn.linear_model import Ridge
ridge = Ridge(alpha=1.0) # alpha — сила регуляризации
ridge.fit(X_train, y_train)
# Коэффициенты становятся меньше, но не нулевые
2. Lasso-регрессия (L1-регуляризация): Добавляет штраф, пропорциональный сумме модулей весов. Обнуляет коэффициенты у наименее важных признаков, выполняя отбор признаков.
from sklearn.linear_model import Lasso
lasso = Lasso(alpha=0.01, max_iter=10000)
lasso.fit(X_train, y_train)
# Многие коэффициенты будут равны 0
3. ElasticNet:
Комбинация L1 и L2 регуляризации. Параметр l1_ratio контролирует их соотношение.
4. Робастная регрессия: Для защиты от выбросов (крайнего шума) используют модели, менее чувствительные к ним, например, HuberRegressor или RANSAC.
from sklearn.linear_model import HuberRegressor
huber = HuberRegressor(epsilon=1.35) # epsilon определяет, что считать выбросом
huber.fit(X_train, y_train)
5. Предобработка данных: Всегда необходима: масштабирование признаков (StandardScaler) для корректной работы регуляризации и обработка выбросов.