Cross Validation

Cross Validation (zu deutsch Kreuzvalidierung) ist eine Methodik zur Evaluierung von Machine Learning Modellen und kommt daher in der Trainingsphase der Modelle zum Einsatz. Beim klassischen Lernsetup mit Trainings- und Testdaten (ggf. noch Validation) werden die Modelle auf den Trainingsdaten trainiert und mit den Testdaten evaluiert. Dabei sind die Ergebnisse stark vom Split der Daten abhängig und können je nach Menge der Daten stark variieren. Die Cross Validation verfolgt einen Ansatz, der in der folgenden Grafik verdeutlicht wird:

Genereller Aufbau der Cross-Validation

Der gesamte Datensatz wird dabei in Subsets unterteilt, die sogenannten Folds. Diese bleiben während der gesamten Trainingsphase dann gleich. Während der Cross-Validation wird das Modell entsprechend nach der Anzahl der Folds trainiert. Bei jedem Fold wird dann ein bestimmter Teil der Daten zum Evaluieren bzw. Testen des Modells verwendet, während die verbleibenden Daten zum Trainieren genutzt werden können. Für jeden Fold wird auf dem Testset die vorher festgelegte Metrik berechnet und gespeichert. Am Ende kann der Mittelwert gebildet werden, der die tatsächliche Performance des Modells sehr gut widerspiegelt und nicht rein vom Split der Daten abhängt. Durch die Berechnung der einzelnen Modelle ist die Cross-Validation jedoch zeit- und rechenintensiver als das Training mit nur einem einfachen Split der Daten. Jedoch können die Modelle meist parallel berechnet bzw. trainiert werden (falls genug Rechenleistung vorhanden ist), da die Ergebnisse in keiner Abhängigkeit zueinander stehen. Cross Validation ist auch bei kleineren Datensätzen ein sehr gutes Verfahren, um Modelle mit verschiedenen Testsätzen zu trainieren und damit aussagekräftige und zuverlässige Ergebnisse zu bekommen. 

Cross-Validation in Sklearn #

Der folgende Codeblock zeigt beispielhaft, wie die Cross Validation mit Sklearn in Python implementiert und genutzt werden kann:

from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score

clf = SVC(kernel='linear', C=1, random_state=42)
scores = cross_val_score(clf, X, y, cv=5)

round(scores, 2)

# Output: 
array([0.81, 1.00 , 0.92, 0.85, 1.00 ])

Weiterführende Links:
Introduction to Cross Validation: https://machinelearningmastery.com/k-fold-cross-validation/
Why and how to Cross Validate a Model:
https://towardsdatascience.com/why-and-how-to-cross-validate-a-model-d6424b45261f
Verlässliche Ergebnisse mit Cross Validation:
https://neuroforge.de/ki-training-verlaessliche-ergebnisse-mit-cross-validation/ 

Schreibe einen Kommentar