Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Робастная регрессия в машинном обучении
Робастная регрессия — это метод линейной регрессии, который устойчив к выбросам (outliers) и аномальным значениям в данных. Вместо минимизации суммы квадратов ошибок (как в OLS), она использует функции потерь, которые меньше чувствительны к экстремальным значениям.
Проблема обычной регрессии
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression, HuberRegressor
X = np.array([[1], [2], [3], [4], [5], [10]])
y = np.array([2, 3.5, 4, 5.5, 7, 50]) # 50 — выброс
lr = LinearRegression()
lr.fit(X, y)
y_pred_lr = lr.predict(X)
print(f"OLS коэффициент: {lr.coef_[0]:.4f}")
print(f"OLS MSE: {np.mean((y - y_pred_lr)**2):.4f}")
Типы робастной регрессии
1. Huber Regressor
from sklearn.linear_model import HuberRegressor
huber = HuberRegressor(epsilon=1.35, max_iter=100)
huber.fit(X, y)
y_pred_huber = huber.predict(X)
print(f"Huber коэффициент: {huber.coef_[0]:.4f}")
print(f"Huber MSE: {np.mean((y - y_pred_huber)**2):.4f}")
2. RANSACRegressor (Random Sample Consensus)
from sklearn.linear_model import RANSACRegressor
ransac = RANSACRegressor(random_state=0, min_samples=3)
ransac.fit(X, y)
y_pred_ransac = ransac.predict(X)
print(f"RANSAC коэффициент: {ransac.estimator_.coef_[0]:.4f}")
print(f"Выбросы: {~ransac.inliers_mask_}")
3. TheilSenRegressor
from sklearn.linear_model import TheilSenRegressor
theilsen = TheilSenRegressor(random_state=0)
theilsen.fit(X, y)
y_pred_theilsen = theilsen.predict(X)
print(f"Theil-Sen коэффициент: {theilsen.coef_[0]:.4f}")
4. Регрессия с весами
lr_weighted = LinearRegression()
weights = np.ones(len(X))
weights[5] = 0.1 # выброс получает малый вес
lr_weighted.fit(X, y, sample_weight=weights)
y_pred_weighted = lr_weighted.predict(X)
print(f"Weighted коэффициент: {lr_weighted.coef_[0]:.4f}")
Сравнение методов
from sklearn.metrics import mean_absolute_error, mean_squared_error
methods = {
'OLS': y_pred_lr,
'Huber': y_pred_huber,
'RANSAC': y_pred_ransac,
'Theil-Sen': y_pred_theilsen,
'Weighted': y_pred_weighted
}
print("Сравнение методов:")
for name, y_pred in methods.items():
mse = mean_squared_error(y, y_pred)
mae = mean_absolute_error(y, y_pred)
print(f"{name}: MSE={mse:.4f}, MAE={mae:.4f}")
Функции потерь в робастной регрессии
- Квадратичная (OLS): очень чувствительна к выбросам (квадрат ошибки)
- Абсолютная (MAE/L1): менее чувствительна, но не гладкая
- Huber: гладкая комбинация (MSE для малых, MAE для больших ошибок)
- Log-Cosh: гладкая и дифференцируемая везде
Параметр epsilon в Huber:
- < 1.35: более чувствителен к выбросам
-
1.35: менее чувствителен
Практический пример: прогноз цен с выбросами
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
data = pd.DataFrame({
'square_meters': [100, 120, 150, 180, 200, 250, 300, 500],
'price': [300000, 350000, 400000, 480000, 550000, 700000, 900000, 50000000]
})
X = data[['square_meters']].values
y = data['price'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
models = {
'OLS': LinearRegression(),
'Huber': HuberRegressor(epsilon=1.35),
'RANSAC': RANSACRegressor(random_state=42),
'Theil-Sen': TheilSenRegressor(random_state=42)
}
for name, model in models.items():
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
r2 = r2_score(y_test, y_pred)
print(f"{name}: R² = {r2:.4f}")
Преимущества и недостатки
Преимущества
- Устойчивость к выбросам: малочувствительны к аномалиям
- Лучшая генерализация: модель не переучивается на шум
- Применимы к реальным данным: в которых всегда есть ошибки
Недостатки
- Медленнее OLS: требуют итеративных алгоритмов
- Сложнее интерпретировать: нет стандартных доверительных интервалов
- Требуют подбора параметров: epsilon, max_iterations и др.
Когда использовать робастную регрессию
- Есть выбросы в данных: ошибочные измерения, аномалии
- Неправильное распределение ошибок: не нормальное (гауссово)
- Необходимо доверие к результатам: выбросы не должны портить модель
- Неизвестное качество данных: некоторые значения могут быть ненадёжны
Когда использовать OLS
- Данные чистые: нет выбросов
- Нужна интерпретируемость: стандартные ошибки, доверительные интервалы
- Небольшой размер выборки: робастные методы нужны для больших данных
Робастная регрессия — критически важный инструмент в реальных проектах анализа данных, где выбросы неизбежны.