Dieses Mal werde ich die Implementierung der logistischen Regression zusammenfassen.
Wir werden mit den folgenden 6 Schritten fortfahren.
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
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.
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
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)
#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.
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.
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
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
Aus dem oben Gesagten konnten wir die Klassifizierung in Setosa und Versicolor bewerten.
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