Validierungssets
Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 35 von 58.
Bei der Auswahl von k und der Baumtiefe hast du den k-Wert oder die Tiefe mit dem besten Testergebnis beibehalten. Dieser Wert schmeichelt: Du hast ihn beibehalten, weil er hoch ausfiel.
Behalte also einen dritten Datensatz für die Auswahl zurück, den Validierungsdatensatz:
Zwei Aufteilungen ergeben es. 0.25 der verbleibenden 80% sind 20%:
X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
X_train, X_val, y_train, y_val = train_test_split(X_rest, y_rest, test_size=0.25, random_state=0)
print(len(X_train), len(X_val), len(X_test))Für 500 Zeilen wird Folgendes ausgegeben:
300 100 100Wähle anhand des Validierungssatzes. Verwende den Testsatz erst einmal ganz am Ende.
Aufgabe
MittelEin Weinberg prognostiziert den Traubenertrag pro Reihe mit Ridge. Der Starter wählt alpha anhand des Testergebnisses aus und gibt dasselbe Ergebnis aus. Korrigiere das.
- Teile
X_restundy_restin Trainings- und Validierungszeilen auf (test_size=0.25,random_state=0). - Wähle alpha anhand des R²-Werts der Validierung aus und gib es zusammen mit diesem Wert aus.
- Trainiere das Modell mit dem gewählten alpha auf den Trainingszeilen und gib dessen R²-Wert für den Test aus.
Für einen anderen Weinberg:
Chosen alpha: 1 (validation R squared 0.787)
Test R squared: 0.726Der ehrliche Wert ist oft niedriger als der des Starters. Er ist der echte Wert.
Probier es selbst
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
# Passt ein skaliertes Ridge(alpha)-Modell an den ersten Datensatz an und gibt dessen R-Quadrat-Wert für den zweiten zurück
def ridge_r2(alpha, X_fit, y_fit, X_check, y_check):
scaler = StandardScaler()
model = Ridge(alpha=alpha)
model.fit(scaler.fit_transform(X_fit), y_fit)
return model.score(scaler.transform(X_check), y_check)
# 90 Zeilen mit Weinbaudaten: jeweils 10 Messwerte und der Traubenertrag in kg
rows = pd.read_csv("vineyard.csv")
features = ["sun_hours", "rain_mm", "soil_ph", "slope_deg", "vine_age",
"row_length_m", "buds_per_vine", "frost_days", "wind_kmh", "clay_pct"]
X = rows[features]
y = rows["yield_kg"]
alphas = [0.1, 1, 10, 100]
X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# Hier wird alpha anhand des Testergebnisses ausgewählt und anschließend genau dieses Ergebnis ausgegeben: behebe das
best_alpha = 0
best_r2 = -1
for alpha in alphas:
r2 = ridge_r2(alpha, X_rest, y_rest, X_test, y_test)
if r2 > best_r2:
best_alpha = alpha
best_r2 = r2
print(f"Chosen alpha: {best_alpha}")
print(f"Test R squared: {best_r2:.3f}")
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