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:
Die Falle: 15 Basilikumpflanzen, unterschiedlich bewässert, und drei Kurven, die an ihre Erträge angepasst wurden:
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 173Das Anzeichen für Overfitting: kleiner Trainingsfehler, großer Testfehler.
Aufgabe
MittelEin Windpark modelliert die Leistung einer Turbine anhand der Windgeschwindigkeit. Das Starterprogramm teilt die 24 Messwerte auf und liest max_degree ein.
- Fitte für jeden Grad von 1 bis
max_degreeeine Kurve anhand der Trainingsdaten; gib den RMSE für Trainings- und Testdaten in ganzen kW aus. - Gib den ersten Grad aus, bei dem der Testfehler mehr als doppelt so groß ist wie der Trainingsfehler, oder
No overfitting up to degreeundmax_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 7Probier 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter7Überanpassung
Unter- und ÜberanpassungLernkurvenRegularisierungValidierungssetsRückblick: Einen Baum optimieren2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler