← Назад к вопросам

Какой самый популярный loss в линейной регрессии?

1.0 Junior🔥 111 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Популярные loss функции в линейной регрессии

Выбор функции потерь (loss function) критически важен для обучения моделей регрессии. Различные loss функции по-разному штрафуют за ошибки и приводят к разным поведениям модели.

1. Mean Squared Error (MSE) — самый популярный

Это стандартная и наиболее часто используемая loss функция для линейной регрессии.

Формула:

MSE = (1/n) * Σ(y_i - ŷ_i)²

Где n — количество образцов, y_i — истинное значение, ŷ_i — предсказанное значение.

Реализация:

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# Данные
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 5, 4, 5])

# Обучение модели (использует MSE по умолчанию)
model = LinearRegression()
model.fit(X, y)

# Предсказания
y_pred = model.predict(X)

# Вычисление MSE
mse = mean_squared_error(y, y_pred)
print(f"MSE: {mse}")

# Матричная форма для линейной регрессии
# MSE = (1/n) * ||y - Xw||²
# где w — веса модели

Почему MSE популярен:

  • Квадратичные ошибки штрафуют больших ошибок больше, чем малых
  • Имеет простое аналитическое решение в закрытой форме
  • Производная гладкая, что облегчает оптимизацию (градиентный спуск)
  • Статистически: при нормальном распределении ошибок MSE — это Maximum Likelihood Estimator (MLE)

Недостатки:

  • Чувствителен к выбросам (квадрат амплифицирует большие ошибки)
  • Не интерпретируется в исходных единицах (так как возведён в квадрат)

2. Root Mean Squared Error (RMSE)

Квадратный корень из MSE, более интерпретируемая метрика.

Формула:

RMSE = √(MSE) = √((1/n) * Σ(y_i - ŷ_i)²)

Пример:

from sklearn.metrics import mean_squared_error
import math

mse = mean_squared_error(y, y_pred)
rmse = math.sqrt(mse)
print(f"RMSE: {rmse}")

# Или напрямую
from sklearn.metrics import mean_squared_error
rmse = mean_squared_error(y, y_pred, squared=False)

Преимущества:

  • Интерпретируется в исходных единицах измерения y
  • Если модель предсказывает цену в рублях, RMSE показывает среднюю ошибку в рублях

Недостатки:

  • Не имеет закрытого решения, требует численной оптимизации
  • Всё ещё чувствителен к выбросам

3. Mean Absolute Error (MAE)

Средняя абсолютная ошибка, более робустна к выбросам.

Формула:

MAE = (1/n) * Σ|y_i - ŷ_i|

Пример:

from sklearn.metrics import mean_absolute_error

mae = mean_absolute_error(y, y_pred)
print(f"MAE: {mae}")

# Сравнение с MSE при выбросах
y_with_outlier = np.array([2, 4, 5, 4, 50])  # последнее значение - выброс
y_pred_with_outlier = np.array([2.1, 3.9, 5.1, 3.8, 4.2])

mae_outlier = mean_absolute_error(y_with_outlier, y_pred_with_outlier)
mse_outlier = mean_squared_error(y_with_outlier, y_pred_with_outlier)
print(f"MAE с выбросом: {mae_outlier}")
print(f"MSE с выбросом: {mse_outlier}")  # MSE гораздо больше

Преимущества:

  • Робустна к выбросам (не возводит ошибку в квадрат)
  • Интерпретируема в исходных единицах
  • Все ошибки штрафуются одинаково

Недостатки:

  • Не имеет закрытого решения
  • Не дифференцируема в нуле (может быть проблема для некоторых оптимизаторов)
  • Не соответствует нормальному распределению ошибок

4. Huber Loss

Комбинация MSE и MAE: близка к MSE для малых ошибок, но более робустна к выбросам как MAE.

Формула:

Huber(y, ŷ) = 
  { (y - ŷ)² / 2,                  если |y - ŷ| ≤ δ
  { δ * (|y - ŷ| - δ/2),           если |y - ŷ| > δ

Параметр δ контролирует переход между квадратичной и линейной частями.

Пример:

from sklearn.linear_model import HuberRegressor

# Huber регрессор использует Huber loss
model_huber = HuberRegressor(epsilon=1.35, max_iter=1000)
model_huber.fit(X, y)
y_pred_huber = model_huber.predict(X)

print(f"Коэффициент: {model_huber.coef_[0]}")

Преимущества:

  • Балансирует между MSE и MAE
  • Более робустна к выбросам, чем MSE
  • Всё ещё дифференцируема

Недостатки:

  • Нужно выбирать параметр δ
  • Более сложная реализация

5. Log-Cosh Loss

Гладкая аппроксимация к MAE, удобна для градиентного спуска.

Формула:

Log-Cosh = Σ log(cosh(y_i - ŷ_i))

Характеристики:

  • Приблизительно равна MSE для малых ошибок
  • Приблизительно равна MAE для больших ошибок
  • Всегда дифференцируема

6. Quantile Loss

Используется для квантильной регрессии, позволяет прогнозировать доверительные интервалы.

Формула:

Quantile Loss = Σ(q * max(y_i - ŷ_i, 0) + (1-q) * max(ŷ_i - y_i, 0))

Где q — квантиль (например, 0.5 для медианы).

Пример:

from sklearn.linear_model import QuantileRegressor

# Прогнозирование 25-го, 50-го и 75-го перцентилей
for quantile in [0.25, 0.5, 0.75]:
    model = QuantileRegressor(quantile=quantile)
    model.fit(X, y)
    print(f"Q{int(quantile*100)}: {model.predict(X)}")

Сравнение loss функций в контексте выбросов

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression, HuberRegressor, QuantileRegressor
from sklearn.metrics import mean_squared_error, mean_absolute_error

# Данные с выбросом
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 5, 4, 50])  # выброс

# Обычная линейная регрессия (MSE)
model_mse = LinearRegression()
model_mse.fit(X, y)

# Huber регрессор
model_huber = HuberRegressor(epsilon=1.35)
model_huber.fit(X, y)

# Результаты
print(f"MSE коэффициент: {model_mse.coef_[0]:.2f}")
print(f"Huber коэффициент: {model_huber.coef_[0]:.2f}")
# MSE будет сильно смещена из-за выброса
# Huber будет более устойчива

Когда использовать какую loss функцию?

MSE (Mean Squared Error):

  • Стандартный выбор
  • Когда ошибки примерно нормально распределены
  • Когда большие ошибки нужно штрафовать сильно
  • Простая интерпретация через RMSE

MAE (Mean Absolute Error):

  • Когда в данных много выбросов
  • Когда все ошибки имеют одинаковую важность
  • Когда нужна робустность

Huber Loss:

  • Компромисс между MSE и MAE
  • Когда данные содержат некоторые выбросы
  • Когда нужна гладкая функция

Quantile Loss:

  • Когда нужны интервалы уверенности
  • Когда интересует не средняя, а медиана
  • Асимметричные штрафы за ошибки в разных направлениях

Вывод

MSE остаётся самой популярной loss функцией в линейной регрессии благодаря своей простоте, интерпретируемости и математическим удобствам. Однако для практических задач с выбросами часто лучше использовать MAE или Huber Loss. Выбор loss функции должен зависеть от конкретной задачи, распределения ошибок и чувствительности к выбросам.