"Der Einfachheit halber sei $k=1$, d.h. $X_i$ eine univariate Variable.\n",
"Wenn wir für $f$ die Klasse der konstanten Funktionen wählen, dann ist $f(X_i,\\beta) = \\beta_1$\n",
"und wir suchen das $\\beta_1$, sodass $Y_i = \\beta_1 + \\epsilon_i$, also ein $\\beta_1$, welches für alle Werte $y_i$ den Abstand $d(\\beta_1, y_i) = y_i - \\beta_1$ minimiert.\n",
"Das ist der Fall für $\\texttt{mse}(y,\\beta_1) = \\sum_{i=1}^n (y_i - \\beta_1)^2$ minimal, d.h. $\\beta_1 = \\texttt{mean}(y)$.\n",
"Das ist der Fall für $\\texttt{mse}(y,\\beta_1) = \\frac{1}{n} \\sum_{i=1}^n (y_i - \\beta_1)^2$ minimal, d.h. $\\beta_1 = \\texttt{mean}(y)$.\n",
Wenn man einen Datensatz hinreichend aufbereitet hat (fehlende Daten ersetzt, geeignet reskaliert, neue Features definiert), kann man sich an eine Regressionsanalyse wagen. Bei einer Regression geht es darum, den Zusammenhang zwischen zwei Variablen zu beschreiben. Dabei soll eine Variable als abhängig von der anderen beschrieben werden, explizit durch die Angabe eines funktionalen Zusammenhangs, d.h. einer mathematischen Abbildung, die aus den Werten der einen Variable die Werte der anderen berechnet - näherungsweise.
Ein **Regressionsmodell** besteht aus:
* **Regressoren** $x_i$, das ist eine ($k$-variate) 'unabhängige' Variable, die *Einflussgröße*
* **Regressand** $y_i$, das ist eine (univariate) 'abhängige' Variable, die *Zielgröße*
* **Parametern** $\beta_1,\dots,\beta_k$
* **Störgrößen** $\epsilon_i$
* $Y_i = f(X_i, \beta) + \epsilon_i$
Für konkrete Daten $(x_i,y_i)$ nennt man $y_i - f(x_i, \beta)$ für ein gegebenes Regressionsmodell auch **das $i$-te Residuum**.
Eine Regressionsanalyse besteht darin, ein Regressionsmodell aufzustellen und dann die Funktion $f$ zu schätzen, die am besten zu den Daten passt, d.h. die kleinsten Residuen hat.
Bestimmte Regressionsverfahren unterscheiden sich in der Art der zulässigen Funktion $f$.
Bei der linearen Regression ist $f$ eine Funktion, die in den Parametern $\beta$ linear ist.
Der Einfachheit halber sei $k=1$, d.h. $X_i$ eine univariate Variable.
Wenn wir für $f$ die Klasse der konstanten Funktionen wählen, dann ist $f(X_i,\beta) = \beta_1$
und wir suchen das $\beta_1$, sodass $Y_i = \beta_1 + \epsilon_i$, also ein $\beta_1$, welches für alle Werte $y_i$ den Abstand $d(\beta_1, y_i) = y_i - \beta_1$ minimiert.
Das ist der Fall für $\texttt{mse}(y,\beta_1) = \sum_{i=1}^n (y_i - \beta_1)^2$ minimal, d.h. $\beta_1 = \texttt{mean}(y)$.
Das ist der Fall für $\texttt{mse}(y,\beta_1) = \frac{1}{n} \sum_{i=1}^n (y_i - \beta_1)^2$ minimal, d.h. $\beta_1 = \texttt{mean}(y)$.
```
```{admonition} Beispiel
Man kann k-Means als Regressionsverfahren sehen: die Parameter $\beta$ beschreiben die Orte der Zentroide und die Funktion $f$ ist die Auswahl einer Klasse in Abhängigkeit vom nächstgelegenen Zentroid. Das konkrete k-Means-Verfahren ist die Suche nach einer Näherung für optimale Parameter $\beta$.
Bei k-Means werden die Störgrößen normalverteilt ohne Korrelation angenommen.
```
```{admonition} Beispiel
Jedes Klassifikationsverfahren ist eine Regression, wobei die abhängige Variable die Klasse ist, die Regressoren alle Daten, die zur Klassifikation verwendet werden.
Wenn man in einem Regressionsmodell die **Residuenquadratsumme** $\sum_{i=1}^N {\left(Y_i - f(X_i,\beta)\right)}^2$ minimiert, spricht man von einem Schätzwert für $\beta$, der als **kleinste-Quadrate-Schätzer** bekannt ist.
```
Der kleinste-Quadrate-Schätzer ist ein Maximum-Likelihood-Schätzer.
```{admonition} Beispiel
Wenn wir zu Punkten $(x_i,y_i)$ in der Ebene eine Gerade berechnen,
die den gemeinsamen Abstand zu allen Punkten minimiert (eine sogenannte Ausgleichsgerade),
so ist dies genau eine Regression mit $f(x, \beta) = \beta_0 + \beta_1 x$.
Die Regressionsgleichung $Y_i = f(X_i, \beta)$ wird zur Geradengleichung
$y_i = \beta_0 + \beta_1 x_i$
wobei $\beta_0$ der y-Achsenabschnitt (bei $x_i=0$) und $\beta_1$ die Steigung der Geraden ist.
Die kleinste-Quadrate-Methode ist nun, $\beta_0$ und $\beta_1$ so zu schätzen,
dass $\sum_{i=1}^N {\left(y_i - \beta_1x_i - \beta_0 \right)}^2$ minimiert wird.
Wenn $\beta_0=0$ ist haben wir ein lösbares Minimierungsproblem.
Wir leiten nach $\beta_1$ ab und suchen Nullstellen:
Um also zunächst $\beta_1$ im Allgemeinen zu bestimmen, verschiebt man die Daten um die Mittelwerte, also ersetzt $x_i$ durch $x_i' = x_i - \texttt{mean}(x)$ und $y_i$ durch $y_i' = y_i - \texttt{mean}(y)$. Damit erhält man die Formel
Bitte beachten Sie, dass dies nicht die Richtung maximaler Varianz ist - dabei werden zwar auch Abstände minimiert, aber eben die Abstände der Datenpunkte $(x,y)$ zur Geraden. Bei der linearen Regression werden nicht Abstände der Datenpunkte zur Geraden minimiert, sondern die Residuen, das sind die Abstände entlang der $y$-Achse. Im Plot oben ist das sichtbar: die grünen Striche sind parallel zur $y$-Achse, nicht senkrecht auf der Geraden (was dem Abstand zur Geraden entsprechen würde).
Damit ist auch klar, dass die Regression ein assymmetrisches Verfahren ist, in dem Sinne dass Regressor und Regressand nicht vertauscht werden können, ohne das Modell zu ändern. Bei der Suche nach einer Gerade entlang maximaler Varianz sind $x$- und $y$-Koordinaten gleichberechtigt und die Lösung invariant unter Drehungen.
Eine Regression der Form $Y_i = f(X_i, w) + \epsilon_i$ mit $f(x, w) = w^T x$ heißt **lineare Regression**.
```
Dabei ist es üblich, stillschweigend den Vektor $x$ durch $(1,x)$ zu ersetzen, damit z.B. für $x = (a,b)$ gilt: $f(x,w)= w^T x = (w_0,w_1,w_2)\cdot(1,a,b) = w_0 + w_1 a + w_2 b$. Der $w_0$-Term (zuvor $\beta_0$ bezeichnet) heißt auch **Bias-Term**.
Scipy hat für uns gleich einen Test durchgeführt, nämlich einen beidseitigen Test mit der Nullhypothese, dass die Steigung `slope` gleich $0$ ist. Da der $p$-Wert deutlich kleiner als $\alpha = 0.05$ ist, verwerfen wir die Hypothese und gehen von einer Steigung $\neq 0$ aus. (Das benutzen wir jetzt einfach, ohne uns eingehender mit statistischen Tests auseinander zu setzen - oder wir ignorieren diesen Teil der Ausgabe von Scipy.stats).
Wenn eine Regressorvariable die Form $\phi(X_i)$ hat, für $\phi$ eine beliebige Funktion mit passendem Definitionsbereich, dann nennt man dies immer noch eine **lineare Regression mit Regressor $X_i$ und Basisfunktionserweiterung**.
```
Damit ist bei einer linearen Regression also nur eins linear: die Funktion $f$ in den Variablen $w$. So können wir das zuvor stillschweigende Ersetzen von $x$ durch $(1,x)$ auch als Basisfunktionserweiterung auffassen, mit $\phi(x) = (1,x)$.
Da die lineare Regressionsanalyse sehr einfach durchzuführen ist, wird die zentrale Frage bei der linearen Regression die Aufstellung des Modells, insbesondere der Basisfunktion anhand von Daten.
Man nennt den Fall $w = (w_0, w_1)$ eine **einfache lineare Regression** und den allgemeineren Fall dann eine **multilineare Regression**, weil dabei dann eine multivariate unabhängige Variable $X$ als Regressor verwendet wird. Die lineare Regression von Scipy.stats kann nur eine einfache lineare Regression!
Darum betrachten wir nun die multilineare Regression mit Scikit-learn:
> From the implementation point of view, this is just plain Ordinary Least Squares (scipy.linalg.lstsq) or Non Negative Least Squares (scipy.optimize.nnls) wrapped as a predictor object.
So gesehen ist Scikit-learn nicht 'besser' als Scipy, sondern einfach ein Layer oben drauf.
Ein Problem bei der Wahl einer Basisfunktion für ein Regressionsmodell ist das Overfitten. Wenn zu viele Parameter verfügbar sind, lassen sich die Daten zwar sehr gut fitten, aber das Modell verallgemeinert nicht gut. Konkret prüfen lässt sich das durch einen Fit auf einen Trainingsdatensatz, der dann auf einem Testdatensatz evaluiert wird.
```{admonition} Beispiel
Wir betrachten das Overfitten in Abhängigkeit vom Parameter $d$ der polynomialen Regression, auf dem gleichen Datensatz wie zuvor im Beispiel mit einer Regressionsgeraden (der Fall $d=1$).
Wir betrachten den [Melbourne Housing Market Datensatz von Anthony Pino](https://www.kaggle.com/datasets/anthonypino/melbourne-housing-market), CC BY-NC-SA 4.0.
Wenn ein Haus ein Jahr älter ist als ein anderes, ist der assoziierte Preisunterschied $5650$ (australische) Dollar. Wenn ein Haus einen Kilometer näher am Zentrum (das in Melbourne *CBD* heißt) liegt, also eine um $1$ kleinere Distance-Variable hat, ist der assoziierte Preisunterschied $27903$ Dollar.
Wir schauen uns noch Plots zur linearen Regression in den Variablen Distanz und Alter an:
Der Trick der Regularisierung besteht nun darin, nicht *zu* gut auf die Trainingsdaten zu fitten.
Die **L2-Regularisierung**, auch als **Ridge-Regression** bekannt, besteht darin, als zusätzliches Optimierungsziel bei der Suche nach einem besten Fit für das Regressionsproblem einen Strafterm $P = \alpha \sum_{i=1}^n \beta_i^2$ zu minimieren.
Dabei ist $\alpha$ ein freier Parameter, der die Stärke der Strafe einstellt.
Der Name L2 kommt daher, dass $P$ das Quadrat der L2-Norm ist.
Es gibt auch die **L1-Regularisierung** bei der man statt $\beta_i^2$ den Summanden $|\beta_i|$ verwendet, das entspricht der L1-Norm. Man spricht auch von **Lasso-Regularisierung**.
