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

Какие функции потерь используются для регрессии?

2.3 Middle🔥 201 комментариев
#Машинное обучение#Метрики и оценка моделей

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

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

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

Какие функции потерь используются для регрессии?

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

1. Mean Squared Error (MSE)

Одна из самых популярных функций потерь. Вычисляет среднее квадратичное отклонение между предсказаниями и истинными значениями.

Формула:

MSE = (1/n) * Σ(y_true - y_pred)^2

from sklearn.metrics import mean_squared_error
import numpy as np

y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])

mse = mean_squared_error(y_true, y_pred)
print(f"MSE: {mse:.4f}")  # MSE: 0.3750

# В TensorFlow/Keras
from tensorflow.keras.losses import MeanSquaredError
loss_fn = MeanSquaredError()

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

  • Гладкая функция, хорошо работает с градиентными методами
  • Штрафует большие ошибки сильнее

Недостатки:

  • Очень чувствительна к выбросам (outliers) из-за возведения в квадрат
  • Трудно интерпретировать в исходных единицах

2. Root Mean Squared Error (RMSE)

Производная от MSE, но результат в исходных единицах измерения, что упрощает интерпретацию.

Формула:

RMSE = sqrt(MSE) = sqrt((1/n) * Σ(y_true - y_pred)^2)

from sklearn.metrics import mean_squared_error
import numpy as np

y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])

rmse = np.sqrt(mean_squared_error(y_true, y_pred))
print(f"RMSE: {rmse:.4f}")  # RMSE: 0.6124

Используется когда:

  • Нужна интерпретируемость в исходных единицах
  • Хотите знать среднюю ошибку в тех же единицах, что и целевая переменная

3. Mean Absolute Error (MAE)

Вычисляет среднее абсолютное отклонение. Менее чувствительна к выбросам, чем MSE.

Формула:

MAE = (1/n) * Σ|y_true - y_pred|

from sklearn.metrics import mean_absolute_error
import numpy as np

y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])

mae = mean_absolute_error(y_true, y_pred)
print(f"MAE: {mae:.4f}")  # MAE: 0.5000

# В TensorFlow/Keras
from tensorflow.keras.losses import MeanAbsoluteError
loss_fn = MeanAbsoluteError()

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

  • Более устойчива к выбросам
  • Легко интерпретировать

Недостатки:

  • Менее гладкая в точке ошибки = 0 (проблемы с градиентом)
  • Медленнее сходится при обучении

4. Huber Loss

Комбинирует MSE и MAE. Ведет себя как MSE для малых ошибок и как MAE для больших, что делает ее устойчивой к выбросам.

Формула: L_δ(y, y_pred) =

  • 0.5*(y - y_pred)^2 если |y - y_pred| <= δ
  • δ*(|y - y_pred| - 0.5*δ) иначе
from sklearn.linear_model import HuberRegressor
import numpy as np

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

huber = HuberRegressor(epsilon=1.35, max_iter=100, alpha=0.0001)
huber.fit(X, y)
predictions = huber.predict(X)

print(predictions)

# В TensorFlow/Keras
from tensorflow.keras.losses import Huber
loss_fn = Huber(delta=1.0)

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

  • Когда в данных есть выбросы, но вы не хотите их полностью игнорировать
  • Когда нужна гладкая функция потерь

5. Quantile Loss

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

def quantile_loss(y_true, y_pred, quantile):
    error = y_true - y_pred
    return np.mean(np.maximum(quantile * error, (quantile - 1) * error))

# Пример: предсказываем медиану (quantile=0.5)
y_true = np.array([1, 2, 3, 4, 5])
y_pred = np.array([1.1, 2.1, 2.9, 4.1, 5.2])

loss_q50 = quantile_loss(y_true, y_pred, 0.5)
loss_q75 = quantile_loss(y_true, y_pred, 0.75)
loss_q25 = quantile_loss(y_true, y_pred, 0.25)

print(f"Q50 Loss: {loss_q50:.4f}")
print(f"Q75 Loss: {loss_q75:.4f}")
print(f"Q25 Loss: {loss_q25:.4f}")

Применение:

  • Когда важны не точечные предсказания, а интервалы
  • Для probabilistic forecasting

6. Log-Cosh Loss

Гладкая аппроксимация MAE. Лучше работает с градиентом, чем MAE, но остается устойчивой к выбросам.

Формула:

L(y, y_pred) = log(cosh(y_pred - y))

import numpy as np

def log_cosh_loss(y_true, y_pred):
    return np.mean(np.log(np.cosh(y_pred - y_true)))

y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])

loss = log_cosh_loss(y_true, y_pred)
print(f"Log-Cosh Loss: {loss:.4f}")

# В TensorFlow/Keras
from tensorflow.keras.losses import LogCosh
loss_fn = LogCosh()

Сравнение функций потерь

import matplotlib.pyplot as plt
import numpy as np

errors = np.linspace(-3, 3, 100)
mse = errors ** 2
mae = np.abs(errors)
huber = np.where(np.abs(errors) <= 1.5, 0.5 * errors**2, 1.5 * (np.abs(errors) - 0.75))
log_cosh = np.log(np.cosh(errors))

plt.figure(figsize=(10, 6))
plt.plot(errors, mse, label="MSE")
plt.plot(errors, mae, label="MAE")
plt.plot(errors, huber, label="Huber")
plt.plot(errors, log_cosh, label="Log-Cosh")
plt.xlabel("Ошибка (y_true - y_pred)")
plt.ylabel("Значение функции потерь")
plt.legend()
plt.grid(True, alpha=0.3)
plt.title("Сравнение функций потерь")
plt.show()

Практический выбор функции потерь

СитуацияФункция потерьПричина
Стандартная задача регрессииMSE / RMSEХорошо работает, интерпретируемо
Есть выбросы в данныхMAE / HuberУстойчивость к выбросам
Нужны интервалы предсказанияQuantile LossПредсказание разных квантилей
Высокие требования к интерпретацииMAEВ исходных единицах
Deep learning моделиMSE или HuberГладкие функции для оптимизации

Рекомендации

  • Начните с MSE/RMSE - это baseline для большинства задач
  • Если видите выбросы - переходите на MAE или Huber Loss
  • Проверяйте на валидационном наборе - выбирайте функцию, которая лучше работает именно на ваших данных
  • Используйте метрики оценки отдельно от функции потерь - даже если обучаетесь на MSE, оценивайте качество через MAE и RMSE

Выбор функции потерь - это важное решение, которое влияет как на процесс обучения, так и на качество финальной модели.

Какие функции потерь используются для регрессии? | PrepBro