Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Eine Gerade an Daten anpassen (lineare Regression)

Nach dieser Lektion: Ich kann eine Gerade an Daten anpassen und sagen, wie gut sie ist.

Lektion, 55 Min.3 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Wie viele Räder für einen warmen Tag?

Für morgen sind 20 Grad angesagt. Der Verleih muss heute Abend entscheiden, wie viele Räder er aus dem Lager holt.

Ein Jahr Daten zeigt: Warme Tage sind voller. Eine Gerade durch diese Tage macht aus „voller“ eine Zahl zum Planen. Und sie sagt, wie weit man ihr trauen kann.

Am Ende dieser Lektion

Notiz

Ich kann eine Gerade an Daten anpassen und sagen, wie gut sie ist.

Schlüsselwörter

BegriffWas er bedeutet
Lineare Regressioneine Regel als Gerade von einem Wert zu einem anderen
Steigungwie stark sich das Ergebnis ändert, wenn die Eingabe um 1 steigt
Achsenabschnittdas Ergebnis, wenn die Eingabe 0 ist
Residuumder wahre Wert minus der vorhergesagte
Kleinste Quadratedie Gerade mit der kleinsten Summe quadrierter Residuen
R squaredder Anteil der Schwankung, den die Gerade erklärt, von 0 bis 1
Testmengezurückgehaltene Zeilen, um ein Modell zu prüfen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Gerade ist Steigung und Achsenabschnitt

Eine Gerade lautet ausleihen = achsenabschnitt + steigung * temperatur. Die Steigung sagt, wie viele Ausleihen jedes Grad mehr bringt. Der Achsenabschnitt ist die Schätzung der Geraden bei 0 Grad.

LinearRegression aus scikit-learn findet beide aus den Daten. line.py passt die Ausleihen allein an die Temperatur an, über alle 365 Tage.

Ausleihen gegen Temperatur anpassen

Befehl
docker exec jupyter python3 steps/line.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die kleinsten Quadrate wählen die Gerade

Jeder Tag liegt etwas über oder unter der Geraden. Dieser Abstand ist das Residuum. Quadrieren Sie jedes Residuum, damit ein Abstand nach unten so viel zählt wie einer nach oben. Dann addieren Sie.

Die kleinsten Quadrate liefern die Gerade mit der kleinsten Summe. Zwei kurze Summen genügen: die Steigung aus dem gemeinsamen Schwanken von x und y, dann der Achsenabschnitt aus den Mittelwerten.

Beispiel: drei Tage und ihre Residuen

TemperaturAusleihenGerade 152,5 + 11,25 xResiduumQuadrat
2180175525
6210220-10100
10270265525
Summe0150

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die beiden Summen von Hand

Code: python
# Kleinste Quadrate von Hand, für drei Tage.
temperaturen = [2, 6, 10]
ausleihen = [180, 210, 270]
mittel_x = sum(temperaturen) / len(temperaturen)
mittel_y = sum(ausleihen) / len(ausleihen)
oben = 0
unten = 0
for n in range(len(temperaturen)):
    oben = oben + (temperaturen[n] - mittel_x) * (ausleihen[n] - mittel_y)
    unten = unten + (temperaturen[n] - mittel_x) ** 2
steigung = oben / unten
achsenabschnitt = mittel_y - steigung * mittel_x
print("Steigung:", steigung, "Achsenabschnitt:", achsenabschnitt)
# Ersetzen Sie 270 durch 240 und starten Sie erneut.
# Steigt oder fällt die Steigung?

Im Notebook eingeben: das ganze Jahr

Code: python
import pandas as pd

ausleihen = pd.read_csv("hires.csv")
x = ausleihen["temp_c"]
y = ausleihen["hires"]
steigung = ((x - x.mean()) * (y - y.mean())).sum() / ((x - x.mean()) ** 2).sum()
achsenabschnitt = y.mean() - steigung * x.mean()
# Vergleichen Sie mit der Ausgabe von line.py.
round(steigung, 1), round(achsenabschnitt, 1)

Im Notebook eingeben: der überraschendste Tag

Code: python
# Das Residuum jedes Tages, dann der Tag, der am weitesten über der Geraden liegt.
rest = y - (achsenabschnitt + steigung * x)
print(round(rest.abs().mean(), 1))
ausleihen.loc[rest.idxmax()]

Eine Gerade an neuen Tagen beurteilen

Eine Gerade passt immer recht gut zu den Tagen, aus denen sie gelernt hat. Die eigentliche Frage ist, wie sie an neuen Tagen abschneidet.

Teilen Sie deshalb die Daten. Passen Sie an etwa drei Vierteln an, der Trainingsmenge, und halten Sie den Rest als Testmenge zurück. Messen Sie R squared und den mittleren Fehler nur auf der Testmenge.

An einigen Tagen lernen, an anderen prüfen

Befehl
docker exec jupyter python3 steps/split.py

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, ein hohes R squared auf den Lerndaten zeige eine gute Vorhersage. Auf bekannten Daten sieht jedes Modell besser aus, als es ist. Beurteilen Sie es auf einer Testmenge, die es nie gesehen hat, und nennen Sie diese Zahl.

Mehr Eingaben erklären mehr

Die Temperatur allein erklärt etwa 60 Prozent der Schwankung von Tag zu Tag. Auch der Regen zählt.

model.py passt eine Gerade mit zwei Eingaben an: Temperatur und Regen. Jede Eingabe bekommt ihre eigene Steigung. Eine negative Steigung heißt, dass diese Eingabe das Ergebnis senkt.

Mit Temperatur und Regen anpassen

Befehl
docker exec jupyter python3 steps/model.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Weiterführend: das Wochenende als Eingabe

Geben Sie der Geraden in Ihrem Notebook eine dritte Eingabe: eine Spalte wochenende aus 1 und 0, gebildet mit ausleihen["weekday"].isin(["Sat", "Sun"]).astype(int).

Passen Sie an einer Trainingsmenge an und bewerten Sie an einer Testmenge, wie split.py es tut. Steigt das R squared der Testmenge? Sagen Sie in einem Satz, was die Steigung des Wochenendes für den Verleih bedeutet.

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.