Jak przeprowadzić regresję logistyczną w pythonie (krok po kroku)


Regresja logistyczna to metoda, której możemy użyć do dopasowania modelu regresji, gdy zmienna odpowiedzi jest binarna.

Regresja logistyczna wykorzystuje metodę zwaną estymacją największej wiarygodności w celu znalezienia równania w następującej postaci:

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

Złoto:

  • X j : j- ta zmienna predykcyjna
  • β j : estymacja współczynnika dla j -tej zmiennej predykcyjnej

Wzór po prawej stronie równania przewiduje logarytm szansy , że zmienna odpowiedzi przyjmie wartość 1.

Zatem dopasowując model regresji logistycznej, możemy użyć poniższego równania do obliczenia prawdopodobieństwa, że dana obserwacja przyjmie wartość 1:

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

Następnie używamy pewnego progu prawdopodobieństwa, aby sklasyfikować obserwację jako 1 lub 0.

Na przykład możemy powiedzieć, że obserwacje z prawdopodobieństwem większym lub równym 0,5 zostaną sklasyfikowane jako „1”, a wszystkie inne obserwacje zostaną sklasyfikowane jako „0”.

W tym samouczku przedstawiono krok po kroku przykład wykonania regresji logistycznej w języku R.

Krok 1: Zaimportuj niezbędne pakiety

Najpierw zaimportujemy niezbędne pakiety, aby wykonać regresję logistyczną w Pythonie:

 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

Krok 2: Załaduj dane

W tym przykładzie użyjemy domyślnego zestawu danych z książki Wprowadzenie do uczenia się statystycznego . Możemy użyć następującego kodu, aby załadować i wyświetlić podsumowanie zbioru danych:

 #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

Ten zbiór danych zawiera następujące informacje na temat 10 000 osób:

  • default: wskazuje, czy dana osoba nie wywiązała się ze zobowiązania, czy nie.
  • student: wskazuje, czy dana osoba jest studentem, czy nie.
  • saldo: Średnie saldo utrzymywane przez osobę.
  • dochód: Dochód osoby fizycznej.

Wykorzystamy status studenta, stan konta bankowego i dochody, aby skonstruować model regresji logistycznej, który przewiduje prawdopodobieństwo niewypłacalności danej osoby.

Krok 3: Utwórz próbki szkoleniowe i testowe

Następnie podzielimy zbiór danych na zbiór uczący, na którym będziemy trenować model, oraz zbiór testowy, na którym będziemy testować model.

 #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)

Krok 4: Dopasuj model regresji logistycznej

Następnie użyjemy funkcji LogisticRegression(), aby dopasować model regresji logistycznej do zbioru danych:

 #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)

Krok 5: Diagnostyka modelu

Po dopasowaniu modelu regresji możemy następnie przeanalizować działanie naszego modelu na testowym zbiorze danych.

Najpierw utworzymy macierz zamieszania dla modelu:

 cnf_matrix = metrics. confusion_matrix (y_test, y_pred)
cnf_matrix

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

Z macierzy zamieszania widzimy, że:

  • #Prawdziwie pozytywne przewidywania: 2886
  • #Prawdziwie negatywne przewidywania: 0
  • #Fałszywie pozytywne przewidywania: 113
  • #Fałszywe negatywne przewidywania: 1

Możemy również uzyskać model dokładności, który informuje nas o procentowym przewidywaniu korekt dokonanym przez model:

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

Accuracy: 0.962

To mówi nam, że model prawidłowo przewidział, czy dana osoba nie wywiąże się ze zobowiązań w 96,2% przypadków.

Na koniec możemy wykreślić krzywą charakterystyki działania odbiornika (ROC), która wyświetla procent prawdziwie pozytywnych wyników przewidywanych przez model, gdy próg prawdopodobieństwa przewidywania zostanie obniżony z 1 do 0.

Im wyższy AUC (obszar pod krzywą), tym dokładniej nasz model jest w stanie przewidzieć wyniki:

 #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 ()

Krzywa ROC w Pythonie

Pełny kod Pythona użyty w tym samouczku można znaleźć tutaj .

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *