Welche Gerade passt am besten zu den Punkten?
Eine Ausgleichsgerade ist die Gerade, die am besten zu vielen Messpunkten passt. Sie liegt der linearen Regression zugrunde und sagt, wie stark sich eine Größe ändert, wenn sich eine andere ändert.
Studierende notieren, wie viele Stunden sie pro Woche gelernt haben und wie viele Punkte sie im Test bekamen. Eine Gerade durch diese Punkte beantwortet: Wie viele Punkte bringt eine Stunde mehr?
Am Ende dieser Lektion
Notiz
Ich kann eine Gerade an Punkte anpassen, indem ich den quadratischen Fehler minimiere.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Ausgleichsgerade | die Gerade, die am besten zu den Punkten passt |
| Fehlerquadrat | der Abstand zwischen Punkt und Gerade, mit sich selbst malgenommen |
| Mittlerer quadratischer Fehler | der Mittelwert aller Fehlerquadrate |
| Methode der kleinsten Quadrate | die Gerade wählen, deren Fehler am kleinsten ist |
| Achsenabschnitt | der Wert der Geraden bei x gleich 0 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Der Fehler misst, wie schlecht eine Gerade passt
Eine Gerade hat die Form y = a * x + b. a ist die Steigung, b der Achsenabschnitt. Für jeden Punkt ist der Fehler der Unterschied zwischen Vorhersage und echtem Wert.
Sie quadrieren jeden Fehler, damit sich Fehler nach oben und unten nicht aufheben. Der Mittelwert dieser Fehlerquadrate heißt mittlerer quadratischer Fehler.
Beispiel: zwei Geraden an fünf Punkten
| x | y echt | Vorhersage 2 * x + 1 | Fehlerquadrat | Vorhersage 1,7 * x + 1 | Fehlerquadrat |
|---|---|---|---|---|---|
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 3 | 3 | 0 | 2,7 | 0,09 |
| 2 | 4 | 5 | 1 | 4,4 | 0,16 |
| 3 | 6 | 7 | 1 | 6,1 | 0,01 |
| 4 | 8 | 9 | 1 | 7,8 | 0,04 |
| Mittel | 0,6 | 0,06 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Den Fehler in Python berechnen
xs = [0, 1, 2, 3, 4]
ys = [1, 3, 4, 6, 8]
def fehler_der_geraden(a, b):
summe = 0
for i in range(len(xs)):
fehler = a * xs[i] + b - ys[i]
summe = summe + fehler ** 2
return summe / len(xs)
print("Schätzung 2 und 1:", round(fehler_der_geraden(2, 1), 3))
print("Schätzung 1.7 und 1:", round(fehler_der_geraden(1.7, 1), 3))
# Probieren Sie 1.8 und 0.8. Wird der Fehler größer oder kleiner?
Den Fehler senken Sie mit dem Gradientenabstieg
Der Fehler hängt von zwei Zahlen ab, a und b. Das ist eine Funktion mit zwei Eingaben, und Sie kennen ihr Werkzeug: den Gradienten.
Die Steigung nach a ist der Mittelwert von 2 * Fehler * x, die nach b der Mittelwert von 2 * Fehler. Sie starten bei a = 0 und b = 0 und gehen immer wieder einen Schritt gegen den Gradienten.
Eine Gerade durch Abstieg finden
xs = [0, 1, 2, 3, 4]
ys = [1, 3, 4, 6, 8]
a = 0.0
b = 0.0
lernrate = 0.05
for schritt in range(1000):
steigung_a = 0
steigung_b = 0
for i in range(len(xs)):
fehler = a * xs[i] + b - ys[i]
steigung_a = steigung_a + 2 * fehler * xs[i] / len(xs)
steigung_b = steigung_b + 2 * fehler / len(xs)
a = a - lernrate * steigung_a
b = b - lernrate * steigung_b
print("a:", round(a, 3), "b:", round(b, 3))
# Ändern Sie 1000 in 20. Wie weit sind Sie dann vom Ergebnis entfernt?
Dieselbe Gerade mit dem Optimierer von SciPy
docker exec jupyter python3 -c "import numpy as np; from scipy.optimize import minimize; x = np.array([0, 1, 2, 3, 4]); y = np.array([1, 3, 4, 6, 8]); r = minimize(lambda p: np.mean((p[0] * x + p[1] - y) ** 2), [0.0, 0.0]); print(r.x.round(2))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Gerade hat auch eine exakte Lösung
Bei einer Geraden müssen Sie nicht schrittweise suchen. Für die beste Steigung bilden Sie für jeden Punkt das Produkt der Abstände von x und y zu ihren Mittelwerten. Diese Produkte addieren Sie und teilen durch die Summe der quadrierten x-Abstände.
Den Achsenabschnitt erhalten Sie danach, weil die Gerade durch die beiden Mittelwerte geht. Die Tabelle rechnet das für die fünf Punkte.
Beispiel: die exakte Gerade für die fünf Punkte
| x | y | Abstand x zu 2 | Abstand y zu 4,4 | Produkt | x-Abstand zum Quadrat |
|---|---|---|---|---|---|
| 0 | 1 | -2 | -3,4 | 6,8 | 4 |
| 1 | 3 | -1 | -1,4 | 1,4 | 1 |
| 2 | 4 | 0 | -0,4 | 0 | 0 |
| 3 | 6 | 1 | 1,6 | 1,6 | 1 |
| 4 | 8 | 2 | 3,6 | 7,2 | 4 |
| Summe | 17 | 10 | |||
| Ergebnis | Steigung 17 geteilt durch 10 = 1,7 | Achsenabschnitt 4,4 minus 1,7 mal 2 = 1,0 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die exakte Lösung mit NumPy
docker exec jupyter python3 -c "import numpy as np; x = np.array([0, 1, 2, 3, 4]); y = np.array([1, 3, 4, 6, 8]); print(np.polyfit(x, y, 1).round(2))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Dieselbe Rechnung für ein Jahr Fahrradausleihen
docker exec jupyter python3 -c "import numpy as np, pandas as pd; d = pd.read_csv('hires.csv'); print(np.polyfit(d['temp_c'], d['hires'], 1).round(1))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele denken, die Ausgleichsgerade gehe durch möglichst viele Punkte oder sogar durch alle. Sie senkt aber die Summe der Fehlerquadrate. Dabei darf sie jeden Punkt knapp verfehlen. Im Beispiel trifft sie nur den Punkt bei x gleich 0 exakt.