Wie gut ist die Anpassung?
Teil des Abschnitts Statistik für ML der Machine Learning-Journey von Coddy. Lektion 39 von 64.
Jede Punktwolke lässt sich durch eine Gerade darstellen, daher braucht man Gütemaße für Anpassungen. Ein Seemann hat Wind- und Bootsgeschwindigkeiten aufgezeichnet: Vergleiche die quadrierten Abweichungen der Geraden mit denen des Mittelwerts, der einfachsten Schätzung:
R-Quadrat ist der Anteil dieser Streuung, den die Linie erklärt:
wind = np.array([6, 8, 10, 12, 15, 18])
boat = np.array([3.1, 4.4, 4.9, 6.2, 6.8, 8.1])
slope, intercept = np.polyfit(wind, boat, 1)
predicted = slope * wind + intercept
ss_res = ((boat - predicted) ** 2).sum() # die Anpassung: 0.35
ss_tot = ((boat - boat.mean()) ** 2).sum() # der Mittelwert: 16.23
print(np.round(1 - ss_res / ss_tot, 3))Dies gibt 0.979 aus: Die Linie erklärt 98% der Streuung der Geschwindigkeit. 1 ist eine perfekte Linie, 0 nicht besser als der Mittelwert.
Es ist das Standardmaß für ein Modell, das Zahlen vorhersagt. Bei einer angepassten Linie entspricht es dem Bestimmtheitsmaß.
Aufgabe
MittelEin Pilzzuchtbetrieb hat 16 Anzuchtbeete in mushrooms.csv erfasst. Das Programm liest einen Spaltennamen ein, und das Grundgerüst passt die Gerade an, die harvest_kg daraus vorhersagt. In seinem Bericht wird r_squared benötigt, das noch leer ist.
- Vervollständige
r_squared(y, predicted), sodass die Funktion das Bestimmtheitsmaß R² zurückgibt. - Gib am Ende die Überprüfung aus: die Korrelation von
xundy, quadriert, mal 100 und auf 1 Dezimalstelle gerundet.
Für einen anderen Betrieb und die Eingabe humidity:
humidity explains 27.0% of the harvest variation
Check with r squared: 27.0%Probier es selbst
import numpy as np
import pandas as pd
# Gibt das Bestimmtheitsmaß R² der Vorhersagen für y zurück
def r_squared(y, predicted):
# Schreibe deinen Code hier
return 0
beds = pd.read_csv("mushrooms.csv")
column = input()
# Ändere die folgenden Zeilen nicht
x = beds[column]
y = beds["harvest_kg"]
slope, intercept = np.polyfit(x, y, 1)
predicted = slope * x + intercept
r2 = r_squared(y, predicted)
print(f"{column} explains {np.round(r2 * 100, 1)}% of the harvest variation")
# Schreibe deinen Code unten
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Statistik für ML
1Lage und Streuung
Mittelwert und MedianPerzentile und QuartileVarianz und StandardabweichungStichprobe oder Grundgesamtheit?Der häufigste WertRückblick: Lieferzeiten4Stichproben und Grundgesamtheiten
Grundgesamtheit und StichprobeStichprobenmittelwerte variierenDie StichprobenverteilungGrößere Stichproben, weniger ZufallRückblick: Eine Stadt befragen7Trendlinien
ResiduenAnpassung nach der Methode der kleinsten QuadrateDie Anpassungslinie zeichnenMit einer Linie Vorhersagen treffenWie gut ist die Anpassung?Rückblick: Übungsstunden2Verteilungen
DichtehistogrammeDatenverteilungenDie NormalverteilungskurveDie 68-95-99,7-RegelZ-WerteRückblick: Akkulaufzeit3Wahrscheinlichkeit durch Simulation
Wahrscheinlichkeit als HäufigkeitDas Gesetz der großen ZahlenAugensummen beim WürfelnErwartungswertBedingte WahrscheinlichkeitRückblick: Gewinnchancen am Würfelstand6Zusammenhänge
Streudiagramme lesenKorrelationKorrelationsmatrixKorrelations-HeatmapsKorrelation ist keine KausalitätRückblick: Eiscreme und SonneÜbe selbstständig: Online-Python-Compiler