Как выполнить логистическую регрессию в Python (шаг за шагом)

Как выполнить логистическую регрессию в Python (шаг за шагом)

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

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

log[p(X) / (1-p(X))] = β 0 + β 1 X 1 + β 2 X 2 + … + β p X p

куда:

  • X j : j -я предикторная переменная
  • β j : Оценка коэффициента для j -й переменной-предиктора

Формула в правой части уравнения предсказывает логарифмические шансы переменной ответа, принимающей значение 1.

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

p(X) = e β 0 + β 1 X 1 + β 2 X 2 + … + β p X p / (1 + e β 0 + β 1 X 1 + β 2 X 2 + … + β p X p )

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

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

В этом руководстве представлен пошаговый пример выполнения логистической регрессии в R.

Шаг 1: Импортируйте необходимые пакеты

Во-первых, мы импортируем необходимые пакеты для выполнения логистической регрессии в Python:

import pandas as pd
import numpy as np
from sklearn. model_selection import train_test_split
from sklearn. linear_model import LogisticRegression
from sklearn import metrics
import matplotlib.pyplot as plt

Шаг 2: Загрузите данные

В этом примере мы будем использовать набор данных по умолчанию из книги Introduction to Statistical Learning.Мы можем использовать следующий код для загрузки и просмотра сводки набора данных:

#import dataset from CSV file on Github
url = "https://raw.githubusercontent.com/Statology/Python-Guides/main/default.csv"
data = pd.read_csv (url)

#view first six rows of dataset
data[0:6]

 default student balance income
0 0 0 729.526495 44361.625074
1 0 1 817.180407 12106.134700
2 0 0 1073.549164 31767.138947
3 0 0 529.250605 35704.493935
4 0 0 785.655883 38463.495879
5 0 1 919.588530 7491.558572 

#find total observations in dataset
len(data. index )

10000

Этот набор данных содержит следующую информацию о 10 000 человек:

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

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

Шаг 3. Создайте обучающую и тестовую выборки

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

#define the predictor variables and the response variable
X = data[['student', 'balance', 'income']]
y = data['default']

#split the dataset into training (70%) and testing (30%) sets
X_train,X_test,y_train,y_test = train_test_split (X,y,test_size=0.3,random_state=0) 

Шаг 4: Подберите модель логистической регрессии

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

#instantiate the model
log_regression = LogisticRegression()

#fit the model using the training data
log_regression. fit (X_train,y_train)

#use model to make predictions on test data
y_pred = log_regression. predict (X_test)

Шаг 5: Диагностика модели

Как только мы подойдем к регрессионной модели, мы сможем проанализировать, насколько хорошо наша модель работает с тестовым набором данных.

Во-первых, мы создадим матрицу путаницы для модели:

cnf_matrix = metrics. confusion_matrix (y_test, y_pred)
cnf_matrix

array([[2886, 1],
 [ 113, 0]])

Из матрицы путаницы мы видим, что:

Истинно положительных предсказаний: 2886

Истинно отрицательные прогнозы: 0

Ложноположительные прогнозы: 113

Ложноотрицательные прогнозы: 1

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

print(" Accuracy:",metrics. accuracy_score (y_test, y_pred))l

Accuracy: 0.962

Это говорит нам о том, что модель сделала правильный прогноз относительно того, будет ли человек не выполнять свои обязательства в 96,2% случаев.

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

Чем выше AUC (площадь под кривой), тем точнее наша модель может предсказывать результаты:

#define metrics
y_pred_proba = log_regression. predict_proba (X_test)[::,1]
fpr, tpr, _ = metrics. roc_curve (y_test, y_pred_proba)
auc = metrics. roc_auc_score (y_test, y_pred_proba)

#create ROC curve
plt.plot (fpr,tpr,label=" AUC= "+str(auc))
plt.legend(loc=4)
plt.show()
Кривая ROC в Python

Полный код Python, использованный в этом руководстве, можно найти здесь .

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.