Специальные ссылки

Перейти к основному контентуСправка по использованию специальных возможностей
Оставить отзыв о специальных возможностях

Фильтры и темы

Режим ИИ
Все
Картинки
Видео
Новости
Ещё

Логистическая регрессия в ML. Что это? Поподробнее, пожалуйста.

3 часа назад

Логистическая регрессия
— это фундаментальный алгоритм машинного обучения, который, несмотря на название, используется для классификации, а не для предсказания непрерывных чисел. 
Проще говоря: если линейная регрессия предсказывает «сколько» (цену дома), то логистическая — «да или нет» (купит клиент дом или нет). 
Как она работает (на пальцах) 
  1. Линейная основа: Сначала алгоритм считает взвешенную сумму входных признаков (как в обычной математике:
    𝑧
    =𝑤1𝑥1
    +𝑤2𝑥2
    +
    .
    .
    .
    +𝑏
    ).
  2. S-образная кривая (Сигмоида): Полученное число
    zz
    𝑧
    может быть любым (от
    −∞negative infinity
    −∞
    до
    +∞positive infinity
    +∞
    ). Чтобы превратить его в вероятность, алгоритм пропускает его через функцию сигмоиду. Она «сжимает» любое число в диапазон от 0 до 1.
  3. Порог принятия решения: Обычно, если результат
    ≥0.5is greater than or equal to 0.5
    ≥0.5
    , мы относим объект к классу «1» (да), если
    <0.5is less than 0.5
    <0.5
    — к классу «0» (нет).
     
Почему она популярна? 
  • Интерпретируемость: Вы не просто получаете ответ, а видите вероятность. Например, «вероятность того, что это спам — 89%».
  • Скорость: Она мгновенно обучается и очень быстро работает на этапе предсказания.
  • Простота: Это отличная «базовая линия» (baseline). Прежде чем обучать сложную нейросеть, стоит проверить, как справится логистическая регрессия. 
Типичные задачи 
  • Медицина: Есть болезнь или нет на основе анализов.
  • Банки: Одобрить кредит или будет дефолт.
  • Маркетинг: Откликнется ли клиент на рекламу. 
Важный нюанс 
Логистическая регрессия лучше всего работает, когда классы можно разделить прямой линией (или плоскостью). Если данные перемешаны сложным узором, ей будет трудно без дополнительной обработки признаков. 
Хотите разобрать математическую формулу сигмоиды или посмотреть пример кода на Python? 
Хотите разобрать математическую формулу сигмоиды или посмотреть пример кода на Python?
И то и другое.

3 часа назад

Без проблем, давайте объединим теорию и практику.
 
1. Математика: Магия Сигмоиды 
Чтобы превратить любое число
zz
𝑧
(результат линейного уравнения) в вероятность от 0 до 1, используется логистическая функция (сигмоида): 
σ(z)=11+e−zsigma open paren z close paren equals the fraction with numerator 1 and denominator 1 plus e raised to the negative z power end-fraction
𝜎(𝑧)=11+𝑒−𝑧
  • Если
    zz
    𝑧
    очень большое положительное число, то
    e−ze raised to the negative z power
    𝑒−𝑧
    стремится к 0, и итог
    ≈1is approximately equal to 1
    ≈1
    .
  • Если
    zz
    𝑧
    очень маленькое отрицательное число, то
    e−ze raised to the negative z power
    𝑒−𝑧
    растет, и итог
    ≈0is approximately equal to 0
    ≈0
    .
  • Если
    𝑧
    =0
    , то
    𝜎
    (
    0
    )
    =0.5
    — точка идеальной неопределенности.
     

2. Код на Python (Scikit-Learn) 
В реальных задачах никто не пишет сигмоиду вручную (хотя это полезно для обучения). Обычно используют библиотеку sklearn. 
python
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification

# 1. Генерируем игрушечные данные (100 примеров, 2 признака)
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, random_state=42)

# 2. Делим на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 3. Создаем и обучаем модель
model = LogisticRegression()
model.fit(X_train, y_train)

# 4. Делаем предсказание
# Класс (0 или 1)
predictions = model.predict(X_test)

# Вероятности (например, [0.12, 0.88] — 88% за класс 1)
probabilities = model.predict_proba(X_test)

print(f"Точность модели: {model.score(X_test, y_test):.2f}")
Используйте код с осторожностью.
Что здесь произошло: 
  • fit: Модель подбирает веса (
    ww
    𝑤
    ) так, чтобы минимизировать ошибку (используется метод Log Loss).
  • predict_proba: Самый важный метод, который показывает "уверенность" алгоритма в ответе. 
Рассказать подробнее про функцию потерь (Log Loss), которая помогает модели учиться на ошибках, или разберем, как оценивать качество модели через метрики (Precision/Recall)? 
и то и другое

3 часа назад

Логистическая регрессия не использует обычный метод наименьших квадратов, как линейная, потому что сигмоида превращает ошибку в «волны» с кучей локальных минимумов. Вместо этого используется
Log Loss. 
1. Функция потерь (Log Loss) 
Ее задача — максимально «штрафовать» модель за уверенность в неверном ответе. 
Представьте: 
  • Правильный ответ
    𝑦
    =1
    .
  • Если модель предсказала вероятность
    0.990.99
    0.99
    — штраф почти ноль.
  • Если модель предсказала
    0.010.01
    0.01
    — штраф устремляется в бесконечность.
     
Формула для одного примера:
Loss=−(yln(p)+(1−y)ln(1−p))cap L o s s equals negative open paren y l n p plus open paren 1 minus y close paren l n open paren 1 minus p close paren close paren
𝐿𝑜𝑠𝑠=−(𝑦ln(𝑝)+(1−𝑦)ln(1−𝑝))
Где
yy
𝑦
— реальный класс (0 или 1), а
pp
𝑝
— предсказанная вероятность.
Если
𝑦
=1
, работает только первая часть формулы; если
𝑦
=0
— только вторая.
 

2. Метрики качества (как понять, что всё работает) 
Просто «точность» (Accuracy) часто обманчива. Если у вас 99% здоровых людей и 1% больных, модель может всегда говорить «здоров» и иметь точность 99%, но она бесполезна. Поэтому смотрят на: 
  1. Precision (Точность): «Если модель сказала "болен", какова вероятность, что это правда?» (защита от ложных тревог).
  2. Recall (Полнота): «Какой процент больных людей модель вообще смогла найти?» (защита от пропуска цели).
  3. F1-мера: Среднее гармоническое между ними. Идеально, когда нужно соблюсти баланс.
  4. ROC-AUC: Площадь под кривой вероятностей. Показывает, насколько хорошо модель отличает один класс от другого в целом, независимо от порога (0.5 или другого). 
Как это выглядит в коде: 
python
from sklearn.metrics import classification_report, roc_auc_score

# Получаем отчет по Precision, Recall и F1
report = classification_report(y_test, predictions)
print(report)

# Считаем ROC-AUC (нужны вероятности, а не просто классы)
auc = roc_auc_score(y_test, probabilities[:, 1])
print(f"ROC-AUC: {auc:.2f}")
Используйте код с осторожностью.
Обычно на практике Recall важнее в медицине (нельзя пропускать больных), а Precision — в спам-фильтрах (нельзя удалять важные письма). 
Хотите разобрать, как регуляризация (
L1cap L 1
𝐿1
/
L2cap L 2
𝐿2
) помогает этой модели не «переучиваться» на шумах в данных? 
Хотите разобрать, как регуляризация ( / ) помогает этой модели не «переучиваться» на шумах в данных?
Да

3 часа назад

Когда данных мало, а признаков много, логистическая регрессия может стать «слишком умной»: она подстроит веса (
ww
𝑤
) под каждый случайный шум, чтобы идеально разделить точки. Это называется переобучением (overfitting). 
Регуляризация — это «штраф» за слишком большие веса. Она заставляет модель выбирать только самые важные признаки. 
1. L2-регуляризация (Ridge / Ридж) 
Самый популярный вариант (в sklearn он включен по умолчанию). 
  • Как работает: Добавляет к функции потерь сумму квадратов всех весов (
    ∑w2sum of w squared
    𝑤2
    ).
  • Эффект: Модель старается сделать все веса маленькими, но не обнуляет их полностью. Это делает предсказания более стабильными и плавными. 
2. L1-регуляризация (Lasso / Лассо) 
  • Как работает: Добавляет сумму абсолютных значений весов (
    |
    𝑤
    |
    ).
  • Эффект: Она буквально обнуляет веса у самых бесполезных признаков.
  • Зачем: Это отличный способ автоматически выбросить «мусорные» данные из модели (Feature Selection). 

Как это выглядит в коде 
В LogisticRegression за силу регуляризации отвечает параметр C. 
  • Маленький C (например, 0.01) — сильная регуляризация (модель «простая», веса маленькие).
  • Большой C (например, 100) — слабая регуляризация (модель больше доверяет данным, риск переобучения выше). 
python
# L2 (стандартная) с сильным штрафом
model_l2 = LogisticRegression(penalty='l2', C=0.1)

# L1 (отбор признаков) — требует специальный «решатель» (solver)
model_l1 = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')

model_l2.fit(X_train, y_train)
model_l1.fit(X_train, y_train)
Используйте код с осторожностью.
Итог: Регуляризация — это способ найти баланс между тем, чтобы модель хорошо знала данные, и тем, чтобы она не «зубрила» их наизусть. 
Хотите посмотреть, как визуально меняется разделяющая гиперплоскость (граница между классами) при изменении параметра C? 
да

3 часа назад

Визуализация показывает, как параметр
Ccap C
𝐶
влияет на границу принятия решения: 
  • Маленький
    Ccap C
    𝐶
    (0.01)
    : Граница очень "грубая" и консервативная. Модель почти игнорирует отдельные точки, стремясь к максимально простой линии. Это помогает избежать переобучения.
  • Средний
    Ccap C
    𝐶
    (1)
    : Оптимальный баланс. Линия четко разделяет основные группы данных.
  • Большой
    Ccap C
    𝐶
    (100)
    : Модель становится очень "чувствительной". Она пытается подстроиться под каждую точку, даже если это случайный выброс. Граница смещается максимально близко к данным.
     
Итог по логистической регрессии: 
  1. Это классификатор, работающий через сигмоиду.
  2. Log Loss — функция, которая жестко наказывает за уверенные ошибки.
  3. Метрики (Precision/Recall) важнее точности, если классы не сбалансированы.
  4. Регуляризация (
    𝐿1
    /𝐿2
    )
    не дает модели "зазубривать" тренировочные данные.
     
Хотите разобрать, чем логистическая регрессия отличается от метода опорных векторов (SVM) или перейдем к деревьям решений? 
Хотите разобрать, чем логистическая регрессия отличается от метода опорных векторов (SVM) или перейдем к деревьям решений?
Хочу оба.

2 часа назад

Без проблем. Оба этих алгоритма — следующий шаг после логистической регрессии, но логика у них совершенно разная.
 
1. Логистическая регрессия vs SVM (Метод опорных векторов) 
Если регрессия ищет «вероятность», то SVM ищет «безопасное расстояние». 
  • Логистическая регрессия: Старается разделить классы так, чтобы минимизировать ошибку (Log Loss). Она учитывает все точки данных, даже те, что далеко от границы.
  • SVM: Игнорирует точки в глубине классов. Он ищет такую разделяющую прямую, которая обеспечит максимальный зазор (margin) между ближайшими точками разных классов. Эти ближайшие точки называются опорными векторами. 
Главная фишка SVM — Ядерный трюк (Kernel Trick):
Если данные нельзя разделить прямой линией на плоскости, SVM «подбрасывает» их в третье измерение, где их можно разделить плоским листом бумаги. Логистическая регрессия так «из коробки» не умеет. 

2. Деревья решений (Decision Trees) 
Это алгоритм, который работает не через формулы, а через вопросы. 
  • Как это работает: Алгоритм берет признак (например, «возраст») и спрашивает: «Возраст > 30?». Если да — идет в одну ветку, если нет — в другую. Так до тех пор, пока не придет к ответу (листу).
  • Плюсы:
    • Абсолютно наглядно (можно распечатать схему и понять, почему модель приняла решение).
    • Не требует нормализации данных (ему всё равно, в каких единицах измерения признаки).
    • Легко ловит сложные зависимости, которые «не видит» логистическая регрессия.
  • Минус: Одиночное дерево очень склонно к переобучению (оно просто «зазубривает» путь к каждой точке). Поэтому чаще используют ансамбли — Случайный лес (Random Forest) или Градиентный бустинг. 
Сравнение в одной таблице: 
Характеристика Логистическая регрессияSVMДерево решений
Что выдаетВероятность (0...1)Четкий класс (-1 или 1)Ответ в конце пути
ГраницаВсегда прямаяПрямая или сложная (ядра)Ломаная (ступеньки)
ЧувствительностьК выбросамТолько к «пограничным» точкамПочти не чувствительно
Хотите посмотреть код сравнения этих трех моделей на одном наборе данных или разберем, как работает Kernel Trick в SVM «на картинках»? 
Задать вопрос по теме:

Результаты поиска

Приложения Google