Zum Hauptinhalt springen

4.4 Polynomiale Regression & Ridge-Regression

Nichtlineare Effekte mit einem linearen Modell​

📄 04_linear_methods_ws26.pdf, Folie 24 zeigt den Auto-Datensatz (ISLR): Verbrauch in Meilen pro Gallone (mpg) gegen PS (horsepower) für 392 Autos. Die Punktwolke ist deutlich gekrümmt: Bei wenig PS fällt der mpg-Wert steil, bei viel PS flacht er ab. Eine Gerade (gelb) passt schlecht, ein Polynom zweiten Grades (blau) deutlich besser, ein Polynom fünften Grades (grün) schlängelt sich und schießt am rechten Rand nach oben.

Die Idee 📄 04_linear_methods_ws26.pdf, Folie 25: Man nimmt horsepower2\text{horsepower}^2 einfach als zusätzliches Merkmal auf:

mpg=w0+w1⋅horsepower+w2⋅horsepower2+ϵ\text{mpg} = w_0 + w_1\cdot\text{horsepower} + w_2\cdot\text{horsepower}^2 + \epsilon

(ϵ\epsilon ist der zufällige Fehler.) Der Fit liefert:

KoeffizientStd.-Fehlert-Statistikp-Wert
Intercept (w0w_0)56,90011,800431,6kleiner als 0,0001
horsepower (w1w_1)−0,4662-0{,}46620,0311−15,0-15{,}0kleiner als 0,0001
horsepower² (w2w_2)0,00120,000110,1kleiner als 0,0001

Lesart: Der lineare Term ist negativ (mehr PS, weniger mpg), der quadratische positiv (der Abfall wird mit steigender PS-Zahl flacher). Der sehr kleine p-Wert von w2w_2 sagt: Der quadratische Term ist kein Zufall, die Krümmung ist echt. Beispiel bei 100 PS: 56,9−0,4662⋅100+0,0012⋅10 000≈22,356{,}9 - 0{,}4662\cdot 100 + 0{,}0012\cdot 10\,000 \approx 22{,}3 mpg. (Mit den gerundeten Koeffizienten; bei großen PS-Zahlen machen sich Rundungsfehler in w2w_2 deutlich bemerkbar.)

Ergänzung: Standardfehler, t-Statistik und p-Wert stammen aus der klassischen Statistik (Regressionsoutput von statsmodels bzw. R). t=Koeffizient/Std.-Fehlert = \text{Koeffizient}/\text{Std.-Fehler}. Ein großer Betrag von tt (kleiner p-Wert) spricht dagegen, dass der wahre Koeffizient 0 ist.

Warum ist das immer noch „linear“?​

Das ist die zentrale Einsicht: „Linear“ heißt linear in den Parametern w\boldsymbol w, nicht in der Eingabe xx. Man erweitert die Designmatrix um Spalten x0=1,x1,x2,…,xMx^0 = 1, x^1, x^2, \dots, x^M 📄 04_linear_methods_ws26.pdf, Folie 27:

X=(1x1x12⋯x1M1x2x22⋯x2M⋮⋮1xnxn2⋯xnM)X = \begin{pmatrix} 1 & x_1 & x_1^2 & \cdots & x_1^M\\ 1 & x_2 & x_2^2 & \cdots & x_2^M\\ \vdots & & & & \vdots\\ 1 & x_n & x_n^2 & \cdots & x_n^M \end{pmatrix}

Dann ist y^=Xw\hat{\boldsymbol y} = X\boldsymbol w wieder ein lineares Modell, und die Normalengleichung aus 4.3 liefert die Lösung ohne jede Änderung.

Basisfunktionen und Kernel

Ergänzung, nicht auf den Folien: Allgemein kann man jede feste Transformation ϕ(x)=(ϕ0(x),…,ϕM(x))\phi(x) = (\phi_0(x), \dots, \phi_M(x)) verwenden, z. B. Polynome, Gaußglocken oder Sinusfunktionen, und das Modell y^=wTϕ(x)\hat y = \boldsymbol w^T\phi(x) mit der Normalengleichung lösen, indem man die Spalten ϕj(xi)\phi_j(x_i) in die Designmatrix schreibt. Das nennt man Basisfunktionen-Regression. Bei sehr vielen (oder unendlich vielen) Basisfunktionen hilft der Kernel-Trick (kernelized linear regression), siehe Kapitel 7 – Kernel.

Overfitting​

Wenn höhere Potenzen helfen, warum nicht gleich Grad 9? 📄 04_linear_methods_ws26.pdf, Folie 27 zeigt das klassische Beispiel aus Bishop: 10 verrauschte Punkte (blau) einer Sinuskurve (grün), angepasst mit Polynomen vom Grad MM (rot):

MMErgebnis
0Konstante, viel zu einfach (Underfitting)
1Gerade, immer noch zu einfach
3trifft die Sinusform gut
9geht exakt durch alle 10 Punkte, schwingt dazwischen aber wild (Overfitting)

Warum trifft M=9M = 9 alle Punkte? Ein Polynom vom Grad 9 hat 10 Koeffizienten. Mit 10 Punkten hat man 10 Gleichungen für 10 Unbekannte, das System ist exakt lösbar. Das Modell lernt das Rauschen auswendig, statt die Struktur zu erkennen.

📄 04_linear_methods_ws26.pdf, Folie 28 zeigt den Fehler (root mean squared error, ERMSE_\text{RMS}) auf Trainings- und Testdaten:

  • Trainingsfehler sinkt mit wachsendem MM immer weiter, bei M=9M = 9 ist er 0.
  • Testfehler sinkt bis M≈3M \approx 3, bleibt dann flach und explodiert bei M=9M = 9.

Der Trainingsfehler ist also kein gutes Maß für die Qualität eines Modells. Mehr dazu in Kapitel 5 – Modellbewertung (Bias-Varianz, Kreuzvalidierung).

Ergänzung: Beim Overfitting werden die Koeffizienten typischerweise riesig (bei Bishop in der Größenordnung von 10510^5 für M=9M = 9), mit wechselnden Vorzeichen, die sich gegenseitig fast aufheben. Genau da setzt Ridge an.

Ridge-Regression​

Idee​

📄 04_linear_methods_ws26.pdf, Folie 29 Man ergänzt die Verlustfunktion um einen Strafterm für große Gewichte:

∑i=1n(yi−b−∑j=1pwjxij)2+λ∑j=1pwj2=RSS+λ∑j=1pwj2\sum_{i=1}^n\Big(y_i - b - \sum_{j=1}^p w_jx_{ij}\Big)^2 + \lambda\sum_{j=1}^p w_j^2 = \text{RSS} + \lambda\sum_{j=1}^p w_j^2
  • RSS ist die residual sum of squares, die Summe der quadrierten Residuen.
  • λ≥0\lambda \ge 0 ist ein Hyperparameter, der die Stärke der Strafe festlegt.
  • Der Strafterm ist die quadrierte L2-Norm, man spricht von L2-Regularisierung (L2 regularisation).

Auf den Folien zusammengefasst:

  • Es kostet, Parameter ungleich null zu haben.
  • Die Parameter werden Richtung 0 gezogen (shrinkage).
  • Ridge-Regression reduziert Overfitting.
  • Man kann damit lineare Regression auch dann rechnen, wenn es mehr Parameter als Datenpunkte gibt.
  • Ebenfalls populär ist die Lasso-Regression mit L1-Strafe λ∑j∣wj∣\lambda\sum_j\lvert w_j\rvert.

Die Bilder zeigen das Polynom vom Grad 9:

λ\lambdaErgebnis
1,5⋅10−81{,}5\cdot 10^{-8} (ln⁡λ=−18\ln\lambda = -18)schon diese winzige Strafe glättet die Kurve, sie folgt der Sinusform gut
11 (ln⁡λ=0\ln\lambda = 0)zu starke Strafe, die Kurve ist fast flach (Underfitting)

λ\lambda steuert also stufenlos die Modellkomplexität: λ=0\lambda = 0 ist gewöhnliche lineare Regression, λ→∞\lambda\to\infty treibt alle wjw_j gegen 0. Das passende λ\lambda wählt man mit Kreuzvalidierung (Kapitel 5).

Der Bias wird nicht bestraft

In der Folienformel steht bb getrennt, und die Strafsumme läuft nur über j=1,…,pj = 1, \dots, p. Das ist Absicht: Der Achsenabschnitt verschiebt die Kurve nur nach oben oder unten. Würde man ihn bestrafen, hinge das Ergebnis davon ab, wo der Nullpunkt der yy-Achse liegt.

Herleitung der geschlossenen Lösung​

Ergänzung, nicht auf den Folien: Der Einfachheit halber seien die Daten zentriert (Mittelwerte von xx-Spalten und yy abgezogen), dann ist b=yˉb = \bar y und man kann ihn weglassen. In Matrixform:

L(w)=∥Xw−y∥2+λ∥w∥2=(Xw−y)T(Xw−y)+λ wTwL(\boldsymbol w) = \lVert X\boldsymbol w - \boldsymbol y\rVert^2 + \lambda\lVert\boldsymbol w\rVert^2 = (X\boldsymbol w - \boldsymbol y)^T(X\boldsymbol w - \boldsymbol y) + \lambda\,\boldsymbol w^T\boldsymbol w

Gradient: Der erste Teil ist wie in 4.3, der Strafterm hat Ableitung ∂(λ∑jwj2)/∂wk=2λwk\partial(\lambda\sum_j w_j^2)/\partial w_k = 2\lambda w_k:

∇L=2XT(Xw−y)+2λw\nabla L = 2X^T(X\boldsymbol w - \boldsymbol y) + 2\lambda\boldsymbol w

Nullsetzen:

XTXw+λw=XTy  ⟹  (XTX+λI) w=XTy  ⟹  wridge=(XTX+λI)−1XTyX^TX\boldsymbol w + \lambda\boldsymbol w = X^T\boldsymbol y \;\Longrightarrow\; (X^TX + \lambda I)\,\boldsymbol w = X^T\boldsymbol y \;\Longrightarrow\; \boxed{\boldsymbol w_\text{ridge} = (X^TX + \lambda I)^{-1}X^T\boldsymbol y}

Der einzige Unterschied zur Normalengleichung: λ\lambda wird auf die Diagonale von XTXX^TX addiert. (Wer den Bias in XX mitführt, setzt den zugehörigen Diagonaleintrag von II auf 0.)

Warum funktioniert das auch für p>np > n? XTXX^TX ist positiv semidefinit, alle Eigenwerte sind ≥0\ge 0, aber manche können 0 sein (dann ist die Matrix singulär). XTX+λIX^TX + \lambda I hat die Eigenwerte Eigenwert+λ\text{Eigenwert} + \lambda, die für λ>0\lambda > 0 alle echt positiv sind. Damit ist die Matrix immer invertierbar, und unter den unendlich vielen perfekten Lösungen wird eine eindeutige ausgewählt.

Zahlenbeispiel: Shrinkage​

Ergänzung: Die Punkte (1,2)(1,2), (2,3)(2,3), (3,5)(3,5), diesmal ein Modell ohne Achsenabschnitt, y^=wx\hat y = wx. Dann ist XTX=∑xi2=14X^TX = \sum x_i^2 = 14 und XTy=∑xiyi=23X^T\boldsymbol y = \sum x_iy_i = 23, also

wridge=2314+λ.w_\text{ridge} = \frac{23}{14 + \lambda}.
λ\lambda0114100→∞\to\infty
ww1,6431,5330,8210,202→0\to 0

Das Gewicht wird mit wachsendem λ\lambda kontinuierlich kleiner, aber nie exakt 0.

Ridge vs. Lasso

Ergänzung: Lasso (L1) setzt bei genügend großem λ\lambda einzelne Gewichte exakt auf 0 und wählt damit Merkmale aus (feature selection). Ridge (L2) schrumpft alle Gewichte, lässt aber keins ganz verschwinden. Lasso hat keine geschlossene Lösung.

Fallstrick: Skalierung der Merkmale

Der Strafterm behandelt alle wjw_j gleich. Misst man ein Merkmal in Millimetern statt Metern, wird sein Gewicht 1000-mal kleiner und kaum noch bestraft. Vor Ridge/Lasso die Merkmale daher standardisieren (Mittelwert 0, Standardabweichung 1). Das gilt besonders bei polynomialen Merkmalen, deren Potenzen völlig unterschiedliche Größenordnungen haben.

In scikit-learn​

Ergänzung:

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.linear_model import Ridge

model = make_pipeline(PolynomialFeatures(degree=9, include_bias=False),
StandardScaler(),
Ridge(alpha=1e-3)) # alpha entspricht lambda
model.fit(x.reshape(-1, 1), t)