Zum Inhalt

Datenaufteilung: Training, Validierungs- und Testdaten

Im Bereich des Maschinellen Lernens (ML) ist die sorgfältige Partitionierung von Daten in Trainings-, Validierungs- und Testsets von entscheidender Bedeutung, um die Leistungsfähigkeit von Modellen auf unbekannten Daten zu gewährleisten. Diese Aufteilung ermöglicht die Überprüfung und Verbesserung der Effizienz und Zuverlässigkeit eines Modells unter neuen Bedingungen, was für den praktischen Einsatz in realen Anwendungen unverzichtbar ist.

Grundprinzipien der Datenpartitionierung

Für ein robustes ML-Modell ist die Verwendung unterschiedlicher Datensätze für das Training, die Validierung und das Testen essenziell. Diese Partitionierung erlaubt es, das Modell zunächst mit Trainingsdaten zu schulen, seine Parameter während der Validierungsphase anzupassen und abschließend seine Leistungsfähigkeit mit neuen, unbekannten Daten zu evaluieren.

  • Trainingsdatensatz


    Dient als Basis, auf der das Modell lernt, Muster und Zusammenhänge in den Daten zu erkennen.

  • Validierungsdatensatz


    Wird genutzt, um das Modell während des Trainingsprozesses zu optimieren, ohne dabei den Testdatensatz zu verwenden. Dies verhindert eine Überanpassung.

  • Testdatensatz


    Ermöglicht eine objektive Bewertung der endgültigen Modellleistung auf Daten, die dem Modell bisher unbekannt waren

Praktische Umsetzung der Datenpartitionierung

Eine verbreitete Methode ist die Aufteilung des Gesamtdatensatzes im Verhältnis 3:1:1, mit 60% der Daten für das Training, 20% für die Validierung und 20% für das Testen. Die Funktion train_test_split aus der Bibliothek scikit-learn bietet ein nützliches Werkzeug für diese Aufteilung. Hier ein Beispiel, das die Partitionierung in Trainings-, Validierungs- und Testdatensätze verdeutlicht:

---
config:
  sankey:
    showValues: false
    linkColor: 'target'
    width: 350
    height: 200
---
%%{
  init: {
    'theme': 'base',
    'themeVariables': {
      'primaryTextColor': '#888888'
    }
  }
}%%
sankey-beta

Datensatz,Training,60.0
Datensatz,Testdaten,40.0
Testdaten,Validierung,20.0
Testdaten,Test,20.0
import pandas as pd

from sklearn.model_selection import train_test_split

# Seed für Zufallszahlengenerator zur Sicherstellung der Reproduzierbarkeit
RANDOM_STATE = 404

# Laden des DataFrames mit den Daten
df = pd.read_csv('data.csv')
X = df.drop('price', axis=1)  # Features
y = df['price']  # Zielvariable

# Aufteilung in Trainings- und ein temporäres Set
X_train, X_temp, y_train, y_temp = train_test_split(
    X, y, test_size=0.4, random_state=RANDOM_STATE
)

# Aufteilung des temporären Sets in Validierungs- und Testsets
X_val, X_test, y_val, y_test = train_test_split(
    X_temp, y_temp, test_size=0.5, random_state=RANDOM_STATE
)

# Überprüfung der Aufteilung
print(X_train.shape)
print(X_val.shape)
print(X_test.shape)
graph TD
    A[Gesamtdatensatz] -->|60%| B(Trainingsdatensatz)
    A -->|40%| C[Temporäres Set]
    C -->|50%| D(Validierungsdatensatz)
    C -->|50%| E(Testdatensatz)

Die Bedeutung von random_state

Der RANDOM_STATE-Parameter1 (Konstante) sichert, dass die Aufteilung der Daten bei jedem Durchlauf identisch bleibt, was für die Reproduzierbarkeit der Experimente unerlässlich ist.

Aufteilung nach Test & Training

---
config:
  sankey:
    showValues: false
    linkColor: 'target'
    width: 250
    height: 100
---
%%{
init: {
    'theme': 'base',
    'themeVariables': {
    'primaryTextColor': '#888888'
    }
}
}%%
sankey-beta

Datensatz,Training,80.0
Datensatz,Test,20.0

In vielen Fällen erfolgt eine einfachere Aufteilung nur in Trainings- und Testdaten. Dies kann insbesondere bei kleineren Datensätzen oder in frühen Phasen der Modellentwicklung ausreichend sein.

import pandas as pd

from sklearn import model_selection

# Seed für den Zufallszahlengenerator
RANDOM_STATE = 404

# Laden des DataFrames mit den Daten
df = pd.read_csv('data.csv')

# Features
X = df.drop('price', axis=1)

# Zielvariable
y = df['price']

# Aufteilung in Training und Test
X_train, X_test, y_train, y_test = (
    model_selection.train_test_split(
        X,
        y,
        test_size=0.2,
        random_state=RANDOM_STATE
    )
)

# Überprüfung der Aufteilung
print(X_train.shape)
print(X_test.shape)

Verwendung von Validierung

  • Der Validierungsdatensatz wird verwendet, um die Hyperparameter2 des Modells zu optimieren.
  • Bei sehr großen Datensätzen kann es effizient sein, einen Teil der Daten als Validierungsset zu nutzen, um schneller Feedback zur Modellleistung zu erhalten. Dies ermöglicht eine agile Anpassung der Modellstrategie in frühen Entwicklungsphasen.
  • In Szenarien, in denen Daten knapp sind, kann die Verwendung von Kreuzvalidierungstechniken3, bei denen der Validierungsdatensatz rotiert wird, dazu beitragen, den Trainingsdatensatz effizient zu nutzen, ohne auf die Vorteile der Modellvalidierung verzichten zu müssen.
  • Frühes Stoppen (Early Stopping) ist eine Technik, um das Training zu beenden, sobald die Leistung auf dem Validierungsdatensatz zu sinken beginnt. Dies ist ein effektives Mittel, um Überanpassung4, also durch Überwachung der Generalisierungsfähigkeit5 des Modells, zu verhindern und gleichzeitig Rechenressourcen zu sparen. Der Validierungsdatensatz ist entscheidend, um den richtigen Zeitpunkt für das Stoppen des Trainings zu bestimmen.
  • Beim Vergleich verschiedener Modellarchitekturen (Modellvalidierung6) oder -algorithmen dient der Validierungsdatensatz als Grundlage, um die beste Variante auszuwählen.

Zusammenfassung

Eine durchdachte Partitionierung der Daten ist ein fundamentaler Schritt in der Vorbereitungsphase für das Maschinelle Lernen. Sie stellt sicher, dass Modelle nicht nur auf den Trainingsdaten gut performen, sondern auch in der Lage sind, neue, unbekannte Daten korrekt zu verarbeiten. Durch den Einsatz von Trainings-, Validierungs- und Testdatensätzen sowie die Beachtung von Best Practices wie der Verwendung von RANDOM_STATE und fortgeschrittenen Partitionierungstechniken kann die Genauigkeit und Zuverlässigkeit von Modellen optimiert werden.


  1. Der Parameter random_state spielt eine wesentliche Rolle bei der Reproduzierbarkeit von Ergebnissen in wissenschaftlichen Experimenten, insbesondere im Kontext des Maschinellen Lernens. Er dient als Initialisierungspunkt für Zufallszahlengeneratoren, die in Prozessen wie der Aufteilung von Daten in Trainings-, Validierungs- und Testsets verwendet werden. Indem man RANDOM_STATE einen konstanten Wert zuweist, stellt man sicher, dass die zufällige Auswahl von Daten bei jedem Durchlauf des Experiments identisch ist. Dies ermöglicht es Forschern und Entwicklern, die Ergebnisse ihrer Modelle unter exakt den gleichen Ausgangsbedingungen zu vergleichen und zu evaluieren, was für die Validierung von wissenschaftlichen Hypothesen und Modellen unerlässlich ist. Ohne einen festgelegten RANDOM_STATE würden die Ergebnisse bei jedem Durchlauf variieren, was die Analyse der Modellleistung erschwert und die Identifizierung der besten Modellkonfigurationen kompliziert gestaltet. 

  2. Beim Hyperparameter-Tuning wird die Modellkonfiguration angepasst, um die Leistung zu verbessern. Der Validierungsdatensatz dient dazu, die Effektivität verschiedener Hyperparameter-Einstellungen zu bewerten, ohne den Testdatensatz zu berühren, was eine unvoreingenommene Bewertung der Modellleistung ermöglicht. 

  3. Kreuzvalidierung ist eine Technik zur Bewertung der Generalisierbarkeit eines statistischen Modells oder zur Überprüfung, wie gut ein Modell auf einen unabhängigen Datensatz generalisieren wird, den es während des Trainings nicht gesehen hat. Dieses Verfahren ist besonders nützlich in Situationen, in denen die Menge der verfügbaren Daten begrenzt ist. 

  4. Overfitting tritt auf, wenn ein Maschinenlernmodell zu komplex ist und die Trainingsdaten zu genau lernt, einschließlich des Rauschens und der Ausreißer, was zu einer schlechten Generalisierung auf neue, unbekannte Daten führt. Es manifestiert sich darin, dass das Modell auf den Trainingsdaten exzellente Leistung zeigt, aber seine Vorhersagegenauigkeit auf Testdaten oder in realen Anwendungen deutlich abnimmt. Um Overfitting zu vermeiden, werden Techniken wie Regularisierung, Kreuzvalidierung und die Auswahl eines angemessen komplexen Modells eingesetzt. 

  5. Für komplexe Modelle oder tiefe neuronale Netze ist es besonders wichtig, die Generalisierungsfähigkeit des Modells zu überwachen und Überanpassung (Overfitting) zu vermeiden. Ein Validierungsdatensatz ermöglicht es, die Modellperformance regelmäßig zu überprüfen und die Hyperparameter entsprechend anzupassen, bevor das Modell auf dem Testdatensatz evaluiert wird. 

  6. Ein Validierungsdatensatz ermöglicht es, die Leistung des Modells auf Daten zu bewerten, die während des Trainings nicht verwendet wurden, was ein realistischeres Bild der Modellleistung in einer neuen Umgebung liefert. Dies ist besonders wichtig, um Overfitting zu erkennen, bei dem das Modell zwar die Trainingsdaten sehr gut erklärt, aber nicht gut auf neue Daten generalisiert.