В этой статье давайте демистифицируем весь ажиотаж вокруг Обнаружения Рака или определения того, состоит ли изображение из Собаки или Кошки, или, возможно, даже определить, было ли письмо, которое вы получили на прошлой неделе, которое гласит: «Эй, вы выиграли в лотерею» спам это или нет. По сути, все эти формулировки проблемы можно в общих чертах отнести к категории — Классификация. Эти типы задач весьма интересны, потому что диапазон наборов задач, которые вы можете найти в области классификации, огромен, и они очень интригуют и доставляют вам удовольствие работать над ними и, надеюсь, иметь это: «Да, мой алгоритм может обнаружить опухоль на снимке МРТ».

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

Что такое логистическая регрессия?

Логистическая регрессия — это метод классификации данных по дискретным результатам. Например, мы можем использовать логистическую регрессию, чтобы классифицировать электронное письмо как спам или не спам. Что я имею в виду, когда говорю: «Дискретные результаты»? — Когда вам нужно предсказать значение интервала дискретного класса. То есть в случае обнаружения рака у вас есть два различных класса, которые вы можете предсказать. Либо у пациента диагностирован рак, либо нет. Здесь в нашем интервале классов всего два значения. Ответ «Да» или «Нет». Положительный или отрицательный. Правда или ложь. 1 или 0. Неудивительно, что эти два бита управляют всей компьютерной наукой и электроникой.

Чтобы попытаться классифицировать, мы можем просто сопоставить все предсказания больше 0,5 как 1 и все меньше 0,5 как 0, чтобы представить двоичную систему. Однако этот метод работает не во всех случаях проблем с машинным обучением. Нам нужно разработать что-то лучше этого. Классификация аналогична частному случаю регрессии, за исключением того, что в этом случае нас интересует классификация данной точки данных по дискретным классам, а именно {0, 1, 2… n}. Давайте теперь определим функцию гипотезы.

Представление функции гипотезы

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

Это всегда помогает визуализировать функции. Вот представление приведенного выше выражения:

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

Но как все это работает в нашем случае? — «X» — это вектор, представляющий особенности конкретной постановки задачи, которую вы выбираете, и который умножается на оптимизированные тета-значения. Когда вы передаете этот результат в сигмовидную функцию, вы получите вектор значений, представляющий вероятность от 0 до 1. Чем ниже значение, тем ближе оно к классу «Нет», и чем выше значение, тем ближе оно к классу «Да». Так просто. Звучит отлично? Теперь поговорим о границах принятия решений.

Граница принятия решения

Давайте узнаем об этом в увлекательной игровой форме. Предположим, вы поступаете в новое учреждение. Перед тем, как вы присоединитесь, они проведут пару тестов, и на основе полученных вами баллов они решат, участвуете вы или нет. Назовем тех, кто входит, «Допущенными», а тех, кто нет, «Не допущенными». У вас есть несколько точек данных студентов, которые были приняты и которые ранее не основывались на их баллах, и вы нанесли их на график. Вот как это выглядит:

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

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

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

Обратите внимание, что с помощью простого условия if/else мы можем определить функцию стоимости для этого конкретного обучающего примера в зависимости от переменной «y». Когда значение/выход для этого обучающего примера относится к классу «1», или «Истина», или «Да», или «Рак», или что-то положительное — мы определяем стоимость как отрицательный логарифм функции гипотезы. Когда это «0», или «Нет», или «Отрицательно», или «Не рак», это отрицательный логарифм единицы, вычитаемой из гипотезы. Если все это звучит сложно, есть изящный трюк, чтобы упростить это:

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

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

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

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

Общая форма алгоритма градиентного спуска выглядит следующим образом, и мы будем использовать ее и для этого алгоритма.

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

Логистическая регрессия в действии

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

Это только начало вашего путешествия в мир классификации. Вы можете многое сделать здесь. Много крутых вещей, которые обыватели считают суперсилой. От беспилотных автомобилей до потенциального обнаружения рака. При этом вы также косвенно узнали о нейронных сетях — современном алгоритме глубокого обучения. Логистическая регрессия — это скорее абстрактное представление однослойной нейронной сети. Я планирую написать о них больше в ближайшее время, так что следите за обновлениями.

До тех пор никогда не прекращайте учиться и поверьте мне, вы можете научиться чему угодно!

Для драгоценных, с терпением.