Der Ansatz zur Verhinderung von Überlernen ist die Verallgemeinerung. Durch die Erstellung eines Modells, das sich der Verallgemeinerung bewusst ist, passt es nicht zu sehr zu den für das Training verwendeten Daten Sie können allgemeine Fälle bearbeiten.
Der Zweck der Regressionsanalyse besteht darin, ein Modell aus historischen Daten zu trainieren und unbekannte Daten vorherzusagen. Die Basis besteht darin, das Modell so einzustellen, dass Werte unter Verwendung historischer Daten vorhergesagt werden.
Historische Daten erklären jedoch Ereignisse wie Aktienkursschwankungen und Verkaufsschwankungen nicht vollständig. Es gibt eine Reihe von Datenvorhersagen, und selbst wenn die von Ihnen eingegebenen Daten identisch sind, können sich die tatsächlichen Ergebnisse ändern.
Übermäßiges Vertrauen in frühere Daten, wie z. B. Überlernen, führt zu einem Fehler bei der Datenvorhersage Dies kann dazu führen, dass die Vorhersagegenauigkeit abnimmt.
Bei der linearen Regression wird die Regularisierung als Generalisierungsmethode verwendet. Die Regularisierung bezieht sich auf die Komplexität der Beziehungen zwischen den vom Modell geschätzten Daten für das Modell, das die Regressionsanalyse durchführt. Es ist ein Ansatz, der versucht, die Beziehungen zwischen den vom Modell geschätzten Daten durch Hinzufügen von Strafen zu verallgemeinern.
L1-Regularisierung und L2-Regularisierung werden häufig als Regularisierung verwendet.
Dies ist eine Methode zur Reduzierung des Koeffizienten. Indem der Koeffizient für "Daten, die Vorhersagen nicht leicht beeinflussen" nahe Null gebracht wird Es ist eine Technik, mit der Sie ein spärliches Modell erhalten können. Dies ist nützlich, wenn Sie eine Regressionsanalyse von Daten durchführen, die viele zusätzliche Informationen als Daten enthalten. Es kann auch als Feature-Reduktionsmethode verwendet werden.
Es ist sozusagen die obere Grenzwerteinstellung des Koeffizienten. Es ist eine Methode zum Begrenzen der Größe des Koeffizienten, damit er nicht zu groß wird, und wird verwendet, um das Überlernen zu unterdrücken. Es wird gesagt, dass es einfach ist, ein glattes Modell zu erhalten (leicht zu verallgemeinern), da der Koeffizient, der als Ergebnis des Lernens erhalten wird, nicht unnatürlich ansteigt. Es gibt eine Funktion.
Die L1-Regularisierung und die L2-Regularisierung können wie in der Abbildung gezeigt vorgestellt werden. Der grün dargestellte Teil ist die Bedingung für die Regularisierung, und die blaue Konturlinie ist die Verlustfunktion, wenn keine Regularisierung durchgeführt wird.
Ohne Regularisierung konvergieren die Koeffizienten w1w1 und w2w2 gegen die Positionen der blauen Kreise. Wenn jedoch eine Regularisierung durchgeführt wird, ist es notwendig, sich dem grünen Teil als Bedingung zu nähern, also dem Koeffizienten w1w1 und w2w2 konvergieren jetzt genau zum richtigen Punkt (orangefarbener Punkt).
Wie oben erläutert, konvergiert die Figur unter Verwendung der L1-Regularisierung zum Punkt w1 = 0 w1 = 0. Bei Verwendung der L2-Regularisierung sind sowohl w1w1 als auch w2w2 kleiner als die blauen Punkte.
Die Lasso-Regression ist ein Regressionsmodell, das geeignete Parameter für die lineare Regression festlegt, während die L1-Regularisierung durchgeführt wird.
Beim maschinellen Lernen kann es für Menschen schwierig sein, die Beziehung zwischen den für die Vorhersage verwendeten Daten zu erkennen. Bei der L1-Regularisierung, wenn eine Regressionsanalyse von Daten durchgeführt wird, die viele zusätzliche Informationen als Daten enthalten Ich bestätigte, dass es nützlich sein würde. Wenn daher die Anzahl der Parameter (Anzahl der Spalten) größer ist als die Anzahl der Datensätze (Anzahl der Zeilen), Es ist besser, die Lasso-Regression zu verwenden.
# scikit-linear lernen_Lasso im Modellmodul()Ist das Modell der Lasso-Regression.
from sklearn.linear_model import Lasso
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
X, y = make_regression(n_samples=100, n_features=100, n_informative=60, n_targets=1, random_state=42)
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)
model = Lasso()
model.fit(train_X, train_y)
print(model.score(test_X, test_y))
#Ausgabeergebnis
0.967921092594
Der linearen Regression
model =LinearRegression()Zu
model = Lasso()Wechseln Sie einfach zu und Sie können mit Lasso-Regression analysieren.
Die Ridge-Regression ist ein Regressionsmodell, das geeignete Parameter für die lineare Regression festlegt, während die L2-Regularisierung durchgeführt wird.
Die Ridge-Regression hat die Eigenschaft, dass es einfacher ist, ein glatteres Modell zu erhalten (zu verallgemeinern) als ein einfaches lineares Regressionsmodell.
Im linear_model-Modul von scikit-learn
Ridge()Ist das Modell der Gratregression.
Die Implementierungsmethode ist genau die gleiche wie das einfache lineare Regressionsmodell und die Lasso-Regression. Ersetzen Sie einfach den Modellnamen.
from sklearn.linear_model import Ridge
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
X, y = make_regression(n_samples=100, n_features=50, n_informative=50, n_targets=1, noise=100.0, random_state=42)
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)
model = Ridge()
model.fit(train_X, train_y)
print(model.score(test_X, test_y))
#Ausgabeergebnis
0.90786283239
Die ElasticNet-Regression ist ein Modell, das die Lasso-Regression und die Ridge-Regression kombiniert, um einen Regularisierungsterm zu erstellen.
Als Verdienst Der Punkt, an dem Informationen nach Daten sortiert werden, die viele zusätzliche Informationen enthalten, die von der Lasso-Regression verarbeitet werden Weil es eine Kombination von Punkten ist, die es einfach macht, das glatte Modell zu erhalten (zu verallgemeinern), das in der Gratregression behandelt wird. Dies ist die beste Methode, wenn Sie ein Modell erstellen möchten, das die Vorzüge beider Modelle in Einklang bringt.
from sklearn.linear_model import ElasticNet
model = ElasticNet()
#Außerdem Scikit-lerne ElasticNet()Zu l1_Sie können ein Argument namens ratio angeben.
model = ElasticNet(l1_ratio=0.3)
#Mit den obigen Einstellungen können Sie das Verhältnis von L1-Regularisierung und L2-Regularisierung festlegen.
#In den obigen Fällen wird gezeigt, dass die L1-Regularisierung zu 30% und die L2-Regularisierung zu 70% wirksam ist.
#(Wenn nicht angegeben, wird es im ElasticNet-Regressionsmodell von genau der Hälfte und der Hälfte angegeben.)
from sklearn.linear_model import Ridge
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import ElasticNet
#Daten generieren
X, y = make_regression(n_samples=100, n_features=50, n_informative=50, n_targets=1, noise=100.0, random_state=42)
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)
#① Lineare Regression
model = LinearRegression()
model.fit(train_X,train_y)
# test_X, test_Geben Sie den Entscheidungskoeffizienten für y aus
print("Lineare Regression:{}".format(model.score(test_X, test_y)))
#② Kehre zu Lasso zurück(L1-Regularisierung)
model = Lasso().fit(train_X,train_y)
# test_X, test_Geben Sie den Entscheidungskoeffizienten für y aus
print("Lasso kehrt zurück:{}".format(model.score(test_X, test_y)))
#③ Ridge Rückkehr(L2-Regularisierung)
model = Ridge()
model.fit(train_X,train_y)
# test_X, test_Geben Sie den Entscheidungskoeffizienten für y aus
print("Ridge kehrt zurück:{}".format(model.score(test_X, test_y)))
#④ Elastische Nettorendite(Regularisierung von L1 und L2)
model = ElasticNet()
#Außerdem Scikit-lerne ElasticNet()Zu l1_Sie können ein Argument namens ratio angeben.
model = ElasticNet(l1_ratio=0.3)
#Es zeigt, dass die L1-Regularisierung zu 30% und die L2-Regularisierung zu 70% wirksam ist.
Recommended Posts