Menu
CoddyTech

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:

Ein Balken, der in drei Teile aufgeteilt ist: Trainingszeilen 60 %, werden zum Anpassen jedes Kandidaten verwendet; Validierung 20 %, wird für die Auswahl verwendet; Test 20 %, wird einmalig für die Berichterstattung verwendet

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 100

Wähle anhand des Validierungssatzes. Verwende den Testsatz erst einmal ganz am Ende.

challenge icon

Aufgabe

Mittel

Ein Weinberg prognostiziert den Traubenertrag pro Reihe mit Ridge. Der Starter wählt alpha anhand des Testergebnisses aus und gibt dasselbe Ergebnis aus. Korrigiere das.

  1. Teile X_rest und y_rest in Trainings- und Validierungszeilen auf (test_size=0.25, random_state=0).
  2. Wähle alpha anhand des R²-Werts der Validierung aus und gib es zusammen mit diesem Wert aus.
  3. 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.726

Der 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}")
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