Объяснено и реализовано

Логистическая регрессия — это регрессионный анализ, используемый, когда зависимая переменная является бинарной категориальной. Целевое значение равно True или False, 1 или 0. Однако, несмотря на то, что обычно используется двоичный код, также можно проводить многоклассовую классификацию путем внесения некоторых изменений.

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

Логистическая регрессия использует s-образную кривую (логистическая функция) вместо линейной линии. Хотя это функция вероятности и дает значение вероятности, для классификации используется логистическая регрессия. Он возвращает 1, если вероятность выше 0,5 (50%), и 0, если ниже. Как и в случае множественной линейной регрессии, в модель можно включить более одной независимой переменной. Точно так же он может работать как с непрерывными переменными, так и с дискретными категориальными переменными как с независимыми переменными.

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

Максимальная вероятность

Цель здесь состоит в том, чтобы найти параметры заданных данных. Найдем такие параметры, которые максимизируют вероятность. Он оценивает параметр, и этот параметр является постоянной переменной. Конечная цель состоит в том, чтобы найти этот параметр и подобрать наиболее подходящее распределение данных с помощью этого параметра (параметров). Существуют различные типы распределений, такие как нормальное, экспоненциальное, гамма-распределение, распределение Пуассона и т. д. Когда вы подгоните одно из этих распределений к данным, вам будет легче объяснить и использовать данные.

Допустим, мы измерили минуту подачи первого углового в 20 различных футбольных матчах Лиги чемпионов. Мы должны найти наилучшее распределение по этим данным. Мы будем использовать нормальное распределение, которое первым приходит на ум (а также, как мы узнаем, когда смотрим на данные).

Мы пытаемся найти лучшее распределение, которое дает максимальную вероятность. У нас есть два параметра в нормальном распределении, среднее значение и стандартное отклонение. Затем наша цель — найти среднее значение и стандартное отклонение, которые дадут максимальную вероятность.

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

Сначала мы перекодируем логистическую регрессию с нуля. В конце статьи вы найдете реализацию sklearn.

Вы можете получить код из этой записной книжки Kaggle.

Класс логистической регрессии в Python

Данные

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

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

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

Модель

Класс логистической регрессии:

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

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

Затем вычисляется сигмовидная функция путем прогнозирования с использованием весов и входных данных.

Позже мы рассчитываем потери и добавляем их в список (или максимальную вероятность).

Наша цель состояла в том, чтобы свести к минимуму потери путем обновления весов (так называемая подгонка). Для этого воспользуемся методом градиентного спуска. Это производная потерь по весам. С этим значением мы обновляем веса в каждую эпоху.

Наконец, мы можем предсказать тестовые данные и проверить матрицу путаницы, чтобы оценить нашу модель.

Неплохой результат для универсальной модели.

Реализация Sklearn

from sklearn.linear_model import LogisticRegression

Параметры;

штраф:нет’: штрафа нет; ‘l2’: добавить штраф L2; «l1»: добавляется штраф L1, «elasticnet»: добавляются штрафные условия L1 и L2.

двойной: если ваш n_samplen_feature, выберите False. Если установлено значение True, вы можете реализовать штраф L2 только с помощью решателя liblinear.

tol: допустимый критерий остановки. по умолчанию = 1e-4

C: это должно быть положительное число с плавающей запятой. Это обратная сила регуляризации (1/лямбда). Более высокий C означает меньшую регуляризацию. по умолчанию = 1,0

fit_intercept: хотите добавить константу, как мы сделали выше? по умолчанию = Истина

intercept_scaling: полезно, если вы используете решатель «liblinear» и если fit_intercept также имеет значение True. Вы можете масштабировать значение перехвата. по умолчанию = 1

class_weight: вы можете указать веса в словарном типе. Или вы можете использовать режим «сбалансированный», чтобы автоматически настроить веса пропорционально обратной частоте классов. по умолчанию = Нет

random_state: определение случайности

решатель: варианты: {'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}, по умолчанию = 'lbfgs '

liblinear — хороший выбор для небольших наборов данных. «sag» и «saga» более быстрые для больших наборов данных. Если ваш случай представляет собой многоклассовую классификацию, вы можете использовать только 'newton-cg', 'sag', 'saga' и 'lbfgs'. Не все типы работают со всеми параметрами регуляризации.

max_iter: максимальное количество итераций. по умолчанию = 100

multi_class: варианты: {'auto', 'ovr','multinomial'}, по умолчанию = "auto". ovr для бинарной задачи. Вы не можете использовать полиномиальный, если решатель liblinear.

подробно:параметр регистрации.

warm_start: установите True, если хотите повторно использовать предыдущее решение.

n_jobs: Запускать параллельно, сколько процессоров?

l1_ratio: гиперпараметр регуляризации l1.

Атрибуты:

classes_ : метки классов классификатора.

coef_ : коэффициенты.

intercept_: перехват

n_features_in_ : сколько функций используется в fit?

feature_names_in_: имена функций, используемых в подборе.

n_iter_: фактическое количество итераций.

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

Заключение

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

Читать далее…



Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.