На этом занятии мы разберем один из наиболее популярных, математически строгих и интерпретируемых алгоритмов бинарной классификации — логистическую регрессию (Logistic Regression). Мы выясним природу парадокса ее названия, изучим функцию активации Сигмоиду и поймем, почему для классификации требуется особая функция потерь Log Loss.
Первое, что часто смущает начинающих специалистов, — слово «регрессия» в названии. Важно зафиксировать: логистическая регрессия — это алгоритм классификации, а не регрессии.
В простейшем линейном классификаторе (перцептроне) мы принимали жесткое пороговое решение: все, что больше нуля — Класс 1, все, что меньше — Класс 0. Такой подход делит пространство жестко и не дает понимания, насколько модель уверена в своем ответе.
Главная идея логистической регрессии — предсказывать не просто метку класса, а вычислять вероятность принадлежности объекта к классу (значение в диапазоне от \(0\) до \(1\)).
Бизнес-кейс (Фильтрация спама): Получив новое письмо, модель вычисляет вероятность того, что это спам. Если вероятность \(p \ge 0.95\) — письмо можно сразу удалять без ведома пользователя. Если вероятность умеренная (\(0.50 \le p \le 0.94\)) — письмо перемещается в папку «Спам» для возможности ручной проверки. Если вероятность низкая — идет во «Входящие». Вероятностный подход дает гибкость управления решениями.
Как и в линейной регрессии, сначала вычисляется взвешенная сумма признаков объекта (линейная комбинация):
$$ z = w_0 + w_1x_1 + w_2x_2 + \dots + w_nx_n $$
Результат \(z\) может быть абсолютно любым числом в диапазоне от \(-\infty\) до \(+\infty\). Чтобы сжать его в вероятностный диапазон \([0, 1]\), значение \(z\) пропускается через логистическую функцию — сигмоиду (Sigmoid):
$$ \sigma(z) = \frac{1}{1 + e^{-z}} $$
Полученный результат \(\sigma(z)\) интерпретируется как вероятность принадлежности объекта к Классу 1. Если \(\sigma(z) \ge 0.5\), принимается решение отнести объект к Классу 1, если \(\sigma(z) < 0.5\) — к Классу 0. Граница принятия решений (decision boundary) достигается точно при \(z = 0\).

В линейной регрессии для оптимизации мы минимизировали среднеквадратичную ошибку (MSE). Использовать ее совместно с сигмоидой в задачах классификации нельзя по двум причинам:
Для решения этих проблем используется выпуклая функция потерь — Log Loss (бинарная кросс-энтропия). Ее формула для одного объекта выглядит так:
$$ \text{Loss}(y, p) = -[y \cdot \log(p) + (1 – y) \cdot \log(1 – p)] $$
Где \(y\) — истинная метка класса (0 или 1), а \(p\) — предсказанная моделью вероятность.
Интуиция за Log Loss:
Общая функция потерь для всего набора данных (Cost Function) представляет собой простое среднее арифметическое Log Loss по всем \(N\) объектам обучающей выборки:
$$ J(w, b) = -\frac{1}{N} \sum_{i=1}^{N} [y_i \cdot \log(p_i) + (1 – y_i) \cdot \log(1 – p_i)] $$
Класс LogisticRegression библиотеки scikit-learn под капотом использует не простой градиентный спуск, а более быстрые и продвинутые оптимизаторы — «солверы» (lbfgs, liblinear, saga), а также поддерживает встроенную L1 и L2 регуляризацию (управляется гиперпараметрами penalty и C — обратной силой регуляризации).
Обучив модель на датасете «Ирисы Фишера» (исключив класс Setosa для бинарной постановки задачи), мы получаем высокую точность (\(0.97\) на тесте) и отличную стабильность при кросс-валидации (средняя точность \(0.950\) при стандартном отклонении всего \(4.7\%\)).
Для предсказания класса нового объекта мы используем метод model.predict(new_iris). Однако, чтобы извлечь вероятности, мы вызываем метод model.predict_proba(new_iris). На выходе мы получаем распределение:
array([[0.0245406, 0.9754594]])
Это означает, что модель с уверенностью в \(97.5\%\) относит объект к Классу 1, и лишь с вероятностью \(2.5\%\) — к Классу 0. Наличие этой метрики позволяет гибко интегрировать модель классификации в сложные прикладные ИИ-системы.
penalty), обратная сила регуляризации (C), солверы (solver), балансировка классов (class_weight).predict()) и выводом вектора вероятностей (predict_proba()).