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