Я: В прошлый раз мы решили использовать логистическую регрессию для классификации варенья. Сегодня я еще немного расскажу о классификаторах и логистической регрессии.

Давайте представим, что мы делаем робота-дегустатора. Выглядит как коробка с дисплеем. Ставим в него баночку с вареньем и он выдает результат — число от 0 до 1. Это число указывает на вероятность того, что варенье понравится детям.

Процесс отнесения вещей к определенному классу называется классификацией.

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

Логистическая регрессия, как и другие алгоритмы машинного обучения, имеет дело с входными признаками — в нашем случае это сахар, вкус, плотность и т. д., и возвращает число от 0 до 1. Если число выше определенного порога, считается, что варенье понравится, иначе — нет

threshold: 0.5
0.2 - class 0
0.3 - class 0
0.8 - class 1

G: Кто устанавливает порог?
Я: По умолчанию это 0,5. Разработчик может настроить это в зависимости от требуемой надежности предсказания того или иного класса.

G: Эти возвращенные значения выглядят как вероятность Преобразует ли логистическая регрессия признаки в вероятности?
Я: Действительно, если мы попытаемся представить классификатор математически, то один из вариантов может быть

w1*sugar + w2*density + w3*colour + ... = jam_likeability

Где

  • w1, w2, w3 и т. д. — веса (коэффициенты) признаков. Каждая функция имеет один вес. Мы можем интерпретировать это как меру важности функции.
  • сахар, плотность, цвет и т. д. — особенности
  • «jam_likeability» — это некоторое количественное представление «привлекательности» джема.

Но проблема в том, что результатом может быть любое число: 21, 1981, -5, … и т. д. — это невозможно интерпретировать.

Г: И что с этим делать?
Я: Попробуем перевести результат в вероятность!

Давайте обозначим веса как w и характеристики как x.

w1*sugar + w2*density + w3*colour + ... = wx = jam_likeability

Мы знаем значения признаков, но не знаем веса w.

Наша цель — выразить jam_likeability таким образом, чтобы его значения от [-∞; +∞] лежат в пределах [0; 1]. Это значение и будет желаемой p_jam_likeability.

Пусть эту задачу решает некоторая функция σ:

σ(wx) = σ(jam_likeability) = p_jam_likeability

Напомним, чего мы хотим добиться — чтобы σ принимала значения из [-∞; +∞] и вернуть вероятность в пределах [0; 1]

Что такое σ?

Вспомним, что такое «шансы».

odds = P / (1-P)
P = odds / (1 + odds)

Где P — вероятность

Шансы лежат в пределах [0; +∞]. Если мы возьмем логарифм шансов, то получим значения, лежащие в пределах [-∞; +∞]. Назовем эти значения logodds.

logodds = ln(odds)

В таблице ниже показано соотношение между вероятностями, шансами и логоддами:

         p       odds    logodds  
      .001    .001001  -6.906755
       .01    .010101   -4.59512
       .15   .1764706  -1.734601
        .2        .25  -1.386294
       .25   .3333333  -1.098612
        .3   .4285714  -.8472978
       .35   .5384616  -.6190392
        .4   .6666667  -.4054651
       .45   .8181818  -.2006707
        .5          1          0
       .55   1.222222   .2006707
        .6        1.5   .4054651
       .65   1.857143   .6190392
        .7   2.333333   .8472978
       .75          3   1.098612
        .8          4   1.386294
       .85   5.666667   1.734601
        .9          9   2.197225
      .999        999   6.906755
     .9999       9999    9.21024

Теперь мы можем выразить wx в терминах logodds, потому что они имеют одну и ту же область определения.

wx = logodds = ln(odds)
odds = exp(wx)

Теперь мы можем выразить вероятность P через wx:

P = odds / (1+odds) = exp(wx) / (1 + exp(wx)) = 1 / (1 + exp(-wx))

Итак, мы получили σ:

σ(wx) = 1 / (1 + exp(-wx))
P = σ(wx)

σ имеет S-образную форму и называется сигмовидной или логистической функцией.

G: Не могли бы вы привести пример того, как его можно использовать?
Я: Конечно! Представим, что у нас есть 1 признак — сахар и w1 для сахара = 5
После этого рассчитаем p_jam_likebility для джема с сахаром=0,3.

x = 0.3
w = 5
---
p_jam_likebility = 1/(1+exp(-wx)) = 1 / (1+exp(-5*0.3)) = 0.81757447619

Итак, p_jam_likebility = 0,81757447619, сахара в нем достаточно, детям понравится 😄
Регулируя параметр w, мы можем изменить наклон сигмоиды. И это главная цель в обучении логистической регрессии — подгонка w.

Г: поймать. Но сахар не может быть отрицательным!
Я: Ага. Для этого у нас в уравнении есть термин перехвата. Я опишу это позже.
Г: Хорошо.

Я: Вот мы и подошли к финалу — мы соединили wx и P и определили, какой параметр нам нужно настроить (w). Этим мы и займемся в следующей статье.