В этой статье я собираюсь реализовать алгоритм градиентного спуска для логистической регрессии с нуля на Python.
Я уже разработал алгоритм градиентного спуска для линейной регрессии, вы можете ознакомиться с ним в моих опубликованных историях.
Очертания истории
1- Что такое логистическая регрессия?
2- Функция стоимости
3- Алгоритм градиентного спуска
4- Реализация кода Python для алгоритма градиентного спуска
Без дальнейших церемоний, давайте погрузимся.
Логистическая регрессия — это контролируемый алгоритм обучения, алгоритм классификации, используемый для распределения наблюдений по дискретному набору классов. например: классифицировать электронные письма; спам/не спам, предсказать, является опухоль злокачественной или доброкачественной и т. д.
Мы различаем два типа классификации;
1- бинарная классификация, у нас есть только два класса (спам/не спам, злокачественный/доброкачественный).
2- Мультиклассовая классификация, выходные данные содержат более двух классов (кошки, собаки и лошади).
Логистическая регрессия использует сигмовидную функцию для возврата вероятности между 0 и 1, затем выходные данные будут сопоставлены на основе порога с классом.
Функция стоимости логистической регрессии:
Функция стоимости представляет собой цель оптимизации, что означает, что мы создаем функцию стоимости и пытаемся минимизировать ее, чтобы получить оптимальные значения параметров.
В линейной регрессии эта функция стоимости является выпуклой функцией, что означает, что у нас есть только один глобальный минимум.
Если мы попытаемся использовать ту же функцию стоимости для логистической регрессии, мы получим невыпуклую функцию с несколькими локальными минимумами, что делает неверным выбор для получения глобального минимума.
Следовательно, функция стоимости для логистической регрессии будет определена следующим образом:
Как видите, если y = 1 и h(x) = 1, стоимость = 0. Но если y = 1 и h(x) = 0, мы будет штрафовать алгоритм обучения очень большой стоимостью, cost = +inf.
Две определенные функции для функции стоимости можно сжать в одну функцию следующим образом:
Градиентный спуск:
Чтобы минимизировать нашу функцию стоимости J(θ), мы собираемся использовать алгоритм градиентного спуска.
Градиентный спуск — это алгоритм оптимизации, используемый для минимизации некоторых функций путем итеративного движения в направлении наискорейшего спуска, определяемого отрицательным значением градиента. В машинном обучении мы используем градиентный спуск для обновления параметров нашей модели. Параметры относятся к коэффициентам в логистической регрессии.
Чтобы запустить алгоритм градиентного спуска, нам нужно будет вычислить частную производную нашей функции стоимости J(θ) по каждому параметру.
Код Python:
https://gist.github.com/jairiidriss/af5d5523614bc6c828a2bc434d8ebd61
Полный исходный код + набор данных: https://github.com/jairiidriss/Gradient-Descent-and-Logistic-Regression
На этом пока все, спасибо за прочтение статьи, пожалуйста, если у вас есть какие-либо вопросы или разъяснения, не стесняйтесь обращаться ко мне, спасибо!