4.3 Multiple lineare Regression & Normalengleichung
Mehrere Eingabegrößen
Meist hängt die Zielgröße von mehreren Merkmalen ab. Beispiel auf 📄 04_linear_methods_ws26.pdf, Folie 16: Der Advertising-Datensatz mit 200 Zeilen, Werbeausgaben für TV, Radio und Zeitung (Newspaper) sowie die erzielten Verkäufe (Sales). Das Modell:
Das ist multiple (auch multivariate) lineare Regression (multiple linear regression).
Matrixschreibweise und Designmatrix
📄 04_linear_methods_ws26.pdf, Folie 17 Man schreibt die Daten in eine Matrix, eine Zeile pro Beobachtung, eine Spalte pro Merkmal, und ergänzt vorne eine Spalte aus Einsen (Intercept). Diese Matrix heißt Designmatrix (design matrix) :
Kompakt: . Eine einzige Matrix-Vektor-Multiplikation liefert alle 200 Vorhersagen.
Warum die Einserspalte? Für Zeile ergibt die Multiplikation , der Achsenabschnitt wird also automatisch addiert. So muss man nicht gesondert behandeln.
Das Modell allgemein
📄 04_linear_methods_ws26.pdf, Folie 18 Mit Merkmalen:
- Als neuronales Netz: ein Neuron mit Eingängen , Gewichten und Summe , keine Aktivierung.
- Geometrisch: Bei einem Merkmal ist eine Gerade, bei zwei Merkmalen eine Ebene im 3D-Raum, bei Merkmalen eine Hyperebene im -dimensionalen Raum. Die Residuen sind die senkrechten (in -Richtung gemessenen) Abstände der Punkte zur Ebene.
Notation
Die Literatur ist hier uneinheitlich 📄 04_linear_methods_ws26.pdf, Folie 19:
- heißt oft (Bias).
- Oft steckt der Bias mit im Gewichtsvektor, , und bekommt eine führende 1 („erweiterte Datenmatrix“). Dann gilt einfach .
- In der Statistikliteratur (Tibshirani u. a.) heißt der Gewichtsvektor .
- Häufig werden die Vektorpfeile/Fettdruck weggelassen.
Einsteinsche Summenkonvention
Eine Kurzschrift, die auf den nächsten Folien verwendet wird: Über doppelt auftretende Indizes wird summiert, das Summenzeichen lässt man weg.
In NumPy entspricht das np.einsum('ij,j->i', X, w), also schlicht X @ w.
Laut Feedback-Folie 36 ist die Summenkonvention „nicht soo wichtig“. Wichtig ist nur, die Herleitung unten nachvollziehen zu können. Im Folgenden werden die Summen deshalb ausgeschrieben.
Herleitung der Normalengleichung
📄 04_linear_methods_ws26.pdf, Folie 20 und 📄 04_linear_methods_ws26.pdf, Folie 21 leiten die geschlossene Lösung in vier Schritten her.
Schritt 1: Verlustfunktion
Summe der quadrierten Fehler (der Faktor ändert die Lage des Minimums nicht und wird weggelassen):
Schritt 2: Ableiten nach einem Gewicht
Kettenregel: äußere Ableitung von ist , dann mal innere Ableitung.
Die innere Ableitung: In hängt nur ein Summand von ab, nämlich . Alle anderen fallen weg, auch:
( ist das Kronecker-Delta: 1 für , sonst 0. Die Folie schreibt unter die Klammer.) Also:
Ergänzung: In Matrixform ist das die -te Komponente von
Das ist auch der Gradient, den man für Gradientenabstieg braucht. Intuition: ist der Vektor der Residuen, gewichtet jedes Residuum mit dem zugehörigen Merkmalswert.
Die Folie bemerkt, dass die direkte Vektorschreibweise „scary and error-prone“ ist. Deshalb die Herleitung über Indizes.
Schritt 3: Gradient gleich null setzen
Links steht , denn . Rechts steht . Für alle gleichzeitig:
Das ist die Normalengleichung (normal equation), ein lineares Gleichungssystem mit so vielen Gleichungen wie Gewichten.
Schritt 4: Auflösen
Falls invertierbar ist:
Ergänzung, nicht auf den Folien: Umgestellt lautet sie . Der Residuenvektor steht also senkrecht (normal) auf allen Spalten von . Geometrisch ist die Orthogonalprojektion von auf den Raum, den die Spalten von aufspannen. Der kürzeste Abstand zu einem Unterraum ist immer der senkrechte.
Durchgerechnetes Beispiel
Ergänzung, nicht auf den Folien: Die drei Punkte , , aus 4.1:
( enthält , und ; enthält und .) Mit :
Also und , wie in 4.1 und mit Gradientenabstieg in 4.2.
Wann ist nicht invertierbar?
Ergänzung, nicht auf den Folien (wichtig zum Verständnis von Ridge in 4.4):
- Mehr Parameter als Datenpunkte (): ist , hat aber höchstens Rang . Es gibt dann unendlich viele Lösungen, die die Daten perfekt treffen.
- Linear abhängige Spalten (perfekte Kollinearität), z. B. ein Merkmal doppelt, einmal in Metern und einmal in Zentimetern.
- Fast abhängige Spalten machen schlecht konditioniert: Kleine Änderungen in den Daten verändern stark.
In Python
Die Folien verweisen auf das Notebook linear_methods/LinearRegression.ipynb 📄 04_linear_methods_ws26.pdf, Folie 23.
Ergänzung: Typische Varianten:
import numpy as np
from sklearn.linear_model import LinearRegression
X1 = np.column_stack([np.ones(len(X)), X]) # Einserspalte anhängen
w = np.linalg.inv(X1.T @ X1) @ X1.T @ y # wörtlich die Formel
w = np.linalg.solve(X1.T @ X1, X1.T @ y) # besser: LGS lösen
w, *_ = np.linalg.lstsq(X1, y, rcond=None) # am stabilsten
model = LinearRegression().fit(X, y) # fügt den Intercept selbst hinzu
model.intercept_, model.coef_
Die Formel ist zum Herleiten gedacht. Numerisch ist es besser, das Gleichungssystem zu lösen (solve) oder direkt ein Kleinste-Quadrate-Verfahren (lstsq, QR-Zerlegung) zu verwenden, weil das Bilden von die Kondition quadriert. Und bei LinearRegression aus scikit-learn keine eigene Einserspalte anhängen, der Intercept wird automatisch geschätzt.