Разбираем алгоритм логистической регрессии по частям

Этот пост проведет вас через логистическую регрессию с самых основ. Чтобы овладеть машинным обучением, необходимо четко понимать основы. Поначалу это может показаться утомительным, но как только вы овладеете идеальными основами, написание кода станет легкой прогулкой. Большинство постов пытаются охватить все за один присест, и, честно говоря, временами это становится ошеломляющим. Попытки понять сложные уравнения, а затем переключиться на код, а затем обратно к математике, только усложняют задачу. Цель этой серии статей - познакомить вас с машинным обучением с немного другим подходом. Сначала мы разберем алгоритм и разберемся с ним во всех деталях, после чего перейдем к реализации в следующем посте.

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



Хорошо, приступим!

Логистическая регрессия относится к категории контролируемых алгоритмов машинного обучения. Обучение с учителем охватывает два типа проблем:

  1. Проблемы регрессии
  2. Проблемы классификации (в центре нашего внимания в этом посте)

Логистическая регрессия относится к категории проблем классификации. Но что именно представляют собой эти «классификационные» проблемы? Проще говоря, задачи классификации пытаются предсказать результаты на дискретном выходе. Они пытаются сопоставить переменные по дискретным категориям. Также полезно помнить, что когда целевая переменная, которую мы пытаемся предсказать, является дискретной (например, в математическом смысле {4, 11} дискретна, а [4, 11] - непрерывный набор), то это проблема классификации.

Вот некоторые примеры проблем классификации:

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

В этих задачах мы пытаемся предсказать переменную y:

y = 0: отсутствие чего-либо (например, пользователь не купит, пассажир не выживет, доброкачественная опухоль и т. д.)

y = 1: наличие чего-либо (например, покупатель купит, пассажир выживет, злокачественная опухоль и т. д.)

Во всех приведенных выше примерах мы видим, что одна вещь похожа - это пространство вывода. Результатом является не какое-либо непрерывное значение, на самом деле это обычно дискретный набор (подумайте об этом как о вопросе «да / нет» и еще раз взгляните на приведенные выше примеры). Следовательно, наше выходное пространство дискретно.

Другой тип задач машинного обучения с учителем, то есть задачи регрессии, решаются с помощью линейной регрессии.

В любой задаче контролируемого обучения наша цель проста:

«Учитывая обучающий набор, мы хотим изучить функцию h: X → Y, чтобы h (x) был хорошим предсказанием для соответствующего значения y»

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

Основное различие между линейной регрессией и логистической регрессией - это функция гипотез h (x). Давайте начнем с двоичной классификации, а затем мы сможем легко расширить это представление до мультиклассовой классификации.

Функция гипотезы

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

g (z) - сигмовидная функция, а в нашем случае z = θ'x, где θ ' - транспонирование θ . Функция гипотезы теперь выглядит так:

Сигмовидная функция также называется логистической функцией. График сигмоидной функции выглядит так:

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

Но разве наши результаты не должны были быть дискретными?

Что ж, да, вывод нашего «классификатора» по-прежнему будет дискретным. Здесь мы говорим о выходе нашей функции гипотез h (x). Вы, наверное, уже догадались, что это означает, что точный исходный результат нашей функции гипотезы на самом деле не является результатом нашего классификатора. Итак, теперь давайте интерпретируем эту функцию гипотезы и посмотрим, чем она может помочь.

Функция гипотезы h (x) не является окончательным выводом нашего классификатора, на самом деле это вероятность того, что y = 1 с учетом ввода x . Например: если мы рассмотрим пример, когда письмо классифицируется как спам или нет, то h (x) = 0,6 означает, что существует 60% вероятность того, что письмо является спамом.

Следовательно, гипотезу также можно представить в виде

h(x) = P(y=1 | x ; θ)

В приведенном выше уравнении правая часть - это вероятность того, что y = 1 с учетом x, параметризованного θ. Мы должны помнить, что θ здесь - это вектор параметров в гипотезе. Поскольку сейчас мы говорим о двоичной классификации, совершенно ясно, что либо y = 0, либо y = 1, следовательно:

P(y=0 | x ; θ) = 1 — P(y=1 | x ; θ)

Функция гипотезы фактически создает линию или кривую, разделяющую области, где y = 0 и где y = 1. Эта линия или кривая и есть то, что мы называем границей решения. Теперь давайте, наконец, перейдем к той части, в которой мы находим результат нашей гипотезы.

Один из способов сделать это - предсказать y = 1, когда вывод h (x) больше или равен 0,5, и прогнозировать y = 0, если h (x) меньше 0,5. Теперь давайте еще раз взглянем на сигмовидную функцию:

Пока мы пришли к такому выводу:

y = 1, если h (x) ≥ 0,5 → область, отмеченная желтым на приведенном выше графике

y = 0, если h (x) ‹0,5 → область, отмеченная розовым на приведенном выше графике

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

g (z) ≥ 0,5, когда z ≥ 0 (оба отмечены желтым) и

g (z) ‹0,5 при z‹ 0 (оба отмечены розовым цветом).

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

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

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

Функция стоимости по существу находит «стоимость», которую мы хотим, чтобы наша модель понесла, если наш результат равен h (x), а фактический результат должен быть равен y. Поэтому интуитивно понятно, что стоимость на самом деле должна быть пропорциональна разнице между h (x) и y.

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

Функция стоимости для линейной регрессии выглядит следующим образом:

Мы не можем использовать эту функцию затрат для логистической регрессии, потому что разница в гипотезах линейной регрессии и логистической регрессии. Гипотеза логистической регрессии включает сигмовидную функцию и, следовательно, является сложной нелинейной функцией. Если бы мы взяли этот нелинейный h (x) и поместили его в приведенное выше уравнение для J (θ), мы бы получили невыпуклую функцию. Теперь это проблема, потому что сложная невыпуклая функция будет иметь много локальных оптимумов, и, следовательно, градиентный спуск будет становиться все более трудным. По этой причине нам нужна выпуклая функция, чтобы градиентный спуск мог найти глобальный минимум.

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

Итак, теперь наша функция стоимости выглядит примерно так:

Теперь давайте определим эту Стоимость:

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

Из приведенных выше графиков мы можем получить математическое представление о функции стоимости следующим образом:

Стоимость (h (x), y) = 0, если h (x) = y

Стоимость (h (x), y) → ∞, если y = 0 и h (x) → 1

Стоимость (h (x), y) → ∞, если y = 1 и h (x) → 0

Таким образом, это означает, что если правильный ответ должен быть y = 0, тогда наша функция стоимости будет равна 0, если наша функция гипотезы также выдает 0. Но если наша гипотеза приближается к 1, то наша функция затрат стремится к бесконечности ( ∞). Точно так же, если правильный ответ - 1, тогда наша функция стоимости будет равна 0, если наша гипотеза выдает 1, и приблизится к бесконечности (∞), если h (x) = 0. Это именно то, что мы хотим, чтобы наша функция стоимости выполняла. Мы хотим, чтобы модель не требовала затрат, если она предсказывает правильно, и максимальной стоимости, если она предсказывает полную противоположность правильной метке (y). Такое определение функции стоимости гарантирует, что J (θ) будет выпуклым для логистической регрессии.

Теперь давайте упростим нашу функцию Cost, используя определенную выше логику следующим образом:

Вы можете проверить это выражение для функции стоимости, подключив y = 0 и оценив выражение, а затем подключив y = 1 и снова оценив стоимость. Вы поймете, что получаете те же уравнения стоимости, которые мы определили ранее.

Теперь вся функция стоимости выглядит следующим образом:

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

Градиентный спуск

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



Для наших целей здесь мы сразу перейдем к алгоритму:

Здесь мы видим, что этот алгоритм фактически такой же, как тот, который мы видели в случае линейной регрессии. Единственное отличие, однако, заключается в определении функции гипотез h (x), которая является сигмоидной функцией в случае логистической регрессии. Вышеупомянутое уравнение является основным этапом «обновления» градиентного спуска, когда после минимизации cost мы пытаемся обновить наши параметры в правильном направлении. α - скорость обучения.

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

Мультиклассовая классификация: один против всех

Мы используем этот подход, когда у нас есть… ну, «несколько» классов (более 2 классов). Таким образом, наше y больше не равно 0 или 1, но y может принимать и другие дискретные значения. Помните, что хотя y = {0,1,…., N}, y по-прежнему дискретно.

Подход здесь на самом деле довольно прост. Мы разделим задачу на несколько (точнее, n + 1) задач двоичной классификации. В каждом из них мы прогнозируем вероятность того, что y является членом одного из наших классов. По сути, мы выбираем один класс и объединяем все остальные классы в один второй класс. Теперь это становится проблемой двоичной классификации, и мы знаем, как работать с ними. Результат этой задачи мини-бинарной классификации даст нам вероятность того, что пример находится в классе, который мы выбрали в качестве первого класса, который не был объединен с другими. Теперь мы просто повторяем это для каждого класса, а затем используем гипотезу, которая вернула наивысшее значение, в качестве нашего прогноза, потому что эта гипотеза показывает максимальную вероятность того, что наш прогноз окажется правильным. Следовательно, мы просто выбираем класс, который максимизирует h (x) или вероятность того, что y = 1.

Вот и все!

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

использованная литература

  1. Http://www.holehouse.org/
  2. Математика для машинного обучения Марка Питера Дайзенрота, А. Альдо Фейсал, Ченг Сун Онг »
  3. Https://www.coursera.org/learn/machine-learning/home/