Представьте: наш алгоритм выдаёт вероятность, что человек болен. Например, он сказал «вероятность 0.8», а на самом деле человек действительно болен (класс 1). Хорошо ли сработал алгоритм? Да, вполне — он был уверен на 80%.
А если алгоритм сказал «вероятность 0.2», но человек болен? Плохо! Алгоритм ошибся.
Нам нужна числовая мера, которая скажет: насколько сильно мы ошиблись. Эта мера называется функцией потерь или функцией ошибки.
Почему не подходит обычная разность?
В линейной регрессии мы считали ошибку просто: \(ошибка=(y_{правда}−y_{предсказание})^2\)
Но в классификации yправда — это 0 или 1 (класс), а yпредсказание — это вероятность от 0 до 1. Разность работает плохо, потому что она не учитывает специфику вероятностей.
Log-loss (логистическая ошибка)
Для логистической регрессии используют специальную функцию ошибки — log-loss (logarithmic loss).
Формула для одного примера
\(Loss = -(y \cdot \log(p) + (1 - y) \cdot \log(1 - p))\)
где:
-
y — правильный ответ (0 или 1)
-
p — предсказанная вероятность класса 1
-
log — натуральный логарифм
Как это работает?
Давайте разберём два случая:
Случай 1: Правильный класс — 1 (человек болен)
Тогда y=1, и формула упрощается:
\(Loss=−log(p)\)
Что это значит:
-
Если p=1 (мы уверены на 100%), то log(1)=0, ошибка = 0. Отлично!
-
Если p=0.5 (сомневаемся), то −log(0.5)≈0.69. Ошибка средняя.
-
Если p=0.01 (почти уверены, что здоров, но он болен!), то −log(0.01)≈4.6−log(0.01)≈4.6. Огромная ошибка!
Случай 2: Правильный класс — 0 (человек здоров)
Тогда y=0, и формула упрощается:
\(Loss=−log(1−p)\)
Что это значит:
-
Если p=0 (уверены, что здоров), то log(1)=0, ошибка = 0. Отлично!
-
Если p=0.5 (сомневаемся), то −log(0.5)≈0.69. Ошибка средняя.
-
Если p=0.99 (почти уверены, что болен, но он здоров!), то −log(0.01)≈4.6. Огромная ошибка!
Почему log-loss хорош?
Log-loss сильно наказывает за уверенные неправильные предсказания:
-
Если мы сказали «вероятность болезни 99%», а человек здоров — ошибка огромная
-
Если мы сказали «вероятность 60%», а ошиблись — ошибка небольшая
Это заставляет алгоритм честно оценивать свою уверенность.
Средняя ошибка на всём датасете
Для всех примеров считаем среднюю ошибку:
\(\text{Log-Loss} = -\frac{1}{n}\sum_{i=1}^{n} \left(y_i \cdot \log(p_i) + (1 - y_i) \cdot \log(1 - p_i)\right)\)
где n — количество примеров.
Чем меньше log-loss, тем лучше работает модель.
Пример расчёта
Допустим, у нас 3 пациента:
| Пациент |
Правда (yy) |
Предсказание (pp) |
Ошибка |
| 1 |
1 (болен) |
0.9 |
−log(0.9)≈0.11 |
| 2 |
0 (здоров) |
0.2 |
−log(0.8)≈0.22 |
| 3 |
1 (болен) |
0.3 |
−log(0.3)≈1.20 |
Средняя ошибка: 0.11+0.22+1.203≈0.513
Почему логарифм?
Логарифм превращает вероятности в «штрафы»:
Это математически удобно для оптимизации и отражает интуитивное понимание «насколько мы уверены».
Итоги
-
Log-loss измеряет качество вероятностных предсказаний
-
Чем ближе предсказанная вероятность к правильному классу, тем меньше ошибка
-
Алгоритм подбирает w и b так, чтобы минимизировать среднюю log-loss
-
В Python для расчёта используется np.log(), а в sklearn есть готовая функция log_loss()