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.