Lasso und Elastic Net

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

In diesem Tutorial lernen wir über Lasso und Elastic Net, die Techniken zur linearen Regression sind und mit Hilfe eines Koordinatenabstiegs implementiert werden. Wir werden lernen, wie man Regularisierungspfade mit Lasso und Elastic Net berechnet und wie man die Ergebnisse mit matplotlib anzeigt.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

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

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

Lade den Datensatz

In diesem Schritt laden wir den Diabetes-Datensatz aus der scikit-learn-Bibliothek und standardisieren die Daten.

from sklearn import datasets

## Lade den Diabetes-Datensatz
X, y = datasets.load_diabetes(return_X_y=True)

## Standardisiere die Daten
X /= X.std(axis=0)

Berechne den Regularisierungspfad mit Lasso

In diesem Schritt berechnen wir den Regularisierungspfad mit der Lasso-Technik und visualisieren die Ergebnisse mit matplotlib.

from sklearn.linear_model import lasso_path
import numpy as np
import matplotlib.pyplot as plt

## Setze den Wert von eps
eps = 5e-3

## Berechne den Regularisierungspfad mit Lasso
alphas_lasso, coefs_lasso, _ = lasso_path(X, y, eps=eps)

## Zeige die Ergebnisse mit matplotlib an
plt.figure(1)
colors = cycle(["b", "r", "g", "c", "k"])
neg_log_alphas_lasso = -np.log10(alphas_lasso)
for coef_l, c in zip(coefs_lasso, colors):
    l1 = plt.plot(neg_log_alphas_lasso, coef_l, c=c)

plt.xlabel("-Log(alpha)")
plt.ylabel("Koeffizienten")
plt.title("Lasso-Pfad")
plt.axis("tight")
plt.show()

Berechne den Regularisierungspfad mit positivem Lasso

In diesem Schritt berechnen wir den Regularisierungspfad mit der positiven Lasso-Technik und visualisieren die Ergebnisse mit matplotlib.

## Berechne den Regularisierungspfad mit positivem Lasso
alphas_positive_lasso, coefs_positive_lasso, _ = lasso_path(X, y, eps=eps, positive=True)

## Zeige die Ergebnisse mit matplotlib an
plt.figure(2)
neg_log_alphas_positive_lasso = -np.log10(alphas_positive_lasso)
for coef_l, coef_pl, c in zip(coefs_lasso, coefs_positive_lasso, colors):
    l1 = plt.plot(neg_log_alphas_lasso, coef_l, c=c)
    l2 = plt.plot(neg_log_alphas_positive_lasso, coef_pl, linestyle="--", c=c)

plt.xlabel("-Log(alpha)")
plt.ylabel("Koeffizienten")
plt.title("Lasso und positives Lasso")
plt.legend((l1[-1], l2[-1]), ("Lasso", "Positives Lasso"), loc="lower left")
plt.axis("tight")
plt.show()

Berechne den Regularisierungspfad mit Elastic Net

In diesem Schritt berechnen wir den Regularisierungspfad mit der Elastic Net-Technik und visualisieren die Ergebnisse mit matplotlib.

from sklearn.linear_model import enet_path

## Berechne den Regularisierungspfad mit Elastic Net
alphas_enet, coefs_enet, _ = enet_path(X, y, eps=eps, l1_ratio=0.8)

## Zeige die Ergebnisse mit matplotlib an
plt.figure(3)
neg_log_alphas_enet = -np.log10(alphas_enet)
for coef_e, c in zip(coefs_enet, colors):
    l1 = plt.plot(neg_log_alphas_enet, coef_e, c=c)

plt.xlabel("-Log(alpha)")
plt.ylabel("Koeffizienten")
plt.title("Elastic Net-Pfad")
plt.axis("tight")
plt.show()

Berechne den Regularisierungspfad mit positivem Elastic Net

In diesem Schritt berechnen wir den Regularisierungspfad mit der positiven Elastic Net-Technik und visualisieren die Ergebnisse mit matplotlib.

## Berechne den Regularisierungspfad mit positivem Elastic Net
alphas_positive_enet, coefs_positive_enet, _ = enet_path(X, y, eps=eps, l1_ratio=0.8, positive=True)

## Zeige die Ergebnisse mit matplotlib an
plt.figure(4)
neg_log_alphas_positive_enet = -np.log10(alphas_positive_enet)
for coef_e, coef_pe, c in zip(coefs_enet, coefs_positive_enet, colors):
    l1 = plt.plot(neg_log_alphas_enet, coef_e, c=c)
    l2 = plt.plot(neg_log_alphas_positive_enet, coef_pe, linestyle="--", c=c)

plt.xlabel("-Log(alpha)")
plt.ylabel("Koeffizienten")
plt.title("Elastic Net und positives Elastic Net")
plt.legend((l1[-1], l2[-1]), ("Elastic Net", "Positives Elastic Net"), loc="lower left")
plt.axis("tight")
plt.show()

Zusammenfassung

In diesem Tutorial haben wir uns mit Lasso und Elastic Net beschäftigt, die Techniken zur linearen Regression sind. Wir haben gelernt, wie man Regularisierungspfade mit Lasso und Elastic Net berechnet und wie man die Ergebnisse mit matplotlib visualisiert. Wir haben auch gelernt, wie man den Regularisierungspfad mit positiven Lasso- und positiven Elastic-Net-Techniken berechnet.