[PYTHON] Logistic Return (für Anfänger) -Code Edition-

Dieses Mal werde ich die Implementierung der logistischen Regression zusammenfassen.

■ Logistikverfahren

Wir werden mit den folgenden 6 Schritten fortfahren.

  1. Vorbereitung des Moduls
  2. Datenaufbereitung
  3. Datenvisualisierung
  4. Erstellen Sie ein Modell
  5. Vorhersage der Klassifizierung
  6. Modellbewertung

1. Vorbereitung des Moduls

Importieren Sie zunächst die erforderlichen Module.


import numpy as np
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#Visualisierungsmodul
import seaborn as sns

#Modul zum Lesen des Datensatzes
from sklearn.datasets import load_iris

#Modul zur Standardisierung (verteilte Normalisierung)
from sklearn.preprocessing import StandardScaler

#Modul, das Trainingsdaten und Testdaten trennt
from sklearn.model_selection import train_test_split

#Modul zur logistischen Regression
from sklearn.linear_model import LogisticRegression

#Modul zur Bewertung der Klassifizierung
from sklearn.metrics import classification_report

#Module, die mit Verwirrungsmatrizen umgehen
from sklearn.metrics import confusion_matrix

2. Datenaufbereitung

Dieses Mal werden wir den Iris-Datensatz für die binäre Klassifizierung verwenden.

Holen Sie sich zuerst die Daten, standardisieren Sie sie und teilen Sie sie dann auf.


#Laden des Iris-Datensatzes
iris = load_iris()

#Teilen Sie in objektive Variable und erklärende Variable
X, y = iris.data[:100, [0, 2]], iris.target[:100]

#Standardisierung (verteilte Normalisierung)
std = StandardScaler()
X = std.fit_transform(X)

#Teilen Sie in Trainingsdaten und Testdaten
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

Um eine binäre Klassifizierung durchzuführen, wird der Datensatz bis zur 100. Zeile angegeben (nur Setosa / Versicolor). Wir haben auch die erklärenden Variablen auf zwei eingegrenzt, um die Darstellung zu vereinfachen. (Sepal Länge / nur Blütenblattlänge)

Bei der Standardisierung beispielsweise wird der Einfluss der Merkmalsgrößen (erklärende Variablen) groß, wenn es zweistellige und vierstellige Merkmalsgrößen gibt. Die Skala wird ausgerichtet, indem der Durchschnitt für alle Merkmalsgrößen auf 0 und die Varianz auf 1 gesetzt wird.

In random_state ist der Startwert so festgelegt, dass das Ergebnis der Datenteilung jedes Mal das gleiche ist.

3. Datenvisualisierung

Zeichnen wir die Daten vor der Klassifizierung durch logistische Regression.


#Erstellen von Zeichnungsobjekten und Nebenhandlungen
fig, ax = plt.subplots()

#Setosa Handlung
ax.scatter(X_train[y_train == 0, 0], X_train[y_train == 0, 1], 
           marker = 'o', label = 'Setosa')

#Versicolor Handlung
ax.scatter(X_train[y_train == 1, 0], X_train[y_train == 1, 1],
           marker = 'x', label = 'Versicolor')

#Einstellungen für die Achsenbeschriftung
ax.set_xlabel('Sepal Length')
ax.set_ylabel('Petal Length')

#Legendeneinstellungen
ax.legend(loc = 'best')

plt.show()

Plot mit Merkmalen, die Setosa entsprechen (y_train == 0) (0: Sepal Länge auf der horizontalen Achse, 1: Blütenblattlänge auf der vertikalen Achse) Plot mit Merkmalen (0: Sepal Länge auf der horizontalen Achse, 1: Blütenblattlänge auf der vertikalen Achse) entsprechend Versicolor (y_train == 1)


Ausgabeergebnis
image.png

4. Erstellen Sie ein Modell

Erstellen Sie eine logistische Regressionsausführungsfunktion (Instanz) und wenden Sie sie auf Trainingsdaten an.


#Erstellen Sie eine Instanz
logreg = LogisticRegression()

#Erstellen Sie ein Modell aus Trainingsdaten
logreg.fit(X_train, y_train)

## 5. Vorhersage der Klassifizierung Nachdem das Modell vollständig ist, sagen wir zunächst die Wahrscheinlichkeit der Klassifizierung voraus.
#Prognostizieren Sie die Wahrscheinlichkeit einer Klassifizierung
y_proba = logreg.predict_proba(X_test)[: , 1]
print(y_proba)


Ausgabeergebnis


y_proba: [0.02210131 0.99309888 0.95032727 0.04834431 0.99302674 0.04389388
 0.10540851 0.99718459 0.90218405 0.03983599 0.08000775 0.99280579
 0.99721384 0.78408501 0.08947531 0.01793823 0.99798469 0.01793823
 0.99429762 0.9920454 ]

Die Sigmoid-Funktion gibt eine Zahl im Bereich von 0 bis 1 aus. Je näher es an 0 liegt, desto höher ist die Wahrscheinlichkeit von Setosa, und je näher es an 1 liegt, desto höher ist die Wahrscheinlichkeit von Versicolor.

\sigma(z)=\frac{1}{1+\exp(-z)}

Lassen Sie uns als nächstes das Ergebnis der Klassifizierung vorhersagen.


#Klassifizierungsergebnisse vorhersagen
y_pred = logreg.predict(X_test)
print(y_pred)


Ausgabeergebnis


y_pred: [0 1 1 0 1 0 0 1 1 0 0 1 1 1 0 0 1 0 1 1]

Wenden Sie die Kreuzentropiefehlerfunktion früher auf den von der Sigmoidfunktion ausgegebenen Wert an. Werte nahe 0 werden als 0: Setosa klassifiziert, und Werte nahe 1 werden als 1: Versicolor klassifiziert.

L(w)=y\log(p(x,w))+(1-y)\log(1-p(x,w))

6. Modellbewertung

Diesmal handelt es sich um eine Klassifizierung (binäre Klassifizierung), daher werden wir sie anhand einer Verwirrungsmatrix bewerten.


#Erstellen Sie eine Verwirrungsmatrix
classes = [1, 0]
cm = confusion_matrix(y_test, y_pred, labels=classes)

#Datenrahmen
cmdf = pd.DataFrame(cm, index=classes, columns=classes)

#Zeichnen Sie die Verwirrungsmatrix
sns.heatmap(cmdf, annot=True)


Ausgabeergebnis
image.png

Suchen Sie als Nächstes den numerischen Wert des Bewertungsindex.


#Gibt die Genauigkeitsrate, die Rückrufrate und den F-Wert aus
print(classification_report(y_test, y_pred))


Ausgabeergebnis
image.png

Aus dem oben Gesagten konnten wir die Klassifizierung in Setosa und Versicolor bewerten.

■ Endlich

Bei der logistischen Regression erstellen und bewerten wir ein Modell basierend auf den obigen Schritten 1 bis 6.

Dieses Mal habe ich für Anfänger nur die Implementierung (Code) zusammengefasst. Mit Blick auf das Timing in der Zukunft möchte ich einen Artikel über Theorie (mathematische Formel) schreiben.

Danke fürs Lesen.

Recommended Posts

Logistic Return (für Anfänger) -Code Edition-
Lineare Regression (für Anfänger) -Code Edition-
Ridge Return (für Anfänger) -Code Edition-
Entscheidungsbaum (für Anfänger) -Code Edition-
[Kaggle für Super-Anfänger] Titanic (Logistic Return)
Support Vector Machine (für Anfänger) -Code Edition-
Logistische Rückgabe
Logistische Rückgabe
Spacemacs-Einstellungen (für Anfänger)
Techniken zum Testen von Code?
Python Lehrbuch für Anfänger
Dikstra-Algorithmus für Anfänger
OpenCV für Python-Anfänger
Was ist eine logistische Regressionsanalyse?
[Für Anfänger] Kaggle-Übung (Merucari)
Empfohlene Linux-Distribution für Anfänger
Persönliches Python-Code-Memo
Testcode zur Bewertung von Dekorateuren
CNN (1) zur Bildklassifizierung (für Anfänger)
Python3-Umgebungskonstruktion (für Anfänger)
Übersicht über Docker (für Anfänger)
Python #Funktion 2 für Super-Anfänger
Seaborn Basics für Anfänger ④ Pairplot
Grundlegende Python-Grammatik für Anfänger
Lernen mit dem Lehrer (Rückkehr) 2 Advanced Edition
100 Pandas klopfen für Python-Anfänger
[Python] Beispielcode für die Python-Grammatik
Python #Funktion 1 für Super-Anfänger
Python #Liste für Super-Anfänger
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
[Für Kaggle-Anfänger] Titanic (LightGBM)
Linux Command Memorandum [für Anfänger]
Praktische Linux-Verknüpfung (für Anfänger)
Algorithmus für maschinelles Lernen (logistische Regression)
Implementierung der logistischen Regression mit NumPy
[Für Anfänger] So implementieren Sie O'reilly-Beispielcode in Google Colab