Menu
CoddyTech

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:

Zwei Diagramme mit jeweils sechs Punkten: Bootsgeschwindigkeit im Vergleich zur Windgeschwindigkeit. Links: eine waagerechte Linie beim Mittelwert mit langen roten Abständen zu den Punkten, quadrierte Abweichungen 16.23. Rechts: die angepasste Gerade mit winzigen roten Abständen, quadrierte Abweichungen 0.35

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ß.

challenge icon

Aufgabe

Mittel

Ein 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.

  1. Vervollständige r_squared(y, predicted), sodass die Funktion das Bestimmtheitsmaß R² zurückgibt.
  2. Gib am Ende die Überprüfung aus: die Korrelation von x und y, 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
quiz iconTeste dich selbst

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

Übe selbstständig: Online-Python-Compiler