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


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

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

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

Золото:

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

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

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

p(X) = e β 0 + β 1 X 1 + β 2 X 2 + + β 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. Загрузите данные

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

 #import dataset from CSV file on Github
url = "https://raw.githubusercontent.com/Statorials/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. Подберите модель логистической регрессии

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

 #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, используемый в этом уроке, можно найти здесь .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *