Как перейти от границы принятия решения к вероятностям в логистической регрессии?

Уже есть куча потрясающих статей и видео по логистической регрессии, но мне было сложно понять связь между вероятностями и линейностью логистики, поэтому я решил, что задокументирую это здесь для себя и для тех, кто может пойти. через то же самое.

Это также прольет свет на то, откуда берется «логистическая» часть логистической регрессии!

В центре внимания этого блога будет построение интуитивного понимания взаимосвязи между логистической моделью и линейной моделью, поэтому я просто собираюсь сделать обзор того, что такое логистическая регрессия, и погрузиться в эту взаимосвязь. Для более полного объяснения этого удивительного алгоритма, вот некоторые из моих любимых ресурсов:

Теперь перейдем к сути логистической регрессии.

Что такое логистическая регрессия?

Как и линейная регрессия, логистическая регрессия используется для моделирования взаимосвязи между набором независимых переменных и зависимой переменной.

В отличие от линейной регрессии, зависимая переменная является категориальной, поэтому она считается алгоритмом классификации.

Логистическая регрессия может использоваться, чтобы предсказать:

  • Электронное письмо является спамом или не спамом
  • Опухоль злокачественная или нет
  • Студент сдает или не сдает экзамен
  • Я пожалею, что перекусила печеньем в 12 часов утра

Перечисленные выше приложения являются примерами биномиальной / двоичной логистической регрессии, где цель является дихотомической (2 возможных значения), но у вас может быть более двух классов (полиномиальная логистическая регрессия).

Эти классификации сделаны на основе вероятностей, созданных моделью, и некоторого порогового значения (обычно 0,5). Например, Учащийся считается сдавшим экзамен, если его вероятность сдать экзамен больше 0,5.

Давайте начнем разбираться, как рассчитываются эти вероятности.

Сигмовидная функция

Если мы визуализируем набор данных с двоичными целевыми переменными, мы получим что-то вроде этого:

Есть несколько причин, по которым установка лески здесь может оказаться не очень хорошей идеей:

  1. В линейной регрессии зависимая переменная может варьироваться от отрицательного inf до положительного inf, но мы пытаемся предсказать вероятности, которые должны быть от 0 до 1.
  2. Даже если бы мы создали некоторые правила для сопоставления этих значений, выходящих за границы, с меткой, классификатор был бы очень чувствителен к выбросам, которые отрицательно повлияли бы на его производительность.

Итак, вместо прямой линии мы моделируем ее S-образной формой, которая сглаживается около 0 и 1:

Это называется сигмовидной функцией и имеет такую ​​форму:

Эта функция возвращает вероятность того, что наблюдение принадлежит классу, на основе некоторой комбинации факторов.

И если мы решим линейную функцию, мы получим логарифм шансов или логит:

Обратите внимание, как при p (x) ≥0,5, βX ≥ 0.

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

Граница решения

За каждой отличной моделью логистической регрессии стоит ненаблюдаемая (скрытая) модель линейной регрессии, потому что вопрос, на который она действительно пытается ответить:

«Какова вероятность того, что наблюдение принадлежит классу 1 при некоторых характеристиках x?»

Давайте посмотрим на пример.

Предположим, мы хотим предсказать, сдаст ли студент экзамен, исходя из того, сколько времени он потратил на учебу и сон:

Давайте лучше поймем наши данные, построив график «Изучено» и «Спящий» и выделив цвета для наших классов, чтобы визуализировать разделение:

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
exams = pd.read_csv('data_classification.csv', names=['Studied','Slept','Passed'])
fig = plt.figure()
ax = fig.add_subplot(111)
colors = [‘red’, ’blue’]
ax.scatter(exams.Studied, exams.Slept, s=25, marker=”o”,  c=exams[‘Passed’], cmap=matplotlib.colors.ListedColormap(colors))

Глядя на этот сюжет, мы можем выдвинуть гипотезу о нескольких отношениях:

  • Студенты, которые проводят достаточно времени за учебой и много спят, скорее всего, пройдут
  • Студенты, которые спят менее 2 часов, но затрачивают более 8 часов на обучение, вероятно, все равно пройдут обучение (я точно был в этой группе)
  • Студенты, которые не учатся и не спят, вероятно, смирились со своей судьбой не сдать экзамен.

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

from sklearn.linear_model import LogisticRegression
features = exams.drop(['Passed'],axis=1)
target = exams['Passed']
logmodel = LogisticRegression()
logmodel.fit(features, target)
predictions = logmodel.predict(features)

Вы можете распечатать оценки параметров:

Используя эти оценки, мы можем вычислить границу. Поскольку наш порог установлен на 0,5, я держу логит на 0. Это также позволяет нам просматривать границу в 2d:

exams['boundary'] = (-logmodel.intercept_[0] - (logmodel.coef_[0][0] * features['Studied'])) / logmodel.coef_[0][1]

Вот как это выглядит на нашем графике рассеяния:

plt.scatter(exams['Studied'],exams['Slept'], s=25, marker="o", c=exams['Passed'], cmap=matplotlib.colors.ListedColormap(colors))
plt.plot(exams['Studied'], exams['boundary'])
plt.show()

Выглядит разумно! Так как же логистическая регрессия использует эту строку для присвоения меток классов? Он смотрит на расстояние между каждым отдельным наблюдением и линейной моделью. Все точки над этой линией будут помечены как 1, а все ниже - как 0. Любые точки на этой линии могут принадлежать к любому классу (вероятность 0,5), поэтому для того, чтобы классифицировать точку как 1, нас интересует вероятность того, что расстояние между этой линией и нашим наблюдением больше 0.

Как оказалось, в логистической регрессии предполагается, что это расстояние соответствует логистическому распределению.

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

Это означает, когда мы спрашиваем:

Мы действительно спрашиваем:

Чтобы вычислить эту вероятность, мы берем интеграл логистического распределения, чтобы получить его кумулятивную функцию распределения:

Эй! Это сигмовидная функция :).

Тада! Теперь вы должны иметь возможность более интуитивно переходить между сигмовидной функцией и функцией линейной регрессии. Я надеюсь, что понимание этой связи повысило вашу признательность за логистическую регрессию, как и у меня.