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

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

Итак, не теряя времени, давайте начнем с нашей статьи.

Когда использовать логистическую регрессию?

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

Математическая сессия

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

z = w.x + b, где w – это вес, x – функция, а b – смещение.

Когда мы решаем приведенные выше уравнения, используя любое значение w и b, это должно дать нам результат нашего класса. Но есть небольшая проблема с приведенным выше уравнением. Метки классов в двоичной классификации могут быть либо 0, либо 1, но приведенное выше уравнение может дать нам любое действительное число. Но не волнуйтесь, у нас есть решение этой проблемы.

Сигмовидная функция для спасения

Теперь давайте обсудим сигмовидную функцию. Сигмовидная функция принимает в качестве входных данных любое действительное число и выдает в качестве выходных значений значения от 0 до 1. Эти значения можно рассматривать как вероятности. Как видно на сигмовидном графике при значении x->∞, y->1 и при x->-∞, y->0. Таким образом, значение y остается между 0 и 1. Сигмовидный график разрезает ось y на 0,5, когда z равно нулю.

Итак, как мы используем это в логистической регрессии? На самом деле сигмоид — это то, что дало название логистической регрессии. Уравнение z = w.x +b дает результат, который может быть любым действительным числом, теперь, если мы передадим z сигмовидной функции, мы получим результат от 0 до 1, который является вероятностью нашего класса.

Функция стоимости

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

В приведенной выше функции потерь y представляет фактическое значение, а p представляет прогнозируемое значение или выходное значение (z) в нашем уравнении гипотезы.

Теперь попробуем интерпретировать приведенное выше уравнение, разбив его на две части.

Когда фактическая метка (y) равна нулю, тогда функция стоимости становится -log (1-p), а график -log (1-p)

Как вы можете видеть на приведенном выше графике, если значение p (или z в нашем уравнении гипотез) дает выходной ноль, тогда ошибка равна нулю (поскольку и фактическое, и прогнозируемое значение одинаковы), и если прогнозируемое значение равно единице, задано фактическое значение 0. Функция стоимости достигает большого значения.

Небольшое домашнее задание: попробуйте построить график логарифмической функции стоимости при y=1 и сделать вывод.

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

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

Но как нам найти оптимальное значение для «w» и «b». Мы, наши исследователи-математики, уже давно придумали способ для этого.

Оптимизация с использованием градиентного спуска

Градиентный спуск — один из самых важных алгоритмов в мире машинного обучения. Градиентный спуск поможет нам найти значения «w» и «b», чтобы значение нашей функции стоимости стало минимальным, и мы увидим это с помощью график

Небольшое резюме: ранее мы обсуждали, что мы не будем использовать среднеквадратичную ошибку для логистической регрессии, и причина в том, что это не дает нам график чашеобразной или выпуклой формы, как указано выше. Преимущество этого графика в том, что есть только один глобальный минимум (красная точка внизу) и нет локальных минимумов, поэтому независимо от того, каковы наши начальные значения w и b, он будет сходиться к точке глобального минимума.

Уравнение градиентного спуска задается как

Давайте разберемся в этом уравнении

  1. Qj представляет любой параметр в нашей гипотезе. В нашем случае у нас есть «w» и «b»
  2. α представляет собой скорость обучения, т. е. насколько быстро или медленно вы хотите обновлять параметры.
  3. ∂J(Q)/∂Qj производная, чтобы найти, как функция стоимости изменится, когда мы изменим наши параметры на крошечный бит (также называемый наклоном касательного сечения в точке).

Теперь давайте посмотрим, почему работает градиентный спуск.

Давайте разберемся с приведенным выше графиком. Предположим, мы вычисляем градиент, и он оказывается положительным. Теперь в нашем уравнении градиентного спуска (см. рисунок 5), если градиент положительный, то значение Q (здесь w будет уменьшаться или двигаться к менее положительному значению) и наоборот для отрицательного градиента. Проверьте это с помощью ручки и бумаги и попробуйте решить.

Наконец-то мы рассмотрели все ингредиенты. Давайте приготовим рецепт сейчас.

  1. Во-первых, мы увидим, является ли проблема бинарной классификацией. Если да, то мы знаем, что можем использовать логистическую регрессию.
  2. Мы примем гипотезу, т.е. z = w*x+b
  3. Теперь мы воспользуемся сигмовидной функцией активации и пропустим через нее z, чтобы получить результат в диапазоне {0,1}.
  4. Теперь мы определим нашу функцию стоимости, которая в нашем случае представляет собой потерю журнала.
  5. Наконец, мы воспользуемся нашим алгоритмом градиентного спуска и продолжим итерацию, пока не получим значения w и b, при которых потери будут минимальными.

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

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