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 1k 2k 3k 4
DatenDatenDatenTest
DatenDatenTestDaten
DatenTestDatenDaten
TestDatenDatenDaten
0,850,950,880,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.


Frage 2: Wie viele Modelle werden bei der k-fachen Kreuzvalidierung trainiert?

a) 1
b) k-1
c) k
d) k+1


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.


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.


Frage 5: Welche Python-Bibliothek bietet Funktionen zur Implementierung der k-fachen Kreuzvalidierung?

a) NumPy
b) Pandas
c) Matplotlib
d) Scikit-learn