Regularisierungspfad der L1-Logistischen Regression

Machine LearningMachine LearningBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Das L1-Logistische-Regressionsmodell ist eine binäre Klassifizierungsmethode, die L1-Regularisierung verwendet, um Sparsität im Modell zu induzieren. Der Regularisierungspfad dieses Modells zeigt die Koeffizienten des Modells an, wenn die Regularisierungsstärke zunimmt. In diesem Lab verwenden wir den Iris-Datensatz, um L1-penalisierte logistische Regressionsmodelle zu trainieren und deren Regularisierungspfade zu plotten.

VM-Tipps

Nachdem die VM gestartet ist, klicken Sie in der linken oberen Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49204{{"Regularisierungspfad der L1-Logistischen Regression"}} ml/sklearn -.-> lab-49204{{"Regularisierungspfad der L1-Logistischen Regression"}} end

Lade den Iris-Datensatz

Wir werden den Iris-Datensatz aus der scikit-learn-Bibliothek laden. Der Datensatz enthält vier Merkmale: Kelchblattlänge, Kelchblattbreite, Blütenblattlänge und Blütenblattbreite. Wir werden nur die ersten beiden Merkmale für die binäre Klassifizierung verwenden.

from sklearn import datasets

iris = datasets.load_iris()
X = iris.data
y = iris.target

X = X[y!= 2] ## Verwende nur die ersten beiden Merkmale für die binäre Klassifizierung
y = y[y!= 2]

X /= X.max() ## Normalisiere X, um die Konvergenz zu beschleunigen

Berechne den Regularisierungspfad

Wir werden den Regularisierungspfad berechnen, indem wir L1-penalisierte logistische Regressionsmodelle mit unterschiedlichen Regularisierungsstärken trainieren. Wir werden den liblinear-Löser verwenden, der effizient für die Logistische-Regressionsverlustfunktion mit einer L1-Strafe optimiert werden kann. Wir werden einen niedrigen Wert für die Toleranz setzen, um sicherzustellen, dass das Modell konvergiert ist, bevor die Koeffizienten gesammelt werden. Wir werden auch warm_start=True verwenden, was bedeutet, dass die Koeffizienten der Modelle wiederverwendet werden, um die Initialisierung des nächsten Modellfits zu beschleunigen und die Berechnung des vollen Pfads zu beschleunigen.

import numpy as np
from sklearn import linear_model
from sklearn.svm import l1_min_c

cs = l1_min_c(X, y, loss="log") * np.logspace(0, 10, 16)

clf = linear_model.LogisticRegression(
    penalty="l1",
    solver="liblinear",
    tol=1e-6,
    max_iter=int(1e6),
    warm_start=True,
    intercept_scaling=10000.0,
)
coefs_ = []
for c in cs:
    clf.set_params(C=c)
    clf.fit(X, y)
    coefs_.append(clf.coef_.ravel().copy())

coefs_ = np.array(coefs_)

Zeichne den Regularisierungspfad

Wir werden den Regularisierungspfad zeichnen, indem wir die Koeffizienten der trainierten Modelle verwenden. Die Koeffizienten werden gegen den Logarithmus der Regularisierungsstärke aufgetragen. Auf der linken Seite der Abbildung (starke Regularisatoren) sind alle Koeffizienten genau 0. Wenn die Regularisierung zunehmend lockerer wird, können die Koeffizienten nacheinander nicht-nulle Werte annehmen.

import matplotlib.pyplot as plt

plt.plot(np.log10(cs), coefs_, marker="o")
ymin, ymax = plt.ylim()
plt.xlabel("log(C)")
plt.ylabel("Koeffizienten")
plt.title("Logistischer Regressionspfad")
plt.axis("tight")
plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man L1-penalisierte logistische Regressionsmodelle auf dem Iris-Datensatz trainiert und deren Regularisierungspfade zeichnet. Der Regularisierungspfad zeigt, wie sich die Koeffizienten des Modells mit unterschiedlichen Regularisierungsstärken ändern. Diese Methode ist bei der Feature-Selektion nützlich, da sie identifizieren kann, welche Merkmale den größten Einfluss auf das Modell haben.