JGU Logo JGU Logo JGU Logo JGU Logo

Institut für Informatik

Frank Fischer
Sommersemester 2023

Mathematische Modellierung am Rechner

Übungsblatt 2: Empirische Modellierung
Letzte Änderung : 13:21 Uhr, 02 May 2023
Abgabetermin : 15. Mai 2023, 12 Uhr
Abnahmetermin : 16. Mai 2023




Aufgabe 1: Wettervorhersage mittels Funktionsextrapolation

Aktualisierung des Skriptes


Programmstruktur
Für die Gestaltung Ihres Programms gibt es verschiedene Möglichkeiten: Die einfachste ist, Matplotlib direkt zu verwenden und in Ihrem Python-Skript einfach nacheinander verschiedenen Diagramme zu erzeugen und anzuzeigen. Diese erscheinen standardmäßig in eigenen Fenstern, die von Matplotlib selbst erzeugt werden; eine weitergehende Interaktion mit der Anwendung ist dann allerdings nicht möglich (es läuft einfach das programmierte Skript ab).
Falls Sie bevorzugen, eine interaktive Anwendung mit einem frei programmierten GUI zu gestalten (dies ist für diese Aufgabe aber nicht unbedingt nötig) können Sie Matplotlib-Plots auch in einem Qt-Widget anzeigen lassen (siehe Skript für ein Beispiel)..


Daten
Auf der Seite des Deutschen Wetterdienstes können Tagestemperaturen verschiedener Orte in Deutschland heruntergeladen werden (der Download-Button befindet sich unter den Daten selbst, links vom Druck-Symbol). Die Tabelle selbst enthält viele verschiedene Arten von Messwerten; in dieser Aufgabe beschränken wir uns aber auf Temperatur und Niederschlag (jeweils separat, als eindimensionale Funktion der Zeit. Wir müssen hier die entsprechende(n) Spalte(n) auswählen.


Falls die Seite des Deutschen Wetterdienstes nicht funktioniert, können Sie auch diese Testdaten (für München) verwenden



Aufgabe 1.1: Darstellung des Datensatzes.

[10 Punkte]


Abbildung 1: Abbildung 1: Abbildung 1: Abbildung 1:
Abbildung 1: Wetterdaten für Frankfurt am Main.


Nun geht es an die Arbeit. Als erstes schauen wir uns die Rohdaten an. Bearbeiten Sie hierzu die folgenden Teilaufgaben:



Aufgabe 1.2: Polynominterpolation

[15 Punkte]


Abbildung 2: Abbildung 2: Abbildung 2: Abbildung 2:
Abbildung 2: Polynominterpolation.


Das erste „richtige“ Modell, das wir uns anschauen, ist die Annäherung von Daten mit Polynomen. Wir wollen hierbei eine polynomielle Kurve finden, die nah an allen gemessenen Datenpunkten liegt. Dies kann man auf zwei Arten tun:

In beiden Fällen kann man die erhaltene Kurve entweder zwischen Datenpunkten ablesen — dann spricht man von Interpolation — oder rechts bzw. links vom Rand der Daten; dann nennt man es Extrapolation. Eigentlich ist das mathematisch also dieselbe Operation.
In dieser Aufgabe schauen wir uns die erste Option (exakte Interpolation mit Polynomen) an, die recht einfach zu realisieren ist. Die Approximation folgt darauf in der Teilaufgabe 1.4.


Zuerst wollen wir nun also ein Polynom finden, das genau durch eine eine Liste von gegebenen Punkten \[({\color{blue}x}_1,{\color{darkred}y}_1),({\color{blue}x}_2,{\color{darkred}y}_2),\dots,({\color{blue}x}_n,{\color{darkred}y}_n)\] verläuft. Für dieses Problem kann man relativ leicht eine direkte Lösung konstruieren.
Schauen wir uns dazu zuerst ein vereinfachtes Problem an: Ein Polynom \[{\color{red}p}({\color{darkblue}x}) = {\color{gray}a}_n{\color{darkblue}x}^n + {\color{gray}a}_{n-1}{\color{darkblue}x}^{n-1} + \dots + {\color{gray}a}_1{\color{darkblue}x} + {\color{gray}a}_0\] vom Grad \(n\) kann bis zu \(n\) verschiedene Nullstellen in \(\mathbb{R}\) besitzen.
Die Konstruktion eines Polynoms mit genau den Nullstellen \({\color{blue}x}_1,{\color{blue}x}_2,\dots,{\color{blue}x}_n\) ist dabei sehr einfach; das Polynom \[{\color{red}p}({\color{darkblue}x}) = \prod_{j=0}^n ({\color{darkblue}x}-{\color{blue}x}_j) = ({\color{darkblue}x} - {\color{blue}x}_1)\cdot({\color{darkblue}x} - {\color{blue}x}_2)\cdot\dots\cdot ({\color{darkblue}x}-{\color{blue}x}_n)\] erfüllt die gewünschte Bedingung. Überzeugen Sie sich selbst davon, dass dies ein Polynom der oben genannten Form ist.


Nun soll das Polynom an den Stellen \({\color{blue}x}_k\) nicht \(0\) betragen, sondern den Wert \({\color{darkred}y}_k\) haben. Die Lösung dazu sind die Lagrange-Polynome: Das Lagrange-Polynom zur Position \({\color{blue}x}_k\) ist definiert als \[{\color{red}\ell}_k({\color{darkblue}x}) = \prod_{\begin{smallmatrix}j=1\\j\neq k\end{smallmatrix}}^n \frac{{\color{darkblue}x}-{\color{blue}x}_j}{{\color{blue}x}_k-{\color{blue}x}_j}=\frac{{\color{darkblue}x}-{\color{blue}x}_1}{{\color{blue}x}_k-{\color{blue}x}_1}\cdots\frac{{\color{darkblue}x}-{\color{blue}x}_{k-1}}{{\color{blue}x}_k-{\color{blue}x}_{k-1}}\cdot\frac{{\color{darkblue}x}-{\color{blue}x}_{k+1}}{{\color{blue}x}_k-{\color{blue}x}_{k+1}}\cdots\frac{{\color{darkblue}x}-{\color{blue}x}_n}{{\color{blue}x}_k-{\color{blue}x}_n}. \]

Das Polynom, das unser Problem damit löst ist dann durch

\[{\color{red}p}({\color{darkblue}x}) = {\color{darkred}y}_1\cdot {\color{red}\ell}_1({\color{darkblue}x}) + {\color{darkred}y}_2\cdot {\color{red}\ell}_2({\color{darkblue}x}) + \dots + {\color{darkred}y}_n\cdot{\color{red}\ell}_n({\color{darkblue}x}) \]

gegeben.

Aufgabe 1.3: (Laufende) Mittelwerte

[15 Punkte]


(a) konstante Approximation

(b) stückweiser Mittelwert

(c) laufender Mittelwert.

Abbildung 3: Verschiedene Approximationsergebnisse, basierend auf (laufenden) Mittelwerten.

Interpolation ist eine interessante Methode, um den Zwischenraum zwischen den Punkten zu füllen. Allerdings hat dieser Ansatz, wie wir gesehen haben, so seine Tücken. Speziell die Polynominterpolation neigt zu „Überschwingung“. Mit anderen Funktionensystemen kann man dieses Problem mindern, aber es bleibt schwierig, die Komplexität des Modells an die Daten anzugleichen.
Daher probieren wir nun etwas (auf den ersten Blick) ganz anderes:


Wir bedienen uns des Mittelwertes \(\frac{1}{n}({\color{darkred}y}_1+{\color{darkred}y}_2+\dots +{\color{darkred}y}_n)\) von einer Reihe von Messwerten. Das liefert natürlich zunächst nur eine Zahl, aber mit ein bisschen Schieben (und später, in Aufgabe 1.5, einem allgemeineren Begriff von „Mittelwert“), bekommt man ein leistungsfähiges Verfahren, um Rauschen aus Daten zu entfernen (und damit brauchbare Vorhersagen zu machen).



Aufgabe 1.4: Regression — linear und polynomiell

[30 Punkte]


(a) lineare Regression

(b) Parabelfit

(c) Fit eines Polynoms vom Grad 10

Abbildung 4: Verschiedene Approximationsergebnisse, basierend auf Least-Squares-Fitting.

Wir haben nun einige Ansätze gesehen:


Mit unserem nächsten Ansatz Schema versuchen wir uns an einer etwas schwierigeren Methode, um ein Modell fitten. Die Rede ist von Regression, dem Finden einer Ausgleichskurve die möglichst nah an sehr vielen Daten liegt. Ist diese Kurve eine Grade, so spricht man von linearer Regression; handelt es sich um ein Polynom, so nennt man das ganze polynomielle Regression (oder auch Polynomregression).


Worum geht es?
In der letzten Aufgabe haben Sie bereits den Mittelwert des ganzen Datensatzes als Linie dargestellt. Mit einem solchen Modell gehen einige Einschränkungen einher. Zum Beispiel liefert es nicht direkt eine Tendenz (Anstieg oder Abstieg) der Werte. Eng damit verbunden ist auch, daß die Form der Kurve sich nicht sehr gut an die Daten anpasst. Wir beheben dies nun in zwei Schritten (der zweite folgt in Aufgabe 1.5).


Als erstes möchten wir nun eine Gerade \(y=mx+b\) finden, die unseren Wetterverlauf möglichst gut approximiert. Im folgenden zeigen wir Ihnen wie die Parameter \(m\) und \(b\) bestimmt werden können.
Wir verwenden die „Methode der kleinsten Quadrate“:
Zuerst definieren wir den qualitativen Fehler, den ein Modell mit festen Parametern hätte. \[\begin{aligned} E({\color{darkblue}b},{\color{darkblue}m}) &= \sum_{i=1}^n \left( ( {\color{darkblue}m}{\color{blue}x}_i + {\color{darkblue}b} ) - {\color{blue}y}_i \right)^2\\ &= \sum_{i=1}^n \left( {\color{darkblue}b}^2 + {\color{blue}y}_i^2 + {\color{darkblue}m}^2{\color{blue}x}_i^2 + 2{\color{darkblue}b}{\color{darkblue}m}{\color{blue}x}_i - 2{\color{darkblue}b}{\color{blue}y}_i - 2{\color{darkblue}m}{\color{blue}x}_i{\color{blue}y}_i \right) \end{aligned} \]


Konkret messen wir hier den Unterschied zwischen dem geschätzten Wert \({\color{darkblue}m}{\color{blue}x}_i+{\color{darkblue}b}\) und dem tatsächlichen Wert \(y_i\) und quadrieren die Ergebnisse jeweils. Die Summe \(E({\color{darkblue}b},{\color{darkblue}m})\) der quadratischen Fehler gibt uns damit ein Maß für den Gesamtfehler zurück.


Wichtig: Bei dieser Regressionsaufgabe sind die Parameter \({\color{darkblue}m}\) und \({\color{darkblue}b}\) nicht fest, sondern die Punktpaare (Messwerte) \(({\color{blue}x}_1,y_1),\dots,({\color{blue}x}_n,y_n)\). Wenn wir diese Messwerte kennen, hängt die Funktion \(E\) nur noch von \({\color{darkblue}b}\) und \({\color{darkblue}m}\) ab; dies sind die Variablen, die wir optimieren wollen (so das der Fehler \(E\) so klein wie irgend möglich wird).


Wie in der Kurvendiskussion üblich, kann man lokale Extremwerte durch die Ableiten und Null setzen einer Funktion bestimmen: \[\left[ f'({\color{blue}x}) = 0 \text{ und } f''({\color{blue}x}) \neq 0 \right] \Rightarrow {\color{blue}x} \text{ ist lokales Extremum} \]
Im Fall von \(E\) können wir sogar davon ausgehen, dass es genau ein globales Minimum gibt, d.h. es reicht aus die Nullstellen der Ableitung zu bestimmen (die Prüfung der zweiten Ableitung können wir ohne Bedenken ignorieren). Wir fassen also \(E\) einmal als Funktion abhängig von \({\color{darkblue}m}\) auf, und einmal als Funktion abhängig von \({\color{darkblue}b}\). Wir leiten \(E\) erst nach \({\color{darkblue}b}\) ab. \[\begin{aligned} 0 = E'({\color{darkblue}b}) &= \sum_{i=1}^n \left( 2{\color{darkblue}b} + 2{\color{darkblue}m}{\color{blue}x}_i - 2{\color{blue}y}_i \right)\\ &= 2{\color{darkblue}b}n + 2\sum_{i=1}^n \left( {\color{darkblue}m}{\color{blue}x}_i - {\color{blue}y}_i \right)\\ \end{aligned} \] also \[\begin{aligned} {\color{darkblue}b} &= \sum_{i=1}^n \frac{1}{n}\left({\color{blue}y}_i - {\color{darkblue}m}{\color{blue}x}_i \right)\\ &= \bar{{\color{blue}y}} - {\color{darkblue}m}\cdot \bar{{\color{blue}x}}, \end{aligned} \] für die Mittelwerte \(\bar{{\color{blue}x}} := \frac{1}{n}\sum_{i=1}^n{\color{blue}x}_i\) und \(\bar{{\color{blue}y}} := \frac{1}{n}\sum_{i=1}^n{\color{blue}y}_i\).


Jetzt leiten wir nach \({\color{darkblue}m}\) ab:
\[\begin{aligned} 0 = E'({\color{darkblue}m}) &= \sum_{j=1}^n \left( 2{\color{darkblue}m}{\color{blue}x}_j^2 + 2{\color{darkblue}b}{\color{blue}x}_j - 2{\color{blue}x}_j{\color{blue}y}_j \right)\\ &= 2{\color{darkblue}m}\sum_{j=1}^n {\color{blue}x}_j^2 + 2{\color{darkblue}b}\sum_{j=1}^n {\color{blue}x}_j - 2\sum_{j=1}^n {\color{blue}x}_j{\color{blue}y}_j\\ &= 2{\color{darkblue}m}\sum_{j=1}^n {\color{blue}x}_j^2 + 2n{\color{darkblue}b}\cdot \bar{\color{blue}x} - 2 \sum_{j=1}^n {\color{blue}x}_j{\color{blue}y}_j \end{aligned} \] Wir bringen \({\color{darkblue}b}\) auf eine Seite der Gleichung setzen Sie mit dem vorherigen Ergebnis gleich.
\[\begin{aligned} \frac{-{\color{darkblue}m}\sum_{j=1}^n {\color{blue}x}_j^2 + \sum_{j=1}^n {\color{blue}x}_j{\color{blue}y}_j}{n\cdot \bar{\color{blue}x}} &= \bar{\color{blue}y} - {\color{darkblue}m}\cdot \bar{{\color{blue}x}} \\ \Leftrightarrow \qquad {\color{darkblue}m}\left(\bar{\color{blue}x} - \frac{\sum_{j=1}^n{\color{blue}x}_j^2}{n\cdot\bar{\color{blue}x}} \right) &= \bar{\color{blue}y} - \frac{\sum_{j=1}^n {\color{blue}x}_j{\color{blue}y}_j}{n\cdot\bar{\color{blue}x}}\\ \Leftrightarrow \qquad {\color{darkblue}m} &= \frac{n\bar{\color{blue}x}\cdot \bar{\color{blue}y} - \sum_{j=1}^n {\color{blue}x}_j{\color{blue}y}_j}{n\bar{\color{blue}x}^2 - \sum_{j=1}^n{\color{blue}x}_j^2}\\ \end{aligned} \]


zu bearbeitenden Aufgaben



Aufgabe 1.5: Moving Least Squares

[15 Punkte]


Abbildung 5: Abbildung 5: Abbildung 5: Abbildung 5:
Moving Least Squares (basierend auf Linearer Regression).


Unsere bisherigen Methoden sind nicht so wirklich zufriedenstellend:


Im letzten Schritt kombinieren wir daher beide Verfahren, um die Stärken beider Verfahren zu vereinen.
Damit erhält man das (berühmte) „Moving-Least-Squares“-(MLS)-Verfahren, welches in der modernen maschinellen Datenanalyse (in den letzten Jahren) sehr populär geworden ist.
Die Vorgehensweise ist prinzipiell genauso wie beim „mitlaufenden“ Mittelwert; allerdings ersetzen wir die Bildung eines einfachen Mittelwertes mit polynomieller Regression:


Implementieren Sie nun die beschriebene Moving-Least-Squares Methode für Polynome mit allgemeinem Grad mithilfe der polyfit-Methode.
(Falls Sie den Teil in der vorherigen Aufgabe nicht lösen konnten: Nutzen Sie statt dessen den linearen bzw. den quadratischen Ansatz).


Analyse: Testen Sie die Methoden mit verschiedenem Polynomgrad und verschiedener Fensterbreite.
Die besten Ergebnisse erhält man, wenn man den Grad des Polynoms nicht zu hoch wählt (max. einstellig).
Was sind Ihre Beobachtungen? Erklären Sie diese!

Aufgabe 2: Cross-Validation

Zuletzt wollen wir bewerten, wie gut das Modell ist, dass wir gefittet haben.
Dazu messen wir, wie genau die Voraussagen des Modells sind. Wichtig hierbei ist, dass man für die Validierung für solche Daten, die wir beim Bauen (z.B. via Regression) des Modells noch nicht verwendet haben). Zuerst müssen wir also den Fehler eines Modells quantifizieren.


Eine Möglichkeiten dafür (von sehr vielen) haben wir bereits (in leicht anderer Form) kennengelernt — die Auswertung des mittleren quadratischen Fehlers: \[ E({\color{darkblue}b},{\color{darkblue}m}) = \frac{1}{n}\sum_{i=1}^n \left( ( \mathcal{M}({\color{darkblue}x}_i) ) - {\color{darkblue}y}_i \right)^2. \] Was wir hier hinzugefügt haben, ist die Mittelwertbildung (Division durch die Anzahl von Punkten, an denen validiert wird); dies macht das Maß unabhängig von der Menge an Validierungsdaten.


Hierbei bezeichne \(\mathcal{M}\) unser bestimmtes Modell und \(\mathcal{M}({\color{darkblue}x}_i)\) den Funktionswert an der Stelle \({\color{darkblue}x}_i\).
Nun möchten wir jedoch das Modell nicht an den Stützstellen auf die Qualität Prüfen an denen wir das Modell gefittet haben. Die Qualität eines Modells zeichnet sich dadurch aus, wie gut es auf Fälle verallgemeinert, die bei der Erstellung des Modells noch nicht in betrachtet wurden. In der Formel oben sind die Indizes daher so zu verstehen, daß hier nur „neue“ Daten angeschaut werden (nicht die, die für das ursprüngliche „Fitting“ genutzt wurden). Es gibt zwei Varianten für die Validierung: Grundsätzlich teilen wir den Datensatz in zwei Teile train und test auf. Nun können wir entweder die Genauigkeit beim Interpolieren (kleine Lücken in den Daten) messen, oder die Genauigkeit beim Extrapolieren (große Lücken bzw. Vorhersagen in Zukunft oder ungemessene Vergangenheit).

Im Folgenden können wir eine der beiden Varianten auswählen (Geschmackssache, was interessanter ist).


Aufgaben
[15 Punkte]
Bearbeiten Sie nun folgende Aufgaben!