Auf diesem Übungsblatt wollen wir uns in der Praxis anschauen, wie sich Overfitting bei schlechter Modellauswahl auswirkt. Die folgenden Aufgaben sollten praktisch gelöst werden (z.B. in Python mit numpy
implementiert). Experimentieren Sie jeweils mit den Parametern. In Aufgabe 2 und 3 sollten Sie jeweils Plots anfertigen (z.B. mit matplotlib
) und die verschiedenen Lösungen visuell vergleichen.
Wir betrachten eine Funktion \(f:[-0.5,0.5] \rightarrow\mathbb{R}\). Als Ground-truth nehmen wir eine einfache Funktionale Form, z.B. \[ f(x) := \min(0.5,x^2) \]
Erzeugen Sie eine Stichprobe von \(n\) Punkten \(f(x_i),x_i, i=1...n\) für gleichmäßig abgetastete \(x_i\) (siehe Bild unten). Verrauschen Sie die Daten anschließend.
Abbildung: Beispielfunktion (grau) mit verrauschten Daten (blau).
Bestimmen Sie nun einen numerischen least-squares-fit gegen diese Daten mit Fourier-Basisfunktionen \[ \{\sin kx, \cos kx | k=1,...,N\} \] wobei der Wert von \(N\) zwischen \(1\) und \(O(N)\) schwanken sollte. Programmieren Sie Ihre Lösung so, dass immer die minimum-Norm Lösung des least-squares-Problems bestimmt wird, also die Norm des Fourier-Koeffizientenvektors so klein wie möglich sein sollte unter all denen, die die Daten optimal annähern. Dies kann man z.B. mit Hilfe der Pseudo-Inversen erreichen (wobei man sich überlegen kann, wie man das bei der Fourier Basis geschickt implementiert).
Schauen Sie sich Lösungen für verschieden große Werte von \(N\) an.
Skalieren Sie nun die Fourier-Basisfunktionen der Frequenz \(k\) mit dem Gewicht \[ w(k) = \frac{1}{1+k^2} \] und lösen Sie das minimum-Norm least-squares-Problem erneute (wieder für verschieden große \(N\)). Welches Verhalten der Lösungen beobachten Sie nun?
Hinweis: Später (im Kapitel "Gaussche Prozesse") sehen wir, dass diese Gewichtung genau einer Regularisierung mit \(\int_x \|\nabla f(x)\|^2 dx\) entspricht, wie wir sie bei der Bildrekonstruktion in Modellierung 1 eingesetzt haben.