Функция потерь и MSE

Чтобы модель улучшалась, ошибку нужно измерять числом. Это и делает функция потерь.

Функция потерь (loss function) — число, показывающее, насколько предсказания модели расходятся с правильными ответами. Чем меньше — тем лучше.

Зачем измерять ошибку

В прошлом уроке мы подбирали k и b на глаз. Но компьютер «на глаз» не умеет — ему нужен числовой ориентир: одна прямая лучше другой или хуже? Функция потерь даёт ответ числом. Обучение модели — это, по сути, поиск параметров, при которых функция потерь минимальна.

Идея среднеквадратичной ошибки

Для регрессии самая популярная функция потерь — MSE (Mean Squared Error), среднеквадратичная ошибка. Считается в три шага:

  1. Для каждого объекта берём разницу между правдой и предсказанием: ошибка = y_правда − y_предсказание.
  2. Возводим каждую ошибку в квадрат (чтобы знак не мешал и большие промахи штрафовались сильнее).
  3. Усредняем квадраты по всем объектам.

Формула «на пальцах»: MSE = среднее( (правда − предсказание)² ).

Почему квадрат, а не просто модуль разницы? Во-первых, квадрат убирает знак, и ошибки «+2» и «−2» не гасят друг друга. Во-вторых, он сильнее наказывает крупные промахи: ошибка в 10 даёт вклад 100, а ошибка в 1 — всего 1. Модель будет особенно стараться не допускать больших отклонений.

Считаем MSE на чистом Python

Никаких библиотек — обычные списки. Код запускается, можете менять числа и смотреть, как меняется ошибка:

# Правильные ответы и предсказания модели
y_true = [3.0, 5.0, 2.5, 7.0]
y_pred = [2.8, 5.5, 2.0, 6.5]

n = len(y_true)
total = 0.0
for t, p in zip(y_true, y_pred):
    error = t - p          # разница
    total += error ** 2    # квадрат ошибки
    print(f"правда={t}, предсказание={p}, ошибка^2={error**2:.2f}")

mse = total / n
print("-----")
print("MSE =", round(mse, 4))

Вывод:

правда=3.0, предсказание=2.8, ошибка^2=0.04
правда=5.0, предсказание=5.5, ошибка^2=0.25
правда=2.5, предсказание=2.0, ошибка^2=0.25
правда=7.0, предсказание=6.5, ошибка^2=0.25
-----
MSE = 0.1975

Меньше MSE — точнее модель. Если бы предсказания совпали с правдой идеально, MSE равнялся бы нулю.

Как это связано с обучением

Теперь у модели есть «компас». Она перебирает (умным способом) разные k и b и выбирает те, при которых MSE минимален. Представьте долину: высота — это MSE, а спуск на дно долины — это поиск лучших коэффициентов. Метод такого спуска называется градиентным спуском; нам сейчас важна сама идея — модель катится туда, где ошибка меньше.

Родственник MSE — RMSE

У MSE есть неудобство: из-за возведения в квадрат единицы измерения тоже в квадрате (рубли²). Чтобы вернуться к привычным единицам, берут корень из MSE — получается RMSE. Эту и другие метрики качества подробно разберём в последнем разделе.

Итог

  • Функция потерь измеряет ошибку модели числом; цель обучения — её минимизировать.
  • MSE = среднее квадратов разностей между правдой и предсказанием.
  • Квадрат убирает знак и сильнее штрафует крупные промахи.
  • Обучение = поиск параметров с наименьшей потерей (спуск «на дно долины» ошибки).
Проверьте себя
1. Что показывает функция потерь?
AСколько памяти занимает модель
BНасколько предсказания модели расходятся с правильными ответами
CКоличество признаков в датасете
DСкорость обучения в секундах
2. Почему в MSE ошибки возводят в квадрат?
AЧтобы вычисления шли быстрее
BЧтобы убрать знак ошибки и сильнее наказывать большие промахи
CЧтобы MSE всегда был отрицательным
DЭто требование библиотеки
3. Каким будет MSE, если модель предсказывает все значения абсолютно точно?
AРавен 1
BРавен 0
CРавен числу объектов
DМожет быть любым
Поддержать проект