ElasticNet#
- class sklearn.linear_model.ElasticNet(alpha=1.0, *, l1_ratio=0.5, fit_intercept=True, precompute=False, max_iter=1000, copy_X=True, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')[Quelle]#
Lineares Modell mit kombinierter L1- und L2-Prior als Regularisator.
Minimiert die Zielfunktion
\[\frac{1}{2 n_{\rm samples}} \cdot \|y - X w\|_2^2 + \alpha \cdot {\rm l1\_{ratio}} \cdot \|w\|_1 + 0.5 \cdot \alpha \cdot (1 - {\rm l1\_{ratio}}) \cdot \|w\|_2^2\]Wenn Sie daran interessiert sind, die L1- und L2-Strafe separat zu steuern, beachten Sie, dass dies äquivalent zu
\[a \cdot \|w\|_1 + 0.5 \cdot b \cdot \|w\|_2^2\]wobei
\[\alpha = a + b, \quad {\rm l1\_{ratio}} = \frac{a}{a + b}\]Der Parameter l1_ratio entspricht alpha im glmnet R-Paket, während alpha dem Parameter lambda in glmnet entspricht. Insbesondere ist l1_ratio = 1 die Lasso-Strafe. Derzeit ist l1_ratio <= 0.01 nicht zuverlässig, es sei denn, Sie stellen Ihre eigene Alpha-Sequenz bereit.
Lesen Sie mehr im Benutzerhandbuch.
- Parameter:
- alphafloat, default=1.0
Konstante, die die Strafterme multipliziert. Standard ist 1.0. Sehen Sie sich die Notizen für die genaue mathematische Bedeutung dieses Parameters an.
alpha = 0entspricht einer gewöhnlichen kleinsten Quadraten-Methode, die vomLinearRegression-Objekt gelöst wird. Aus numerischen Gründen wird die Verwendung vonalpha = 0mit demLasso-Objekt nicht empfohlen. Daher sollten Sie dasLinearRegression-Objekt verwenden.- l1_ratiofloat, Standardwert=0.5
Der ElasticNet-Mischungsparameter, mit
0 <= l1_ratio <= 1. Fürl1_ratio = 0ist die Strafe eine L2-Strafe.Für l1_ratio = 1ist es eine L1-Strafe. Für0 < l1_ratio < 1ist die Strafe eine Kombination aus L1 und L2.- fit_interceptbool, Standardwert=True
Ob der Achsenabschnitt geschätzt werden soll oder nicht. Wenn
False, wird angenommen, dass die Daten bereits zentriert sind.- precomputebool oder array-ähnlich von Form (n_features, n_features), Standard=False
Ob eine voreingerechnete Gram-Matrix zur Beschleunigung von Berechnungen verwendet werden soll. Die Gram-Matrix kann auch als Argument übergeben werden. Bei spärlicher Eingabe ist diese Option immer
False, um die Sparsity zu erhalten. Siehe ein Beispiel zur Verwendung einer voreingerechneten Gram-Matrix in ElasticNet für Details.- max_iterint, default=1000
Die maximale Anzahl von Iterationen.
- copy_Xbool, Standardwert=True
Wenn
True, wird X kopiert; andernfalls kann es überschrieben werden.- tolfloat, Standard=1e-4
Die Toleranz für die Optimierung: Wenn die Aktualisierungen kleiner oder gleich
tolsind, prüft der Optimierungscode den dualen Abstand auf Optimalität und fährt fort, bis dieser kleiner oder gleichtolist. Siehe Notizen unten.- warm_startbool, Standard=False
Wenn auf
Truegesetzt, wird die Lösung des vorherigen Aufrufs von fit als Initialisierung wiederverwendet, andernfalls wird die vorherige Lösung einfach gelöscht. Siehe das Glossar.- positivebool, Standardwert=False
Wenn auf
Truegesetzt, werden die Koeffizienten erzwungen, positiv zu sein.- random_stateint, RandomState instance, default=None
Der Seed des Pseudo-Zufallszahlengenerators, der ein zufälliges Merkmal zur Aktualisierung auswählt. Wird verwendet, wenn
selection== ‘random‘ ist. Übergeben Sie eine Ganzzahl für reproduzierbare Ausgaben über mehrere Funktionsaufrufe hinweg. Siehe Glossar.- selection{‘cyclic’, ‘random’}, Standardwert=’cyclic’
Wenn auf ‘random‘ gesetzt, wird ein zufälliger Koeffizient in jeder Iteration aktualisiert, anstatt standardmäßig sequenziell durch die Merkmale zu iterieren. Dies (Setzen auf ‘random‘) führt oft zu einer signifikant schnelleren Konvergenz, insbesondere wenn tol höher als 1e-4 ist.
- Attribute:
- coef_ndarray der Form (n_features,) oder (n_targets, n_features)
Parametervektor (w in der Kostenfunktionsformel).
sparse_coef_spärliche Matrix der Form (n_features,) oder (n_targets, n_features)Spärliche Darstellung des gefitteten
coef_.- intercept_float oder ndarray der Form (n_targets,)
Unabhängiger Term in der Entscheidungsfunktion.
- n_iter_Liste von int
Anzahl der Iterationen, die vom Koordinatensenkungs-Solver ausgeführt werden, um die angegebene Toleranz zu erreichen.
- dual_gap_float oder ndarray der Form (n_targets,)
Gegebene Parameter alpha, die dualen Abstände am Ende der Optimierung, gleiche Form wie jede Beobachtung von y.
- n_features_in_int
Anzahl der während des fits gesehenen Merkmale.
Hinzugefügt in Version 0.24.
- feature_names_in_ndarray mit Form (
n_features_in_,) Namen der während fit gesehenen Merkmale. Nur definiert, wenn
XMerkmalnamen hat, die alle Zeichenketten sind.Hinzugefügt in Version 1.0.
Siehe auch
ElasticNetCVElastic-Net-Modell mit bester Modellauswahl durch Kreuzvalidierung.
SGDRegressorImplementiert Elastic-Net-Regression mit inkrementellem Training.
SGDClassifierImplementiert logistische Regression mit Elastic-Net-Strafe (
SGDClassifier(loss="log_loss", penalty="elasticnet")).
Anmerkungen
Um unnötige Speicherduplizierung zu vermeiden, sollte das X-Argument der fit-Methode direkt als Fortran-kontinuierlicher numpy-Array übergeben werden.
Die genauen Stoppkriterien basierend auf
tolsind wie folgt: Zuerst wird geprüft, ob die maximale Koordinatenaktualisierung, d.h. \(\max_j |w_j^{new} - w_j^{old}|\) kleiner oder gleichtolmal dem maximalen absoluten Koeffizienten, \(\max_j |w_j|\), ist. Wenn ja, wird zusätzlich geprüft, ob der duale Abstand kleiner oder gleichtolmal \(||y||_2^2 / n_{\text{samples}}\) ist.Der zugrunde liegende Koordinatenabstiegslöser verwendet "gap-safe screening rules", um die Anpassungszeit zu beschleunigen, siehe Benutzerhandbuch zum Koordinatenabstieg.
Beispiele
>>> from sklearn.linear_model import ElasticNet >>> from sklearn.datasets import make_regression
>>> X, y = make_regression(n_features=2, random_state=0) >>> regr = ElasticNet(random_state=0) >>> regr.fit(X, y) ElasticNet(random_state=0) >>> print(regr.coef_) [18.83816048 64.55968825] >>> print(regr.intercept_) 1.451 >>> print(regr.predict([[0, 0]])) [1.451]
L1-basierte Modelle für spärliche Signale zeigt ElasticNet zusammen mit Lasso und ARD Regression für die Wiederherstellung spärlicher Signale bei Rauschen und Merkmalskorrelation.
- fit(X, y, sample_weight=None, check_input=True)[Quelle]#
Modell mit Koordinatendescend anpassen.
- Parameter:
- X{ndarray, spärliche Matrix, spärliches Array} von (n_samples, n_features)
Daten.
Beachten Sie, dass große spärliche Matrizen und Arrays, die
int64-Indizes benötigen, nicht akzeptiert werden.- yndarray der Form (n_samples,) oder (n_samples, n_targets)
Ziel. Wird bei Bedarf an den Dtyp von X angepasst.
- sample_weightfloat oder array-ähnlich der Form (n_samples,), Standard=None
Stichprobengewichte. Intern wird der
sample_weight-Vektor neu skaliert, sodass er die Summen_samplesergibt.Hinzugefügt in Version 0.23.
- check_inputbool, Standardwert=True
Ermöglicht das Umgehen mehrerer Eingabeüberprüfungen. Verwenden Sie diesen Parameter nicht, es sei denn, Sie wissen, was Sie tun.
- Gibt zurück:
- selfobject
Angepasster Schätzer.
Anmerkungen
Koordinatensenkung ist ein Algorithmus, der Spalten von Daten einzeln betrachtet, daher konvertiert er die X-Eingabe bei Bedarf automatisch in ein Fortran-kontinuierliches numpy-Array.
Um Speicherneuzuweisungen zu vermeiden, ist es ratsam, die Anfangsdaten bereits in diesem Format im Speicher zu allozieren.
- get_metadata_routing()[Quelle]#
Holt das Metadaten-Routing dieses Objekts.
Bitte prüfen Sie im Benutzerhandbuch, wie der Routing-Mechanismus funktioniert.
- Gibt zurück:
- routingMetadataRequest
Ein
MetadataRequest, der Routing-Informationen kapselt.
- get_params(deep=True)[Quelle]#
Holt Parameter für diesen Schätzer.
- Parameter:
- deepbool, default=True
Wenn True, werden die Parameter für diesen Schätzer und die enthaltenen Unterobjekte, die Schätzer sind, zurückgegeben.
- Gibt zurück:
- paramsdict
Parameternamen, zugeordnet ihren Werten.
- static path(X, y, *, l1_ratio=0.5, eps=0.001, n_alphas=100, alphas=None, precompute='auto', Xy=None, copy_X=True, coef_init=None, verbose=False, return_n_iter=False, positive=False, check_input=True, **params)[Quelle]#
Berechnet den Elastic Net-Pfad mit Koordinatenabstieg.
Die Elastic-Net-Optimierungsfunktion variiert für Mono- und Multi-Ausgaben.
Für Mono-Ausgaben-Aufgaben ist es
1 / (2 * n_samples) * ||y - Xw||^2_2 + alpha * l1_ratio * ||w||_1 + 0.5 * alpha * (1 - l1_ratio) * ||w||^2_2
Für Multi-Ausgaben-Aufgaben ist es
(1 / (2 * n_samples)) * ||Y - XW||_Fro^2 + alpha * l1_ratio * ||W||_21 + 0.5 * alpha * (1 - l1_ratio) * ||W||_Fro^2
Wo
||W||_21 = \sum_i \sqrt{\sum_j w_{ij}^2}
d.h. die Summe der Norm jeder Zeile.
Lesen Sie mehr im Benutzerhandbuch.
- Parameter:
- X{array-like, sparse matrix} der Form (n_samples, n_features)
Trainingsdaten. Direkt als Fortran-kontinuierliche Daten übergeben, um unnötige Speicherduplizierung zu vermeiden. Wenn
yeine Mono-Ausgabe ist, kannXspärlich sein.- y{array-ähnlich, spärsitätsmatrix} der Form (n_samples,) oder (n_samples, n_targets)
Zielwerte.
- l1_ratiofloat, Standardwert=0.5
Zahl zwischen 0 und 1, die an Elastic Net übergeben wird (Skalierung zwischen l1- und l2-Strafen).
l1_ratio=1entspricht dem Lasso.- epsfloat, Standardwert=1e-3
Länge des Pfades.
eps=1e-3bedeutet, dassalpha_min / alpha_max = 1e-3.- n_alphasint, Standardwert=100
Anzahl der Alphas entlang des Regularisierungspfades.
- alphasarray-ähnlich, Standardwert=None
Liste von Alphas, für die die Modelle berechnet werden. Wenn None, werden Alphas automatisch gesetzt.
- precompute‘auto‘, bool oder array-ähnlich der Form (n_features, n_features), Standardwert=’auto’
Ob eine vorberechnete Gram-Matrix verwendet werden soll, um Berechnungen zu beschleunigen. Wenn auf
'auto'gesetzt, entscheiden wir. Die Gram-Matrix kann auch als Argument übergeben werden.- Xyarray-ähnlich der Form (n_features,) oder (n_features, n_targets), Standardwert=None
Xy = np.dot(X.T, y), was vorab berechnet werden kann. Dies ist nur nützlich, wenn die Gram-Matrix vorab berechnet wurde.
- copy_Xbool, Standardwert=True
Wenn
True, wird X kopiert; andernfalls kann es überschrieben werden.- coef_initarray-ähnlich der Form (n_features,), Standardwert=None
Die Anfangswerte der Koeffizienten.
- verbosebool oder int, default=False
Ausmaß der Ausführlichkeit.
- return_n_iterbool, Standard=False
Ob die Anzahl der Iterationen zurückgegeben werden soll oder nicht.
- positivebool, Standardwert=False
Wenn True gesetzt, werden die Koeffizienten auf positiv erzwungen. (Nur erlaubt, wenn
y.ndim == 1).- check_inputbool, Standardwert=True
Wenn False gesetzt, werden die Eingabevalidierungsprüfungen übersprungen (einschließlich der Gram-Matrix, wenn sie bereitgestellt wird). Es wird davon ausgegangen, dass diese vom Aufrufer behandelt werden.
- **paramskwargs
Schlüsselwortargumente, die an den Koordinatenabstiegslöser übergeben werden.
- Gibt zurück:
- alphasndarray der Form (n_alphas,)
Die Alphas entlang des Pfades, auf dem Modelle berechnet werden.
- coefsndarray der Form (n_features, n_alphas) oder (n_targets, n_features, n_alphas)
Koeffizienten entlang des Pfades.
- dual_gapsndarray der Form (n_alphas,)
Die dualen Abstände am Ende der Optimierung für jedes Alpha.
- n_iterslist von int
Die Anzahl der Iterationen, die der Koordinatenabstieg-Optimierer benötigt, um die angegebene Toleranz für jedes Alpha zu erreichen. (Wird zurückgegeben, wenn
return_n_iterauf True gesetzt ist).
Siehe auch
MultiTaskElasticNetMulti-Task ElasticNet Modell, trainiert mit L1/L2 Mixed-Norm als Regularisator.
MultiTaskElasticNetCVMulti-Task L1/L2 ElasticNet mit integrierter Kreuzvalidierung.
ElasticNetLineares Modell mit kombinierter L1- und L2-Prior als Regularisator.
ElasticNetCVElastic Net Modell mit iterativem Anpassen entlang eines Regularisierungspfades.
Anmerkungen
Ein Beispiel finden Sie unter Beispiele/linear_model/plot_lasso_lasso_lars_elasticnet_path.py.
Der zugrunde liegende Koordinatenabstiegslöser verwendet "gap-safe screening rules", um die Anpassungszeit zu beschleunigen, siehe Benutzerhandbuch zum Koordinatenabstieg.
Beispiele
>>> from sklearn.linear_model import enet_path >>> from sklearn.datasets import make_regression >>> X, y, true_coef = make_regression( ... n_samples=100, n_features=5, n_informative=2, coef=True, random_state=0 ... ) >>> true_coef array([ 0. , 0. , 0. , 97.9, 45.7]) >>> alphas, estimated_coef, _ = enet_path(X, y, n_alphas=3) >>> alphas.shape (3,) >>> estimated_coef array([[ 0., 0.787, 0.568], [ 0., 1.120, 0.620], [-0., -2.129, -1.128], [ 0., 23.046, 88.939], [ 0., 10.637, 41.566]])
- predict(X)[Quelle]#
Vorhersage mit dem linearen Modell.
- Parameter:
- Xarray-like oder sparse matrix, Form (n_samples, n_features)
Stichproben.
- Gibt zurück:
- Carray, Form (n_samples,)
Gibt vorhergesagte Werte zurück.
- score(X, y, sample_weight=None)[Quelle]#
Gibt den Bestimmtheitskoeffizienten auf Testdaten zurück.
Der Bestimmungskoeffizient, \(R^2\), ist definiert als \((1 - \frac{u}{v})\), wobei \(u\) die Residuenquadratsumme ist
((y_true - y_pred)** 2).sum()und \(v\) die totale Summe der Quadrate ist((y_true - y_true.mean()) ** 2).sum(). Der beste mögliche Score ist 1.0 und er kann negativ sein (da das Modell beliebig schlechter sein kann). Ein konstantes Modell, das immer den Erwartungswert vonyvorhersagt, unabhängig von den Eingabefeatures, würde einen \(R^2\)-Score von 0.0 erzielen.- Parameter:
- Xarray-like der Form (n_samples, n_features)
Teststichproben. Für einige Schätzer kann dies eine vorab berechnete Kernelmatrix oder eine Liste von generischen Objekten sein, stattdessen mit der Form
(n_samples, n_samples_fitted), wobein_samples_fitteddie Anzahl der für die Anpassung des Schätzers verwendeten Stichproben ist.- yarray-like der Form (n_samples,) oder (n_samples, n_outputs)
Wahre Werte für
X.- sample_weightarray-like der Form (n_samples,), Standardwert=None
Stichprobengewichte.
- Gibt zurück:
- scorefloat
\(R^2\) von
self.predict(X)bezogen aufy.
Anmerkungen
Der \(R^2\)-Score, der beim Aufruf von
scoreauf einem Regressor verwendet wird, nutztmultioutput='uniform_average'ab Version 0.23, um konsistent mit dem Standardwert vonr2_scorezu bleiben. Dies beeinflusst diescore-Methode aller Multioutput-Regressoren (außer beiMultiOutputRegressor).
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') ElasticNet[Quelle]#
Konfiguriert, ob Metadaten für die
fit-Methode angefordert werden sollen.Beachten Sie, dass diese Methode nur relevant ist, wenn dieser Schätzer als Unter-Schätzer innerhalb eines Meta-Schätzers verwendet wird und Metadaten-Routing mit
enable_metadata_routing=Trueaktiviert ist (siehesklearn.set_config). Bitte lesen Sie das Benutzerhandbuch, um zu erfahren, wie der Routing-Mechanismus funktioniert.Die Optionen für jeden Parameter sind
True: Metadaten werden angefordert und, falls vorhanden, anfitübergeben. Die Anforderung wird ignoriert, wenn keine Metadaten vorhanden sind.False: Metadaten werden nicht angefordert und der Meta-Schätzer übergibt sie nicht anfit.None: Metadaten werden nicht angefordert und der Meta-Schätzer löst einen Fehler aus, wenn der Benutzer sie bereitstellt.str: Metadaten sollten mit diesem Alias an den Meta-Schätzer übergeben werden und nicht mit dem ursprünglichen Namen.
Der Standardwert (
sklearn.utils.metadata_routing.UNCHANGED) behält die bestehende Anforderung bei. Dies ermöglicht es Ihnen, die Anforderung für einige Parameter zu ändern und für andere nicht.Hinzugefügt in Version 1.3.
- Parameter:
- sample_weightstr, True, False, oder None, Standardwert=sklearn.utils.metadata_routing.UNCHANGED
Metadaten-Routing für den Parameter
sample_weightinfit.
- Gibt zurück:
- selfobject
Das aktualisierte Objekt.
- set_params(**params)[Quelle]#
Setzt die Parameter dieses Schätzers.
Die Methode funktioniert sowohl bei einfachen Schätzern als auch bei verschachtelten Objekten (wie
Pipeline). Letztere haben Parameter der Form<component>__<parameter>, so dass es möglich ist, jede Komponente eines verschachtelten Objekts zu aktualisieren.- Parameter:
- **paramsdict
Schätzer-Parameter.
- Gibt zurück:
- selfestimator instance
Schätzer-Instanz.
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') ElasticNet[Quelle]#
Konfiguriert, ob Metadaten für die
score-Methode angefordert werden sollen.Beachten Sie, dass diese Methode nur relevant ist, wenn dieser Schätzer als Unter-Schätzer innerhalb eines Meta-Schätzers verwendet wird und Metadaten-Routing mit
enable_metadata_routing=Trueaktiviert ist (siehesklearn.set_config). Bitte lesen Sie das Benutzerhandbuch, um zu erfahren, wie der Routing-Mechanismus funktioniert.Die Optionen für jeden Parameter sind
True: Metadaten werden angefordert und, falls vorhanden, anscoreübergeben. Die Anforderung wird ignoriert, wenn keine Metadaten vorhanden sind.False: Metadaten werden nicht angefordert und der Meta-Schätzer übergibt sie nicht anscore.None: Metadaten werden nicht angefordert und der Meta-Schätzer löst einen Fehler aus, wenn der Benutzer sie bereitstellt.str: Metadaten sollten mit diesem Alias an den Meta-Schätzer übergeben werden und nicht mit dem ursprünglichen Namen.
Der Standardwert (
sklearn.utils.metadata_routing.UNCHANGED) behält die bestehende Anforderung bei. Dies ermöglicht es Ihnen, die Anforderung für einige Parameter zu ändern und für andere nicht.Hinzugefügt in Version 1.3.
- Parameter:
- sample_weightstr, True, False, oder None, Standardwert=sklearn.utils.metadata_routing.UNCHANGED
Metadaten-Routing für den Parameter
sample_weightinscore.
- Gibt zurück:
- selfobject
Das aktualisierte Objekt.
Galeriebeispiele#
Anpassen eines Elastic Net mit einer voreingestellten Gram-Matrix und gewichteten Stichproben
Auswirkung der Modellregularisierung auf Trainings- und Testfehler