Я: В прошлый раз мы решили использовать логистическую регрессию для классификации варенья. Сегодня я еще немного расскажу о классификаторах и логистической регрессии.
Давайте представим, что мы делаем робота-дегустатора. Выглядит как коробка с дисплеем. Ставим в него баночку с вареньем и он выдает результат — число от 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). Этим мы и займемся в следующей статье.