Menu
CoddyTech

Unter- und Überanpassung

Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 32 von 58.

Du bist der größten Falle des maschinellen Lernens begegnet: k = 1 und tiefe Bäume, die sich alles eingeprägt haben. In diesem Kapitel erhält sie einen Namen, und am Ende stehen Diagramme wie dieses:

Trainings- und Validierungsgenauigkeit eines Baums nach Tiefe: Das Training steigt in Richtung 1.0, die Validierung erreicht bei Tiefe 3 ihren Höchstwert und sinkt dann. Eine gestrichelte Linie markiert die gewählte Tiefe, ein roter Stern den einzigen Testwert: 0.82

Die Falle: 15 Basilikumpflanzen, unterschiedlich bewässert, und drei Kurven, die an ihre Erträge angepasst wurden:

Erträge von 15 Trainingspflanzen als graue Punkte und 5 Testpflanzen als schwarze Quadrate, abhängig von der täglichen Wassermenge. Eine gerade blaue Linie verfehlt den Höchststand, eine grüne Kurve 3. Grades folgt ihm, eine rote Kurve 12. Grades schwingt wild zwischen den Punkten hin und her

Grad 1 ist zu einfach: Underfitting. Grad 12 verläuft durch jeden Trainingspunkt und schwingt zwischen ihnen hin und her: Overfitting – es wird auswendig gelernt, nicht gelernt.

np.polyval(coefs, x) liefert die Höhen einer Kurve. RMSE für Trainings- und Testdaten, in Gramm:

for degree in [1, 3, 12]:
    coefs = np.polyfit(water_train, grams_train, degree)
    train_err = np.sqrt(mean_squared_error(grams_train, np.polyval(coefs, water_train)))
    test_err = np.sqrt(mean_squared_error(grams_test, np.polyval(coefs, water_test)))
    print(degree, round(train_err), round(test_err))

Es wird ausgegeben:

1 156 138
3 15 19
12 9 173

Das Anzeichen für Overfitting: kleiner Trainingsfehler, großer Testfehler.

challenge icon

Aufgabe

Mittel

Ein Windpark modelliert die Leistung einer Turbine anhand der Windgeschwindigkeit. Das Starterprogramm teilt die 24 Messwerte auf und liest max_degree ein.

  1. Fitte für jeden Grad von 1 bis max_degree eine Kurve anhand der Trainingsdaten; gib den RMSE für Trainings- und Testdaten in ganzen kW aus.
  2. Gib den ersten Grad aus, bei dem der Testfehler mehr als doppelt so groß ist wie der Trainingsfehler, oder No overfitting up to degree und max_degree.

Für eine andere Turbine und 7:

Degree 1: train 117 kW, test 172 kW
Degree 2: train 115 kW, test 182 kW
Degree 3: train 64 kW, test 85 kW
Degree 4: train 63 kW, test 79 kW
Degree 5: train 47 kW, test 67 kW
Degree 6: train 47 kW, test 65 kW
Degree 7: train 23 kW, test 85 kW
Overfitting starts at degree 7

Probier es selbst

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

max_degree = int(input())

# Ändere die folgenden Zeilen nicht: Windgeschwindigkeit (m/s) und Leistung (kW) einer Windkraftanlage
speed = np.array([3.8, 4.3, 5.1, 5.6, 5.6, 6.7, 6.8, 7.2, 7.8, 8.5, 8.9, 9.1,
                  10.2, 10.9, 11.4, 11.9, 12.2, 12.4, 12.6, 13.2, 13.9, 14.4, 15.5, 16.5])
power = np.array([0, 85, 179, 22, 17, 126, 255, 273, 419, 545, 612, 665,
                  913, 1120, 1114, 1227, 1299, 1400, 1293, 1329, 1396, 1493, 1461, 1552])
speed_train, speed_test, power_train, power_test = train_test_split(
    speed, power, test_size=0.25, random_state=0)

# 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 Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler