2.4 gradientenabstiegsverfahren - swl.htwsaar.de · § starte mit zufälliger wahlder parameter w...
TRANSCRIPT
45
2.4 Gradientenabstiegsverfahren§ Optimale Parameter lassen sich bei linearer Regression
analytisch bestimmen, dennoch verwendet man in derRegel das sogenannte Gradientenabstiegsverfahren,um diese (näherungsweise) zu bestimmen
§ Gradientenabstiegsverfahren ist meist effizienter als das Invertieren der Matrix (XTX)-1 und findet auch dann Parameter, wenn diese nicht invertierbar ist
§ Gradientenabstiegsverfahren auch für andere Probleme einsetzbar, deren optimale Parameter nichtanalytisch bestimmt werden können
Data Science / Kapitel 2: Regression
46
Gradient§ Gradient verallgemeinert das Konzept der Ableitung
für Funktionen in mehreren Veränderlichen
§ Gradient ist eine Funktion in mehreren Veränderlichenund gibt die Richtung des steilsten Anstiegs an
rF (x) =
2
64
�F�x1
...�F�xn
3
75
Data Science / Kapitel 2: Regression
47
Gradient§ Beispiel: Betrachte die Funktion F(x0 , x1) = 4x0
2 + x12
�F�x0
= 8x0�F�x1
= 2x1
rF
✓0.00.0
�◆=
0.00.0
�rF
✓�7.5�5.0
�◆=
�50.0�10.0
�
Data Science / Kapitel 2: Regression
48
Gradientenabstiegsverfahren§ Gradientenabstiegsverfahren (gradient descent)
beruht auf folgender Idee:
§ starte mit zufälliger Wahl der Parameter w
§ wiederhole für bestimmte Rundenzahl oder bis Konvergenz§ berechne den Gradienten ∇L(w) an dieser Stelle,
als die Richtung des steilsten Aufstiegs
§ aktualisiere die Parameter als w = w – η ∇L(w),mit Lernrate η > 0.0, d.h. laufe ein Stückentgegen der Richtung des steilsten Aufstiegs
Data Science / Kapitel 2: Regression
49
Ein einfaches Beispiel§ Betrachten wir folgende einfache Funktion in x
Wir können analytisch bestimmen, dass diese Funktionihr Minimum an der Stelle -1 annimmt
f(x) = x 2 + 2x f 0(x) = 2x+ 2
Data Science / Kapitel 2: Regression
50
§ Betrachten wir folgende Funktion in x
§ Für die gewählte Lernrate wird nur ein lokales Minimum,nicht jedoch das global Minimum gefunden
Ein weiteres Beispiel
f(x) = x2 + 2 sin(4x) f 0(x) = 2x+ 8 cos(4x)
Data Science / Kapitel 2: Regression
51
Multiple Lineare Regression§ Gradient für multiple lineare Regression ist definiert als
Data Science / Kapitel 2: Regression
ÒL(w) = ≠ 2XT y + 2 XT X w= ≠ 2XT (y ≠ X w)
=
S
WWWU
≠2qn
i=1 xi,01
yi ≠qm
j=0 xi,j wj
2
...≠2
qni=1 xi,m
1yi ≠
qmj=0 xi,j wj
2
T
XXXV
52
Stochastisches Gradientenabstiegsverfahren§ Berechnung des Gradienten über alle Datenpunkte
ist zu teuer bei sehr großen Datenmengen
§ Stochastisches Gradientenabstiegsverfahren(stochastic gradient descent, SGD) betrachtet injedem Schritt nur einen einzelnen zufälliggewählten Datenpunkt, um denGradienten anzunähern
§ Als Mittelweg kann eine kleine Anzahl zufälliggewählter Datenpunkte betrachtet werden
Data Science / Kapitel 2: Regression
53
Adaptive Lernrate§ Zudem wird häufig eine adaptive Lernrate verwendet,
welche vom Fortschritt des Verfahrens abhängt, z.B.
in Runde r ∊ {1, 2, …} mit Konstanten c1 ≤ c2
§ Die Idee hierbei ist, dass das Verfahren zunehmend vorsichtig wird und kleinere Schritte macht und soz.B. ein gefundenes (lokales) Minimum in späteren Iterationen nicht mehr verlässt
÷(r) = c1r + c2
Data Science / Kapitel 2: Regression
54
2.5 Polynomiale Regression§ Polynomiale Regression nimmt an, dass das abhängige
Merkmal sich als Polynom vom Grad d in denabhängigen Merkmalen beschreiben lässt, z.B.bei einem abhängigen Merkmal als
§ Die Werte x2, …, xd werden vorberechnet und wie zusätzliche unabhängige Merkmale bei einermultiplen linearen Regression behandelt
§ Grad des Polynoms d ist ein sog. Hyperparameter,der die Gestalt des Modells beeinflusst
y = w0 + w1 x+ w2 x 2 + . . .+ wd x d
Data Science / Kapitel 2: Regression
55
Polynomiale Regression§ Auch bei mehreren ursprünglichen unabhängigen
Merkmalen können wir ein Polynom vom Grad danpassen, um das abhängige Merkmalvorherzusagen, z.B.
§ Bei m ursprünglichen unabhängigen Merkmal und einem Polynom vom Grad d erhalten wir somit
unabhängige Merkmale insgesamt
y = w0,0+w1,0 x0+w0,1 x1+w1,1 x0 x1+w2,0 x 20 +w0,2 x 2
1 + . . .+wd,d xd0 x
d1
(d+ 1)m
Data Science / Kapitel 2: Regression
56
Polynomiale Regression in Pythonimport pandas as pdimport numpy as npfrom sklearn import linear_model, preprocessing, metricsimport matplotlib.pyplot as plt
# Autodaten lesencars = pd.read_csv('../data/auto-mpg/auto-mpg.data', header=None, sep='\s+')
# Verbrauchswerte extrahiereny = cars.iloc[:,0].values
# Leistungswerte extrahierenX = cars.iloc[:,[3]].valuesX = X.reshape(X.size, 1)
# Polynomiale Merkmale (d.h. Leistung^2) berechnenpoly = preprocessing.PolynomialFeatures(2)Xp = poly.fit_transform(X)
# Lineare Regressionreg = linear_model.LinearRegression()reg.fit(Xp,y)
Data Science / Kapitel 2: Regression
57
Polynomiale Regression in Python
§ Vollständiges Jupyter-Notebook unter:[HTML][IPYNB]
# Polynom plottenXs = np.array(sorted(X))Xs = Xs.reshape(Xs.size,1)Xsp = poly.fit_transform(Xs)plt.scatter(X, y, color='blue', marker='x')plt.plot(Xs, reg.predict(Xsp), color='red', lw=2)plt.xlabel('Leistung [hp]')plt.ylabel('Verbrauch [mpg]')plt.show()
# Parameter ausgebenprint('Parameter:')print('w0: %f'%reg.intercept_)print('w1: %f'%reg.coef_[0])print('w2: %f'%reg.coef_[1])print('Bestimmtheitsmaß')print('R2: %f'%metrics.r2_score(y,reg.predict(Xp)))
Data Science / Kapitel 2: Regression
59
2.6 Merkmalstransformation§ Besteht zwischen dem zu erklärenden abhängigen
Merkmal und den unabhängigen Merkmalen einnicht-linearer Zusammenhang, so lässt sichdieser häufig durch eine Transformationder Merkmale auf einen linearenZusammenhang zurückführen
Data Science / Kapitel 2: Regression
60
Potenzgesetze (power laws)§ Zahlreiche Phänomene in der Natur folgen einem
sogenannten Potenzgesetz (power law), d.h.die Größe y verhält sich zur Größe x als
§ Skaleninvarianz (scale invariance) ist eine Eigenschaft solcher Phänomene, d.h. multiplizieren wir den Wert von xmit einem Faktor c, ändert sich der Wert von y immerum einen Faktor cβ1
y = f(x) = —0 x —1
f(cx) = —0(cx) —1 = —0c —1x —1 = c —1f(x)
Data Science / Kapitel 2: Regression
61
Zipf‘sches Gesetz (Zipf‘s law)§ George K. Zipf (1902–1950) beobachtete,
dass für natürlichsprachliche Text gilt,dass die Häufigkeit eines Wortes f(w)umgekehrt proportional zu seinemHäufigkeitsrang r(w) ist, d.h.:
§ Das häufigste Wort kommt somit
§ doppelt so oft vor wie das zweithäufigste Wort§ zehnmal so oft vor wie das Wort auf Rang 10§ hundertmal so oft vor wie das Wort auf Rang 100
Quelle: http://en.wikipedia.org
Data Science / Kapitel 2: Regression
f(w) Ã 1r(w) –
mit – ¥ 1
62
Lotka‘sches Gesetz (Lotka‘s law)§ Alfred J. Lotka (1880–1949) beobachtete, dass sich die
Anzahl f(n) der Autoren mit n Veröffentlichungenbeschreiben lässt als
mit Parametern C und a, die von der Gesamtzahl derAutoren und dem Fachgebiet abhängen
f(n) = C
na
Data Science / Kapitel 2: Regression
63
Wachstumsmodelle§ Wachstumsmodelle beschreiben Populationsgröße, z.B.
einer Bakterienkultur, nach Ablauf von t Zeiteinheiten
§ Einfaches Modell unter der Annahme geometrischen Wachstums mit Wachstumsrate r und Anfangsgröße der Population P(0) als Parameter
§ Komplexere Modelle berücksichtigen zeitabhängige Wachstumsraten und Kapazitätsbeschränkungen
P (t) = P (0) · rt mit r Ø 1
Data Science / Kapitel 2: Regression
64
Merkmalstransformation§ Gesetze von Zipf und Lotka und das einfache
Wachstumsmodell beschreiben nicht-lineare Zusammenhänge zwischen Merkmalen
§ Wie können wir ihre Parameter (z.B. Wachstumsrate r)anhand von beobachteten Daten schätzen?
§ Idee: Transformiere das abhängige und die unabhängigen
Merkmale so, dass ein linearer Zusammenhangzwischen ihnen entsteht; dann können wir
lineare Regression verwenden
Data Science / Kapitel 2: Regression
65
Merkmalstransformation für Zipf‘sches Gesetz§ Worthäufigkeit f(w) verhält sich zum Häufigkeitsrang r als
§ Logarithmische Transformation der Merkmale
§ Parameter α kann also anhand der logarithmisch transformierten Merkmale geschätzt werden
Data Science / Kapitel 2: Regression
f(w) Ã 1r(w) –
mit – ¥ 1
log f(w) Ã log 1r(w) –
… log f(w) Ã ≠– log r(w)
66
Merkmalstransformation für Zipf‘sches Gesetz§ Beispiel: Worthäufigkeit und Häufigkeitsrang in
The New York Times zwischen 1987 und 2007
0 1 2 3 4
45
67
log(Häufigkeitsrang)
log(Häufigkeit)
– ¥ ≠1.110
Data Science / Kapitel 2: Regression
67
2.7 Evaluation§ Bisher haben wir die Güte unserer Modelle immer auf
den gleichen Daten gemessen, auf denen auchdas Modell selbst trainiert wurde
§ Dies ist eine sehr schlechte Idee (und verpönt), da
§ wir nicht wissen, wie gut unser Modell auf zuvorunbekannten Daten Vorhersagen treffen kann(z.B. neue Autos in unseren Autodaten)
§ eine Überanpassung des Modells an unsere Datenstattfinden kann, wenn es sehr viele Merkmale,aber nur vergleichsweise wenige Datenpunkte gibt
Data Science / Kapitel 2: Regression
68
Überanpassung§ Verwendet man sehr viele unabhängige Merkmale
(z.B. bei polynomialer Regression mit hohem Grad d)kann es zu einer Überanpassung (overfitting)des Modells an die Daten kommen
§ Das gelernte Modell beschreibt dann die vorhandenenDaten nahezu perfekt, kann aber auf bisherunbekannten Daten keine verlässlichenVorhersagen treffen
Data Science / Kapitel 2: Regression
70
Modellauswahl§ Um eine Überanpassung zu vermeiden, müssen wir
zuerst ein Modell geeigneter Komplexität auswählen, indem wir seine Hyperparameter abstimmen
§ Hyperparameter sind solche Parameter, welche dieGestalt des Modells beeinflussen, also z.B. der Graddes Polynoms d oder die berücksichtigten Merkmale
§ Dies bezeichnet man als Modellauswahl (model selection)
Data Science / Kapitel 2: Regression
71
2-Fache Kreuzvalidierung§ Eine einfache Möglichkeit zur Modellauswahl und
zur Einschätzung der Vorhersagekraft bietet die2-fache Kreuzvalidierung (2-fold cross validation)
§ Die vorhandenen Daten werden zufällig aufgeteilt in
§ Trainingsdaten (z.B. 60%)
§ Validierungsdaten (z.B. 20%)
§ Testdaten (z.B. 20%)
Data Science / Kapitel 2: Regression
72
2-Fache Kreuzvalidierung
§ Trainingsdaten zum Bestimmen der Parameter
§ Validierungsdaten zur Modellauswahl
§ Testdaten zur Einschätzung der Vorhersagekraftdes gewählten Modells
Data Science / Kapitel 2: Regression
Daten
Training Validierung Test
Modellauswahl Einschätzungder
Vorhersagekraft
73
2-Fache Kreuzvalidierung§ Beispiel: Polynomiale Regression mit Grad d
§ bestimme den Grad d, so dass ein auf den entsprechendesauf den Trainingsdaten trainiertes Modell die besteVorhersagekraft auf den Validierungsdaten erreicht
§ schätze die Vorhersagekraft des gewählten Modellsdurch Anwendung auf die Testdaten
Data Science / Kapitel 2: Regression
74
k-Fache Kreuzvalidierung§ Bei der k-fachen Kreuzvalidierung (k-fold crossvalidation) werden die Daten zufällig ink gleich große Teilmengen aufgeteilt
§ Es werden k Iterationen durchgeführt, wobei jede Teilmenge einmal zum Testen verwendet wird
§ Dies führt zu einer robusteren Einschätzung der Vorhersagekraft, insbesondere wenn dieursprüngliche Datenmenge klein ist
Data Science / Kapitel 2: Regression
75
k-Fache Kreuzvalidierung
Data Science / Kapitel 2: Regression
1 2 3 4 5
1 2 3 4 5 M1 (e.g., MSE1)
1 2 3 4 5 M2 (e.g., MSE2)
1 2 3 4 5 M3 (e.g., MSE3)
1 2 3 4 5 M4 (e.g., MSE4)
1 2 3 4 5 M5 (e.g., MSE5)
76
k-Fache Kreuzvalidierung§ Jede Iteration liefert eine Schätzung der Vorhersagekraft,
aus denen wir Mittelwert und Varianz bestimmen können
§ Da die Vorhersagekraft auf den Testdaten, die in anderen Iterationen Trainingsdaten sind, geschätzt wird, kann es zu einer Überanpassung kommen
§ Bei der geschachtelten k-fachen Kreuzvalidierung wird dieses Problem durch eine Aufteilung der Trainingsdatenin Trainingsdaten und Testdaten vermieden
Data Science / Kapitel 2: Regression
77
k-Fache Kreuzvalidierung in Python
Data Science / Kapitel 2: Regression
import pandas as pdimport numpy as npfrom sklearn import linear_model, preprocessing, metrics, model_selectionimport matplotlib.pyplot as plt
# Autodaten lesencars = pd.read_csv('../data/auto-mpg/auto-mpg.data', header=None, sep='\s+')
# Verbrauchswerte extrahiereny = cars.iloc[:,0].values
# Leistungswerte extrahierenX = cars.iloc[:,[3]].valuesX = X.reshape(X.size, 1)
# Polynomiale Merkmale (d.h. Leistung^2) berechnenpoly = preprocessing.PolynomialFeatures(2)X = poly.fit_transform(X)
78
k-Fache Kreuzvalidierung in Python
Data Science / Kapitel 2: Regression
# 5-Fache Kreuzvalidierung durchführenkf = model_selection.KFold(n_splits=5, shuffle=True)mses = []for train_index, test_index in kf.split(X):
# Aufteilung in Trainings- und TestdatenX_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]
# Lineare Regressionreg = linear_model.LinearRegression()reg.fit(X_train, y_train)
# Parameter ausgebenprint('Parameter:')print('w0: %f'%reg.intercept_)print('w1: %f'%reg.coef_[0])print('w2: %f'%reg.coef_[1])
# MSE berechnenmse = sum((y_test - reg.predict(X_test))**2) / len(y_test)print('MSE: %f' % mse)mses.append(mse)
print('MSE (Mittelwert): %f' % (sum(mses) / len(mses)))
79
2.8 Regularisierung§ Regularisierung (regularization oder shrinkage) bietet
eine Möglichkeit, die Komplexität des Modellsin der Straffunktion zu berücksichtigen
§ Beim Trainieren, d.h. Bestimmen der Parameter, könnendann bessere Vorhersagekraft und Modellkomplexitätgegeneinander abgewogen werden
§ Ridge Regression und LASSO sind gängige regularisierte Varianten der linearen Regression
Data Science / Kapitel 2: Regression
80
Ridge Regression§ Ridge Regression verwendet folgende Straffunktion
mit
und λ > 0 als Hyperparameter
§ Komplexe Modelle, die viele Parameter verwenden,werden damit durch die Straffunktion benachteiligt
Data Science / Kapitel 2: Regression
L(w) = (y ≠ Xw)T (y ≠ Xw) + ⁄wTw
wTw =mÿ
i=1w2
i
81
LASSO§ LASSO verwendet folgende Straffunktion
mit
und λ > 0 als Hyperparameter
§ LASSO weist, im Vergleich zu Ridge Regression, vielen Parametern den Wert 0 zu und verwendet damitnur eine Teilmenge der Merkmale
Data Science / Kapitel 2: Regression
L(w) = (y ≠ Xw)T (y ≠ Xw) + ⁄ÎwÎ1
ÎwÎ1 =mÿ
i=1|wi|
83
Ridge Regression in Python
Data Science / Kapitel 2: Regression
import pandas as pdimport numpy as npfrom sklearn import linear_model, preprocessingimport matplotlib.pyplot as plt
# Autodaten lesencars = pd.read_csv('../data/auto-mpg/auto-mpg.data', header=None, sep='\s+')
# Stichprobe von 10 Autossample = random.sample(range(0,len(cars)), 10)out_of_sample = list(set(range(0,len(cars))) - set(sample))
# Leistungs- und Verbrauchswerte extrahiereny = cars.iloc[sample, 0].valuesy_oos = cars.iloc[out_of_sample, 0].values
# Leistungswerte für Stichprobe auswählenX = cars.iloc[sample, [3]].valuesX.reshape(X.size, 1)
# Polynomiale Merkmale berechnenpoly = preprocessing.PolynomialFeatures(5)Xp = poly.fit_transform(X)
84
Ridge Regression in Python
Data Science / Kapitel 2: Regression
for lmbd in [0.0, 0.0001, 0.0001, 0.001, 0.01, 0.1, 1.0, 10.0, 100.0]:
# Ridge Regressionreg = linear_model.Ridge(alpha=lmbd, normalize=True)reg.fit(Xp,y)
# Plot erstellenhp = cars.iloc[:,3].valuesmpg = cars.iloc[:,0].valueshps = np.array(sorted(hp))hps = hps.reshape(hps.size, 1)hpsp = poly.fit_transform(hps)
plt.title("lambda: " + str(lmbd))plt.scatter(hp, mpg, color='gray', marker='x')plt.scatter(X, y, color='blue', marker='o')plt.plot(hps, reg.predict(hpsp), color='red', lw=2)plt.xlabel('Leistung [hp]')plt.ylabel('Verbrauch [mpg]')plt.xlim([min(hp), max(hp)])plt.ylim([min(mpg), max(mpg)])plt.show()
85
Zusammenfassung§ Gradientenabstiegsverfahren zum Bestimmen (nahezu)
optimaler Parameter für multiple lineare Regression
§ Polynomiale Regression und Merkmalstransformationzum Anpassen polynomialer bzw. nicht-linearer Modelle
§ Kreuzvalidierung zum Vermeiden von einer Überanpassung des Modells an die Daten
§ Regularisierung zum Abwägen zwischenModellkomplexität und Vorhersagekraft
Data Science / Kapitel 2: Regression