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

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

В области Data Science процесс важнее результата

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

Если вы еще не прошли через это, перейдите по ссылке ниже:



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

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

  • Как показатели продаж меняются в зависимости от количества рабочих часов?
  • Как возраст влияет на успеваемость спортсмена?

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

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

С этой информацией давайте начнем сегодняшнее занятие по логистической регрессии, на котором мы рассмотрим

  1. Что такое логистическая регрессия?
  2. Как это работает?
  3. Типы логистической регрессии
  4. Реализация модели логистической регрессии с помощью Python
  5. Линейная регрессия против логистической регрессии

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

Согласно вики,

В статистике логистическая модель (или логит-модель) используется для моделирования вероятности существования определенного класса или события, например, прошел / не прошел, выиграл / проиграл. , живым / мертвым или здоровым / больным. Это может быть расширено для моделирования нескольких классов событий, таких как определение того, содержит ли изображение кошку, собаку, льва и т. Д. Каждому обнаруживаемому на изображении объекту будет присвоена вероятность от 0 до 1 и сумма, добавленная к единице.

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

Знакомый пример логистической регрессии:

  • Фильтр спама в электронной почте: спам / нет спама
  • Обнаружение мошенничества: транзакция мошенническая, да / нет
  • Опухоль: доброкачественная / злокачественная

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

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

Логистическая модель: сигмовидная функция:

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

hθ(x) = g(θ T x) = 1/ 1 + e −θ T x

Здесь g (z) = 1 / (1 + e ^ −z) называется l логической функцией или сигмовидной функцией:

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

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

Математика, лежащая в основе логистической функции:

Шаг 1: Отнесение входов к классу 0 или 1.

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

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

Логарифмические шансы (функция логита):

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

Эти шансы, которые напоминают подобие линейной регрессии, называются логитом.

Итак, логит - это журнал шансов, а шансы являются функцией P. В логистической регрессии мы находим

logit (P) = a + bX,

Шаг 2: Определение граничных значений шансов

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

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

Ложноположительная ошибка возникает, когда модель предсказывает класс 1, но наблюдение фактически относится к классу 0. Ложноотрицательная ошибка делается, когда модель предсказывает класс 0, но наблюдение фактически принадлежит классу 1. Идеальная модель классифицирует все. правильно классифицирует: все единицы (или истины) как единицы, и все нули (или ложь) как нули. Таким образом, у нас будет FN = FP = 0.

Пороговые значения Воздействие:

1. Более высокое пороговое значение

Предположим, что P (y = 1) ›0,7. Модель является более строгой при отнесении к единице, и поэтому будет сделано больше ложноотрицательных ошибок.

2. Нижнее пороговое значение:

Предположим, если P (y = 1) ›0,3.

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

Матрица неточностей: способ выбора эффективного порогового значения:

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

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

Ключевые части матрицы путаницы:

  • Истинно-положительный (TP): это относится к случаям, в которых мы предсказали «ДА», и наш прогноз был на самом деле ИСТИНА
    ( Например, у пациента действительно диабет, и вы предсказали, что это правда)
  • Истинно-отрицательный (TN): это относится к случаям, в которых мы предсказали «НЕТ», а наш прогноз был на самом деле ИСТИНА
    ( Например, у пациента нет диабета, и вы предсказывали то же самое.)
  • Ложный положительный результат (FP): относится к случаям, когда мы предсказывали «ДА», но наш прогноз оказался ЛОЖНЫЙ
    . (Пациент не болел диабетом, но наша модель предсказывала, что он / она диабетик)
  • Ложноотрицательный (FN): относится к случаям, когда мы предсказывали «НЕТ», но наш прогноз оказался ЛОЖНЫЙ.

Ключевые показатели обучения из матрицы заблуждений:

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

Точность:

Он отвечает:

В целом, как часто классификатор верен?

Точность = (TP + TN) / общее количество секретных предметов = (TP + TN) / (TP + TN + FP + FN)

Точность:

Он отвечает:

Когда прогноз "да", как часто он оказывается правильным?

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

Точность = TP / (TP + FP)

Отзывать:

Он отвечает:

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

Он рассчитывается как,

Напоминание = TP / (TP + FN), также известное как чувствительность.

f1-счет:

Это просто гармоничное среднее значение точности и запоминания:

Он рассчитывается как,

f1-score = 2 * ((точность * отзыв) / (точность + отзыв))

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

Кроме того, если вы попытаетесь оптимизировать точность, ваша модель будет предсказывать очень мало примеров как положительные результаты (те, которые имеют наибольшую вероятность), но отзыв будет очень низким. Таким образом, может быть полезно сбалансировать и рассмотреть и то, и другое и увидеть результат.

Площадь AUC под кривой:

Еще одна полезная метрика для оценки и сравнения прогнозных моделей - это

Кривая ROC:

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

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

Специфичность или истинно отрицательный коэффициент = TN / (TN + FP)

Чувствительность или истинно положительный коэффициент = TP / (TP + FN)

Итак, частота ложных срабатываний = 1 - специфичность

Интуиция за кривой ROC:

Модель, которая предсказывает случайность, будет иметь кривую ROC, которая выглядит как диагональная зеленая линия (как показано выше на рис.). Это не различающая модель. Чем дальше кривая от диагональной линии, тем лучше модель в целом распознает положительные и отрицательные стороны.

Типы логистической регрессии:

  • Бинарная логистическая регрессия : имеет только два возможных результата. Пример: да или нет
  • Полиномиальная логистическая регрессия: имеет три или более номинальных категорий. Пример: кошка, собака, слон.
  • Порядковая логистическая регрессия. Она имеет три или более порядковых категорий. Порядковый номер означает, что категории будут располагаться по порядку. Пример: оценки пользователей (1–5).

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

Реализация логистической регрессии:

Мы собираемся охватить это упражнение по построению модели в следующих этапах:

  • Чтение данных
  • Анализ данных (базовый EDA / описательный анализ)
  • Обучение и тестирование (разделите образцы данных на два набора)
  • Отчет о точности (измерение производительности модели с помощью матрицы неточностей, о которой мы говорили выше)

Основная цель:

Для прогнозирования диабета с помощью классификатора логистической регрессии.

1. Загрузка данных:

Мы будем использовать набор данных индейского диабета пима из Kaggle, предоставленный UCI ML. Загрузите данные по следующей ссылке:

Напишите / скопируйте приведенный ниже код и запустите его в своем ноутбуке Juypter (убедитесь, что вы установили дистрибутив anaconda в вашей системе). Когда вы запустите этот фрагмент кода, вы увидите результат, как показано на рис. 1.0.

#Importing the required packages to load and analyze pima-indian-#diabetes.csv data setimport numpy as np
import pandas as pd
# load dataset
pima_df = pd.read_csv(“pima-indians-diabetes.csv”)
pima_df.head(10)

Исследовательский анализ данных:

Давайте изучим данный набор данных, чтобы найти

  • Нечисловые значения
  • Отсутствует / пустое значение

Нечисловой анализ и анализ нулевого значения:

Напишите следующий фрагмент кода и скомпилируйте его:

# Let us check whether any of the columns has any value other than #numeric i.e. data is not corrupted such as a “?” instead of
## a number. And also find if there are any columns with 
# null/missing values
print(pima_df[~pima_df.applymap(np.isreal).all(1)])
null_columns=pima_df.columns[pima_df.isnull().any()]print(pima_df[pima_df.isnull().any(axis=1)][null_columns].head())

Выход:

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

Описательный анализ:

Давайте проведем описательный анализ, чтобы найти

  • Асимметрия
  • Выбросы
  • Среднее и медиана
  • Корреляция с использованием парного графика.

Мы можем проанализировать каждый столбец, используя метод pandas describe (), чтобы получить статистическую сводку всех атрибутов. Этот анализ помогает нам определить, какой столбец сильно искажен, как выглядят хвосты, каковы средние, медианные и квартильные значения каждого столбца.

Запишите / скопируйте следующий код в свой блокнот и скомпилируйте его:

#import seaborn as sns, numpy as np#Let’s Do Some Descriptive #Analysis using
pima_df.describe().T
ax = sns.distplot(pima_df[‘test’])

Выход:

Быстрое наблюдение:

  • Данные почти для всех атрибутов искажены, особенно для переменной «test». Среднее значение для теста составляет 80 (округлено), а медиана - 30,5, что ясно указывает на очень длинный хвост справа, что можно увидеть на графике распределения морских волн, который был построен выше.
  • Такие атрибуты, как пласт, пресс, кожа и масса, выглядят нормально.

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

Анализ парных графиков.

#Piarplot Data Visualization, введите этот код и посмотрите результат

sns.pairplot(pima_df, diag_kind =’kde’)

Визуализация парного сюжета

  • Некоторые атрибуты preg, test, pedi, age имеют экспоненциальное распределение
  • Возраст, вероятно, должен иметь нормальное распределение, но из-за ограничений на сбор данных мог привести к асимметричному распределению.
  • Нет очевидной связи между возрастом и началом диабета.
  • Нет очевидной связи между функцией pedi и развитием диабета.
  • Диаграммы разброса для всех атрибутов ясно показывают, что между ними практически нет никакой связи, поскольку наблюдается в основном распределение типов облаков.

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

#write the given code print(“group by class:”, pima_df.groupby([“class”]).count())

Ключевые выводы:

  • Большинство признаков не диабетические. Соотношение почти 1: 2 в пользу или класс 0 (без диабета). Имеется 500 записей для недиабетического класса и 268 для диабетического, что сделает нашу модель более предвзятой в прогнозировании класса 0 лучше, чем для класса 1 (диабетик).
  • Следовательно, рекомендуется собрать еще несколько образцов, взвешивая оба класса в достаточной степени, чтобы сделать нашу модель более производительной и эффективной. А пока давайте приступим к построению нашей логистической модели и посмотрим, как она соотносится с заданным фреймом данных.

Логистическая модель с использованием SkLearn и Python:

Импортируйте пакеты Sklearn:

Импортируйте модель LogisticRegression и другие необходимые пакеты из пакета Python sklearn, как показано ниже:

from sklearn.linear_model import LogisticRegressionimport matplotlib.pyplot as plt
#To Split our Data set into training and test data
from sklearn.model_selection import train_test_split
# To calculate accuracy measures and confusion matrix
from sklearn import metrics

Разделить данные на данные обучения и тестирования:

# select all rows and first 8 columns which are the 
#independent attributes:
X = array[:,0:8]
# select all rows and the 8th column which is the target column 
#classification
# “Yes”, “No” for diabetes(Dependent variable)
Y = array[:,8]
# Taking 70:30 training and test data set
test_size = 0.30 
# Random number seeding for reapeatability of the code
seed =1
#Splitting Data into train-test where 70% will be used for training #and rest 30% for Testing our model built on test data
X_train,X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=seed)

Давайте обучим нашу модель:

# Use method LogisticRegression() imported from sklearn 
Logistic_model = LogisticRegression()
#Let’s pass our training data sets which are X_train and y_train #Our fit method below actually do all the heavy lifting to come up #with sigmoid function which we discussed earlier
# So here we get our optimal surface which will be our final model
Logistic_model.fit(X_train, y_train)

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

#Let’s pass X-Train data to our model and see how it predicts to
# label all the independent training data as shown below: 
y_predict= model.predict(X_test)print(“Y predict/hat “, y_predict)
#compile the code and you will see the output as given below

Вывод:

Вы можете видеть, что с помощью функции model.predict (X_test) наша модель классифицировала каждый атрибут столбца (X-train) как 0/1 в качестве прогноза

Время измерить эффективность модели (в баллах)

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

#coefficient can be calculatedas shown below making use of #model.coef_ method
colum_label = list(X_train.columns) 
# To label all the coefficient
model_Coeff = pd.DataFrame(model.coef_, columns = column_label)
model_Coeff[‘intercept’] = model.intercept_
print(“Coefficient Values Of The Surface Are: “, model_Coeff)
Observation:
#When you compile this code you will get the output as shown below. #This is a kind of linear model which has below-given coefficients #and intercept of -5.058877.
# These values are nothing but the
# z= 0.094Preg+0.0255Plas+…..+(-5.05)
# Which, get’s fed into our Sigmoid function
# sigmoid, g(z) = 1/( 1 + e ^−z).

Оценка модели:

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

#Pass the test data and see how our best fit model scores against #them
logmodel_score = model.score(X_test, y_test)
print(“This is how our Model Scored:\n\n”, logmodel_score)

Наблюдение:

  • Оценка модели составляет 0,774, что в процентном отношении составляет 77,4%.
  • Это не на должном уровне. Также необходимо указать здесь, что ранее мы обсуждали, как класс диабетиков был недостаточно представлен по сравнению с классом недиабетиков с точки зрения выборочных данных.
  • поэтому нам редко следует полагаться на эту модель и проводить дальнейшие измерения, используя метрики уровня класса матрицы путаницы (отзыв, точность и т. д.)

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

# Note That In Confusion Matrix
# First argument is true values,
# Second argument is predicted values
# this produces a 2x2 numpy array (matrix)
print(metrics.confusion_matrix(y_test, y_predict))# Lets run this and see the outcome below:

Наблюдение:

  • Наш метод metrics.confusion_matrix дает квадратную матрицу, показанную выше, где находится наша модель. Где X_test - наша строка, а y_predict - наши значения столбца. Наша матрица путаницы дает следующий результат, который показывает, что наша модель
  • Правильно предсказал, что 47 пациентов страдают диабетом (Истинно положительный) и 132 - не страдают диабетом (Истинно отрицательный)
  • Верно: 14 пациентов будут диабетиками (Ложно-положительный), а 38 - недиабетическим (Ложно-отрицательный )

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

Отзывать:

Напомним (Для людей, не страдающих диабетом) = TP / (TP + FN)

Здесь TP = 132,

FN= 14

So,

Отзыв = 132 / (132 + 14) = 132/146 = 0,90 = 90%

Напомним (Для диабетиков) = TP / (TP + FN)

TP = 47, FN = 38

Отзыв (для диабетиков) = 47/85 = 0,55 = 55%

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

Точность:

  • Точность (для недиабетиков) = TP / (TP + FP) = 132/170 = 0,77 = 77%
  • Точность (для диабетиков) = TP / (TP + FP) = 47/61 = 0,77 = 77%

что является низким, особенно с учетом характера проблемы (здесь, в сфере здравоохранения), которую мы пытаемся решить там, где ожидается точность более 95%.

Что дальше?

  • Мы рассмотрим наивную модель классификатора Байера, которая представляет собой своего рода вероятностную модель, основанную на применении теоремы Байеса с сильными (наивными) предположениями о независимости между функциями.
  • Будет реализована модель классификатора Наивного Байера с использованием Python.

Сравнение линейной и логистической регрессии:

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

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

До скорой встречи в следующей части контролируемого обучения ……….