Из многочисленных интервью с Data Scientist есть несколько вопросов, которые мне часто задают, и один из них - «объясните, как работает логистическая регрессия». Я понимал концепцию на высоком уровне и знал, как ее реализовать, однако я застрял, когда меня попросили объяснить «что такое сигмовидная функция», «какую функцию стоимости использует логистическая регрессия и почему?» И т. Д. Я не мог ответить их. Более того, даже если вы не согласны с тем фактом, что его часто спрашивают на собеседовании, вам будет полезно иметь глубокое понимание того, как работает логистическая регрессия, поскольку она является основой для сложных алгоритмов, таких как несколько нейронных сетей.

Мы пройдем через логистическую регрессию по следующим шагам:

  1. Что такое логистическая регрессия
  2. Как обучить модель
  3. Как делать прогноз с помощью обученной модели

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

  • Алгоритм двоичной классификации → метки: «да или нет», «истина или ложь», «1 или 0» и т. Д.
  • Подобно линейной регрессии в том, что они сначала вычисляют взвешенную сумму входных данных (z), но разные, потому что вместо того, чтобы выводить ее напрямую, z передается в сигмовидную функцию, которая выводит вероятность того, что данный x принадлежит положительному классу (класс, который вы хотите, например: если вы хотите классифицировать рак или не классифицировать метку «рак» как положительный класс).
  • Он устойчив к коррелированным функциям, поэтому используется вместо наивного байесовского классификатора, когда наборы данных большие.

Модельное обучение

В основном это работает аналогично линейной регрессии, наиболее важной частью является поиск правильных весов для каждой характеристики (x-переменные), то есть весов (x0w0 + x1w1 +… + xnwn), которые дают наименьшие затраты при задании. в функцию стоимости, обратите внимание, что x0w0 - это член смещения (также известный как перехват).

Логистическая регрессия обучения можно разбить на два компонента:

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

Давайте импортируем зависимости и создадим примеры наборов данных, которые просто разделены диагональной линией, учащиеся в правом верхнем углу «Пройдено (1)» и учащиеся в левом нижнем углу «Не выполнено (0)». Мы будем использовать специально созданную модель логистической регрессии, чтобы предсказать, сдаст или не сдаст студент, учитывая время учебы и время сна.

данные, созданные выше, выглядят так:

Итак, теперь нам нужно рассчитать потерю перекрестной энтропии для каждого данных, но что такое потеря перекрестной энтропии?

Обратите внимание, что (w⋅x +b) , где b=w0x0 - это взвешенная сумма характеристик, введенных в сигмовидную функцию, которая затем выводит прогнозируемую вероятность того, что данный X (данные / студент) принадлежит к классу 1, и чтобы найти вероятность того, что X принадлежит классу 0, мы делаем 1-prob(class 1 | X) . Для расчета стоимости мы складываем логарифмическую вероятность класса 1 и 0, затем умножаем на -1, логарифмическая вероятность класса 1 = log(σ(z)) и class0 = log(1-σ(z)).

Перед тем, как реализовать его в Python, вот как выглядит сигмоидальная функция:

Это позволяет нам отображать [-inf, + inf] значение z в диапазон [0,1].

Вышеупомянутое уравнение применяется к каждой строке данных, а после его применения ко всем строкам среднее из них - это стоимость одной итерации, которую мы повторяем снова и снова, пока не найдем глобальный минимум (сходимость).

Резюме: Градиентный спуск - это метод, который находит минимум функции, выясняя, в каком направлении (в пространстве n_feature) наклон функции растет наиболее круто, а затем перемещается в противоположном направлении, пока slope = 0.

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

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

Мы вычитаем предыдущий вектор весов на (learning_rate * gradient_vector), затем мы получаем новый вектор весов, который будет введен в процессе следующей итерации, этот процесс повторяется.

Реализация градиентного спуска в коде, приведенный ниже код ссылается на https://ml-cheatsheet.readthedocs.io/en/latest/logistic_regression.html#training

Теперь давайте воспользуемся тем, что мы узнали до сих пор, для обучения модели логистической регрессии. Мы используем 90% наших данных для обучения со 100 итерациями, поскольку наши данные малы.

приведенный выше код выводит веса = [-0,33614273, 0,00188673, 0,10463643], что означает, что наш z = -0.336(bias) + 0.0019(studied) + 0.105(slept). Теперь, когда новому студенту дается много часов сна и учебы, мы можем прогнозировать, используя следующие три шага:

  1. Вычислите z с нашими изученными весами
  2. Передайте z в сигмовидную функцию, чтобы получить вероятность сдачи учащимся.
  3. Вероятность прохождения вводится в функцию принятия решения (Порог), которая выводит метку («Пройден или не пройден»). Пример: задано пороговое значение 0,5, вероятность ниже 0,5 будет выводить метку «Fail», а вероятность больше 0,5 - метку «Pass».

Прогноз

Теперь, имея 10% данных, мы рассчитаем производительность модели, насколько хорошо наша модель предсказывает «сдан или не пройден» с учетом часа сна и учебы учащегося.

Выполнение приведенного выше кода дает значение точности 0,9, что означает, что наша модель верна в 90% случаев.

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

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

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

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