Dies wird verwendet, um Verallgemeinerungsfähigkeit eines Modells zu bewerten.
Problem: Wenn man ein Modell nur mit einer einzigen Aufteilung der Daten in Trainings- und Testdaten bewertet, kann der erzielte Score, z. B. das Bestimmtheitsmaß , abhängig von der zufälligen Aufteilung der Daten stark schwanken.
Lösung: Die k-fache Kreuzvalidierung (k-fold cross validation) bietet eine Lösung für dieses Problem, indem sie mehrere verschiedene Train/Test-Aufteilungen verwendet und die Ergebnisse über diese Aufteilungen mittelt.
k 1 | k 2 | k 3 | k 4 |
---|---|---|---|
Daten | Daten | Daten | Test |
Daten | Daten | Test | Daten |
Daten | Test | Daten | Daten |
Test | Daten | Daten | Daten |
0,85 | 0,95 | 0,88 | 0,92 |
Vorgehen
- Aufteilung der Daten: Die verfügbaren Daten werden in k gleich große Blöcke (Folds) aufgeteilt.
- Iteratives Training und Testen: Das Modell wird k-mal trainiert und bewertet. In jedem Durchlauf wird ein anderer Block als Testdatenmenge verwendet, während die restlichen k-1 Blöcke zum Trainieren des Modells verwendet werden.
- Mittelung der Scores: Die k erzielten Scores, z. B. , werden gemittelt, um eine robustere Schätzung der Modellleistung zu erhalten.
Beispiel: 4-fache Kreuzvalidierung (k=4)
- Die Daten werden in 4 Blöcke aufgeteilt.
- In jedem der 4 Durchläufe wird ein anderer Block als Testmenge verwendet, während die anderen 3 Blöcke als Trainingsmenge dienen.
- Die 4 erhaltenen Scores werden gemittelt, um die finale Bewertung des Modells zu erhalten.
Vorteile der k-fachen Kreuzvalidierung:
- Robustere Schätzung der Modellleistung: Durch die Mittelung der Ergebnisse aus mehreren Train/Test-Aufteilungen werden zufällige Schwankungen minimiert.
- Bessere Ausnutzung der Daten: Im Gegensatz zur einfachen Train/Test-Aufteilung, bei der ein Teil der Daten ungenutzt bleibt, werden bei der k-fachen Kreuzvalidierung alle Datenpunkte sowohl zum Trainieren als auch zum Testen verwendet.
Implementierung in Python:
Python bietet Bibliotheken wie Scikit-learn, die Funktionen zur einfachen Implementierung der k-fachen Kreuzvalidierung bereitstellen.
- train_test_split(): Teilt die Daten in Trainings- und Testdaten auf.
cross_val_score()
: Führt die k-fache Kreuzvalidierung für ein gegebenes Modell und einen Datensatz durch.K n
: Objekt zur Erzeugung von k-fachen Kreuzvalidierungs-Indizes.
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
from sklearn.model_selction import KFold
import numpy as np
kf = KFold(n_splits = 10, shuffle = True)
# Man übergubt das Lernmodell, die Trainings- und Testdaten und die Art der Kreuzvalidierung
scores = cross_val_score(linearRegression(), X, Y, cv = kf) # Default-KFold (3-Fach)
print(scores)
print(np.mean(scores))
Zusammenfassung
Die k-fache Kreuzvalidierung ist ein wertvolles Werkzeug zur Bewertung der Verallgemeinerungsfähigkeit von Machine-Learning-Modellen. Sie ermöglicht eine zuverlässigere Einschätzung der Modellleistung und hilft, Überanpassung an die Trainingsdaten zu erkennen.
Quizfragen
Frage 1: Was ist der Hauptzweck der k-fachen Kreuzvalidierung?
a) Die Laufzeit des Trainings zu verkürzen.
b) Den Speicherbedarf des Modells zu reduzieren.
c) Die Komplexität des Modells zu erhöhen.
d) Die Verallgemeinerungsfähigkeit des Modells zu bewerten.Lösung
d)
Die Verallgemeinerungsfähigkeit des Modells zu bewerten.
Erläuterung: Die k-fache Kreuzvalidierung dient dazu, abzuschätzen, wie gut ein Modell auf neuen, unbekannten Daten abschneidet. Sie hilft, die Robustheit der Bewertung zu erhöhen und das Risiko der Überanpassung an die Trainingsdaten zu minimieren.
Frage 2: Wie viele Modelle werden bei der k-fachen Kreuzvalidierung trainiert?
a) 1
b) k-1
c) k
d) k+1Lösung
c)
k
Erläuterung: Bei der k-fachen Kreuzvalidierung wird der Datensatz in k gleich große Teile (Folds) aufgeteilt. In jeder Iteration wird ein anderer Fold als Testmenge verwendet, und das Modell wird mit den restlichen k-1 Folds trainiert. Dies wird k-mal wiederholt, sodass insgesamt k Modelle trainiert werden.
Frage 3: Was ist ein typischer Wert für k bei der k-fachen Kreuzvalidierung?
a) 2
b) 5
c) 10
d) Alle oben genannten Werte können sinnvoll sein.Lösung
d)
Alle oben genannten Werte können sinnvoll sein.
Erläuterung: Die Wahl von k hängt von der Größe des Datensatzes und dem Rechenaufwand ab. Gängige Werte sind k=5 und k=10, aber auch andere Werte können verwendet werden. Ein größerer Wert für k führt zu einer zuverlässigeren Schätzung, erhöht aber auch den Rechenaufwand.
Frage 4: Was ist der Vorteil der k-fachen Kreuzvalidierung im Vergleich zur einfachen Aufteilung in Trainings- und Testdaten?
a) Sie ist rechnerisch weniger aufwendig.
b) Sie liefert eine robustere Schätzung der Modellleistung.
c) Sie ermöglicht die Verwendung komplexerer Modelle.
d) Sie verhindert Überanpassung.Lösung
b)
Sie liefert eine robustere Schätzung der Modellleistung.
Erläuterung: Durch die Verwendung mehrerer Train/Test-Aufteilungen und die Mittelung der Scores reduziert die k-fache Kreuzvalidierung den Einfluss der zufälligen Aufteilung der Daten auf die Bewertung.
Frage 5: Welche Python-Bibliothek bietet Funktionen zur Implementierung der k-fachen Kreuzvalidierung?
a) NumPy
b) Pandas
c) Matplotlib
d) Scikit-learnLösung
d)
Scikit-learn
Erläuterung: Die Bibliothek Scikit-learn bietet eine Reihe von Funktionen für maschinelles Lernen, einschließlich Funktionen zur Durchführung der k-fachen Kreuzvalidierung. Die Funktioncross_val_score()
ist besonders nützlich für diesen Zweck.