[PYTHON] Schätzung / Vorhersage des verallgemeinerten linearen Modells bei Lasso und Ridge

Das Update hörte für eine Weile auf und der Blog starb, aber ich dachte wieder, dass ich aufschreiben musste, was ich tat, was ich recherchierte und was ich dachte, also werde ich es hart schreiben. Tsukkomi etc. sind willkommen, aber bitte seien Sie nett zu uns.

Was ist ein verallgemeinertes lineares Modell?

Die Abkürzung ist GLM (Generalized Liner Model), ein Modell, das die lineare Regression erweitert, sodass andere Verteilungen als die Normalverteilung verarbeitet werden können.

Was ist Lasso und Ridge?

Lasso ist eine Normalisierungstechnik zur Schätzung verallgemeinerter linearer Modelle. Für eine detaillierte Erklärung ist der unten stehende Link korrekt.

Lasso und Elastic Net für verallgemeinerte lineare Modelle

Sowohl Lasso als auch Ridge haben die Eigenschaft, dass eine spärliche Lösung erhalten werden kann, indem eine "Strafe" vorliegt, die die Größe des geschätzten Koeffizienten einschränkt.

Ich habe [zuvor] ein wenig über diesen Bereich geschrieben (http://qiita.com/ynakayama/items/9c5867b6947aa41e9229), aber da es sich um einen Reduktionsschätzer in Lasso handelt, wird davon ausgegangen, dass es Variablen gibt, die nicht verwendet werden. Der Lasso-Schätzer weist weniger Fehler auf als der übliche wahrscheinlichste Schätzer und liefert im Allgemeinen bessere Schätzungen und Vorhersagen als die Methode der kleinsten Quadrate.

Die Ridge-Regression ist auch eine Methode, um eine Strafe zu verhängen und die Lernbarkeit zu verhindern. Sie ist effektiv, wenn Sie die mehrfache Co-Linearität verhindern möchten, da eine starke Korrelation zwischen mehreren erklärenden Variablen besteht.

In Lasso ist die Implementierung durch scikit-learn wie folgt.

(1 / (2 * n_samples)) * ||y - Xw||^2_2 + alpha * ||w||_1

Hier möchten Sie ein einfaches Modell erstellen, indem Sie die Komplexität entfernen und einige ausgewählte erklärende Variablen eingeben.

Wenn der Regularisierungsterm λ 0 ist, entspricht er der Methode der kleinsten Quadrate. Wenn λ klein ist, ist die Strafe locker und kompliziert, und wenn sie groß ist, ist die Strafe schwerwiegend und das Modell ist einfach.

Als Methode zur Bestimmung des Regularisierungsterms wird Kreuztest verwendet ) Es gibt eine sogenannte Kreuzvalidierung.

Lasso, Ridge mit Scikit-Learn

sklearn implementiert Lasso und Ridge unter sklearn.linear_model.

Damit

import sklearn.linear_model as lm

Immerhin kann man es wie lm.Lasso nennen.

Lasso http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html#sklearn.linear_model.Lasso

Beim Erstellen einer Lasso-Instanz gibt es einige Parameter.

Es ist wirklich das gleiche, also siehe die offizielle Seite über den obigen Link. Ich habe nur Folgendes verfolgt

from sklearn import linear_model
clf = linear_model.Lasso(alpha=0.1)
clf.fit([[0,0], [1, 1], [2, 2]], [0, 1, 2])
#=> Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000,
#         normalize=False, positive=False, precompute=False, random_state=None,
#         selection='cyclic', tol=0.0001, warm_start=False)
print(clf.coef_)
#=> [ 0.85  0.  ]
print(clf.intercept_)
#=> 0.15

Das Anpassen (Lernen) mit der Anpassungsmethode und die Vorhersage mit der Vorhersagemethode sind wie üblich.

Ridge http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge

from sklearn import linear_model
clf = linear_model.Ridge (alpha = .5)
clf.fit ([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) 
#=> Ridge(alpha=0.5, copy_X=True, fit_intercept=True, max_iter=None,
#=>       normalize=False, solver='auto', tol=0.001)
clf.coef_
#=> array([ 0.34545455,  0.34545455])
clf.intercept_ 
#=> 0.13636...
from sklearn.linear_model import Ridge
import numpy as np
n_samples, n_features = 10, 5
np.random.seed(0)
y = np.random.randn(n_samples)
X = np.random.randn(n_samples, n_features)
clf = Ridge(alpha=1.0)
clf.fit(X, y) 
#=> Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
#         normalize=False, solver='auto', tol=0.001)

Und für Scikit-Learn, Lasso-Kreuztest LassoCV und Lasso-Regression LassoRegression, auch [RidgeCV](http://scikit-learn.org/ Stable / Module / Generated / Sklearn.linear_model.RidgeCV.html # sklearn.linear_model.RidgeCV) und [RidgeRegression](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.RidgeClassifier.html#sklearn .linear_model.RidgeClassifier) Außerdem gibt es verschiedene Implementierungen von Lineares Modell. Schauen Sie sich also hier um. Wir werden jedoch die Parameter optimieren, um das geeignete Modell zu finden.

Diese Zeit ist vorbei.

Recommended Posts

Schätzung / Vorhersage des verallgemeinerten linearen Modells bei Lasso und Ridge
Unterschied zwischen linearer Regression, Ridge-Regression und Lasso-Regression
Ridge und Lasso
Das verallgemeinerte lineare Modell (GLM) und das neuronale Netz sind gleich (1)
Das verallgemeinerte lineare Modell (GLM) und das neuronale Netz sind gleich (2)
Memorandum zum Speichern und Laden des Modells
Berechnung der selbst erstellten Klasse und der vorhandenen Klasse
Ähnlichkeitsberechnung zwischen präzisen Episoden unter Verwendung der Live-Timeline und des Themenmodells