Scikit-Learn Lasso Regression

Beginner

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

Einführung

In diesem Lab wird die Verwendung des Lasso-Regressionsalgorithmus von Scikit-learn auf dichte und spärliche Daten demonstriert. Der Lasso-Algorithmus ist eine lineare Regressionsmethode, die einer der Regressionskoeffizienten eine Strafe hinzufügt. Diese Strafe ermutigt das Modell, spärliche Koeffizienten zu erzeugen. Der Lasso-Algorithmus ist in Situationen nützlich, in denen die Anzahl der Merkmale im Vergleich zur Anzahl der Proben groß ist.

VM-Tipps

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 ab, und wir werden das Problem für Sie prompt beheben.

Bibliotheken importieren

Wir beginnen mit dem Import der erforderlichen Bibliotheken. Wir benötigen Scikit-learn, NumPy und SciPy.

from time import time
from scipy import sparse
from scipy import linalg
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso

Dichte Daten generieren

Als nächstes generieren wir einige dichte Daten, die wir für die Lasso-Regression verwenden werden. Wir verwenden die make_regression-Funktion von Scikit-learn, um 200 Proben mit 5000 Merkmalen zu generieren.

X, y = make_regression(n_samples=200, n_features=5000, random_state=0)

Lasso auf dichten Daten trainieren

Jetzt trainieren wir zwei Lasso-Regressionsmodelle, eines auf den dichten Daten und eines auf den spärlichen Daten. Wir setzen den alpha-Parameter auf 1 und die maximale Anzahl an Iterationen auf 1000.

alpha = 1
sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000)
dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000)

Lasso auf dichte Daten anpassen

Wir passen die Lasso-Regressionsmodelle an die dichten Daten an, indem wir die fit-Funktion von Scikit-learn verwenden. Wir messen auch die Zeit für den Anpassungsprozess und drucken die Zeit für jedes Lasso-Modell aus.

t0 = time()
sparse_lasso.fit(X_sp, y)
print(f"Sparse Lasso done in {(time() - t0):.3f}s")

t0 = time()
dense_lasso.fit(X, y)
print(f"Dense Lasso done in {(time() - t0):.3f}s")

Vergleiche die Koeffizienten von Dense Lasso und Sparse Lasso

Wir vergleichen die Koeffizienten des dichten Lasso-Modells und des spärlichen Lasso-Modells, um sicherzustellen, dass sie die gleichen Ergebnisse liefern. Wir berechnen die euklidische Norm der Differenz zwischen den Koeffizienten.

coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distance between coefficients : {coeff_diff:.2e}")

Spärliche Daten generieren

Als nächstes generieren wir einige spärliche Daten, die wir für die Lasso-Regression verwenden werden. Wir kopieren die dichten Daten aus dem vorherigen Schritt und ersetzen alle Werte, die kleiner als 2,5 sind, durch 0. Wir konvertieren auch die spärlichen Daten in das Compressed Sparse Column-Format von Scipy.

Xs = X.copy()
Xs[Xs < 2.5] = 0.0
Xs_sp = sparse.coo_matrix(Xs)
Xs_sp = Xs_sp.tocsc()

Lasso auf spärlichen Daten trainieren

Jetzt trainieren wir zwei Lasso-Regressionsmodelle, eines auf den dichten Daten und eines auf den spärlichen Daten. Wir setzen den alpha-Parameter auf 0,1 und die maximale Anzahl an Iterationen auf 10000.

alpha = 0.1
sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000)
dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000)

Lasso auf spärliche Daten anpassen

Wir passen die Lasso-Regressionsmodelle an die spärlichen Daten an, indem wir die fit-Funktion von Scikit-learn verwenden. Wir messen auch die Zeit für den Anpassungsprozess und drucken die Zeit für jedes Lasso-Modell aus.

t0 = time()
sparse_lasso.fit(Xs_sp, y)
print(f"Sparse Lasso done in {(time() - t0):.3f}s")

t0 = time()
dense_lasso.fit(Xs, y)
print(f"Dense Lasso done in  {(time() - t0):.3f}s")

Vergleiche die Koeffizienten von Dense Lasso und Sparse Lasso

Wir vergleichen die Koeffizienten des dichten Lasso-Modells und des spärlichen Lasso-Modells, um sicherzustellen, dass sie die gleichen Ergebnisse liefern. Wir berechnen die euklidische Norm der Differenz zwischen den Koeffizienten.

coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distance between coefficients : {coeff_diff:.2e}")

Zusammenfassung

In diesem Lab haben wir die Verwendung des Lasso-Regressionsalgorithmus von Scikit-learn auf dichten und spärlichen Daten demonstriert. Wir haben gezeigt, dass der Lasso-Algorithmus die gleichen Ergebnisse für dichte und spärliche Daten liefert und dass der Algorithmus bei spärlichen Daten schneller ist.