Zum Inhalt

Lineare Regression

Die lineare Regression zählt zu den grundlegendsten und am häufigsten verwendeten Verfahren des überwachten Lernens. Sie bildet das Fundament für zahlreiche weiterführende Techniken, wie zum Beispiel Neuronale Netze. Im Kern modelliert sie den Zusammenhang zwischen einer oder mehreren Merkmalen (\(x_i\)) und einer kontinuierlichen Zielgröße (\(y\)). Dabei kann das Modell sowohl in skalarer als auch in Matrix-Notation formuliert werden. Für die Schätzung der Parameter (Koeffizienten \(\beta\)) haben sich insbesondere zwei Ansätze etabliert: die direkte Methode mittels Normalengleichung und die iterative Methode per Gradient Descent.


Notation

\[ \mathbf{y} = \mathbf{X} \beta + \epsilon \]
  • \(\mathbf{y}\): \(m \times 1\)-Vektor der Zielwerte
  • \(\mathbf{X}\): \(m \times (n+1)\)-Designmatrix mit \(m\) Stichproben und \(n\) Merkmalen.
    Die erste Spalte enthält meist Einsen für den Intercept (\(\beta_0\)).
  • \(\beta\): \((n+1) \times 1\)-Vektor der Regressionskoeffizienten
  • \(\epsilon\): \(m \times 1\)-Vektor der Fehler (Residuen)
\[ y = \beta_0 + \beta_1 \cdot x_1 + \dots + \beta_n \cdot x_n + \epsilon \]

\(\beta_0\): Der Intercept (Achsenabschnitt), der den Ausgangswert von \(y\) repräsentiert, wenn alle \(x_i = 0\) sind.

\(\beta_1, \beta_2, \dots, \beta_n\): Die Koeffizienten, die den Einfluss der jeweiligen unabhängigen Variablen \(x_1, x_2, \dots, x_n\) auf \(y\) messen.

\(\epsilon\): Der Fehlerterm (Residuum).

Hinweis: \(n\) bezeichnet die Anzahl der Merkmale, nicht die Anzahl der Stichproben.


Direkte Methode

Die direkte Methode löst die Koeffizientenbestimmung in einem Schritt durch die Normalengleichung:

\[ \hat{\beta} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y} \]

Vorgehensweise

  1. Designmatrix erstellen: Bilde \(\mathbf{X}\) aus allen Beobachtungen und Merkmalen.
  2. Matrixprodukte berechnen: Bestimme \(\mathbf{X}^T \mathbf{X}\) und \(\mathbf{X}^T \mathbf{y}\).
  3. Matrixinversion: Invertiere \((\mathbf{X}^T \mathbf{X})\), sofern sie nicht singulär ist.
  4. Koeffizienten ermitteln: Multipliziere \((\mathbf{X}^T \mathbf{X})^{-1}\) mit \(\mathbf{X}^T \mathbf{y}\), um \(\hat{\beta}\) zu erhalten.
  • Direkte Berechnung ohne zusätzliche Hyperparameter.
  • Analytische Lösung, die in einem Schritt vorliegt.
  • Aufwendig bei sehr großen Datensätzen.
  • Empfindlich gegenüber Multikollinearität.
  • Nicht anwendbar, wenn \(\mathbf{X}^T \mathbf{X}\) nicht invertierbar ist.

Hinweis zur Berechnungskomplexität

Warum ist die direkte Methode besonders aufwendig?

Mehr dazu: Optimierung von Algorithmen durch Verständnis der Berechnungskomplexität

Dort ist eine detaillierte Analyse, warum das Invertieren von Matrizen eine kubische Komplexität \(O(p^3)\) haben kann.

# Erweiterung der Feature-Matrix um den Bias-Term (Spalte mit Einsen)
X_b = np.c_[np.ones((m, 1)), X]

# Berechnung der Regressionskoeffizienten
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
print("Direkte Methode (Normalengleichung):")
print("Intercept:", theta_best[0][0])
print("Steigung:", theta_best[1][0])
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)
m = 100  # Anzahl der Stichproben
X = 2 * np.random.rand(m, 1)  # Ein Merkmal
y = 4 + 3 * X + np.random.randn(m, 1)  # Lineare Beziehung plus Rauschen
plt.scatter(X, y, color='blue', label='Daten')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Generierte Daten für lineare Regression')
plt.legend()
plt.show()

Iterative Methode

Diese Methode nähert die Lösung schrittweise (Gradient Descent) an, indem sie der Richtung des steilsten Abstiegs der Kostenfunktion folgt (z. B. des mittleren quadratischen Fehlers, MSE).

Kostenfunktion (Beispiel: MSE)

\[ J(\beta) = \frac{1}{m} \sum_{i=1}^{m} \bigl(y_i - \hat{y}_i\bigr)^2 = \frac{1}{m} (\mathbf{X}\beta - \mathbf{y})^T (\mathbf{X}\beta - \mathbf{y}). \]

Hinweis: Oft wird der MSE mit \(\tfrac{1}{2m}\) statt \(\tfrac{1}{m}\) gewichtet, was den Faktor 2 im Gradienten wegfallen lässt.

Vorgehensweise

1. Initialisierung

Wähle einen Startwert \(\beta^{(0)}\) (z. B. den Nullvektor).

2. Gradient berechnen

Für MSE mit \(\tfrac{1}{m}\) ergibt sich:

\[ \nabla J(\beta) = \frac{2}{m} \,\mathbf{X}^T \bigl(\mathbf{X}\beta - \mathbf{y}\bigr). \]

Mit \(\tfrac{1}{2m}\) würde der Faktor 2 wegfallen:

\[ \nabla J(\beta) = \frac{1}{m} \,\mathbf{X}^T \bigl(\mathbf{X}\beta - \mathbf{y}\bigr). \]

3. Update-Regel

Aktualisiere die Koeffizienten über eine Lernrate \(\alpha\):

\[ \beta^{(k+1)} = \beta^{(k)} - \alpha \,\nabla J\bigl(\beta^{(k)}\bigr). \]

4. Iteration

Wiederhole das Update, bis die Änderung von \(\beta\) klein wird oder eine definierte Anzahl an Iterationen erreicht ist.

  • Keine Matrixinversion erforderlich, daher sehr gut für große Datensätze.
  • Flexibel erweiterbar (z. B. durch Regularisierung).
  • Wahl der Lernrate \(\alpha\) ist kritisch (Konvergenz vs. Laufzeit).
  • Häufig viele Iterationen nötig.

eta = 0.1         # Lernrate
n_iterations = 1000
theta = np.random.randn(2, 1)  # zufällige Initialisierung

for iteration in range(n_iterations):
    gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)
    theta = theta - eta * gradients

print("\nIterative Methode (Gradient Descent):")
print("Intercept:", theta[0][0])
print("Steigung:", theta[1][0])
from sklearn.linear_model import LinearRegression

lin_reg = LinearRegression()
lin_reg.fit(X, y)
print("\nscikit-learn Lösung:")
print("Intercept:", lin_reg.intercept_[0])
print("Steigung:", lin_reg.coef_[0][0])

Annahmen und Voraussetzungen

Für die klassische lineare Regression gelten einige grundlegende Annahmen, die in der Praxis oft nur näherungsweise erfüllt sind:

  1. Linearität: Die Beziehung zwischen den unabhängigen Variablen und der Zielgröße ist linear.
  2. Homoskedastizität: Die Varianz der Residuen (Fehler) bleibt für alle Ausprägungen von \(x\) konstant.
  3. Normalverteilung der Fehler: Die Fehler sind normalverteilt (wichtig für statistische Tests und Konfidenzintervalle).
  4. Unabhängigkeit der Fehler: Keine Autokorrelation der Residuen.

Wenn diese Voraussetzungen verletzt sind, kann das Modell unzuverlässig werden oder die Interpretation der Koeffizienten wird schwieriger.


Regularisierung

Bei schlecht konditionierten Matrizen \(\mathbf{X}^T \mathbf{X}\) oder sehr vielen Merkmalen kann die Normalengleichung numerisch instabil werden. Hier setzen Regularisierungsverfahren wie Ridge (L2-Regularisierung) oder Lasso (L1-Regularisierung) an:

  • Ridge Regression ergänzt \(\mathbf{X}^T \mathbf{X}\) um \(\lambda \mathbf{I}\), was die Invertierbarkeit fördert.
  • Lasso Regression fügt einen L1-Term hinzu, der einzelne Merkmale stark abwerten kann und somit eine Feature-Selektion ermöglicht.

Zusammenfassung

Lineare Regression

Grundlegender Algorithmus für das überwachte Lernen und Basis vieler weiterführender Modelle.

Skalare Notation

\[ y = \beta_0 + \beta_1 x_1 + \dots + \beta_n x_n + \epsilon \]

Matrix-Notation

\[ \mathbf{y} = \mathbf{X} \beta + \epsilon \quad\text{mit}\quad \mathbf{X}: m \times (n+1) \]

Direkte Methode (Normalengleichung)

\[ \hat{\beta} = (\mathbf{X}^T \mathbf{X})^{-1}\,\mathbf{X}^T \mathbf{y} \]

Iterative Methode (Gradient Descent)

\[ \beta^{(k+1)} = \beta^{(k)} - \alpha \,\nabla J(\beta^{(k)}) \]

Wichtige Voraussetzungen

Linearität, Homoskedastizität, Normalverteilung und Unabhängigkeit der Fehler.

Regularisierung

Verfahren wie Ridge oder Lasso bei schwer invertierbaren Matrizen oder vielen Merkmalen.


Diese Notationen, Methoden und Erweiterungen (Regularisierung) bieten unterschiedliche Wege, das Regressionsproblem zu lösen. Die direkte Methode ermöglicht eine analytische Lösung, während sich die iterative Methode vor allem für große oder schlecht konditionierte Datensätze eignet.