Kreuzvalidierung
Im vorherigen Kapitel wurde die Aufteilung in Trainings- und Testdaten zur Modellevaluierung verwendet. Diese Methode hat zwei Hauptnachteile:
- Begrenzte Trainingsdaten: Nur ein Teil des Datensatzes wird für das Training genutzt, obwohl mehr Daten die Leistung in der Regel verbessern.
- Abhängigkeit von der Aufteilung: Da die Aufteilung zufällig erfolgt, können die Ergebnisse zwischen verschiedenen Durchläufen deutlich variieren.
Um diese Probleme zu lösen, wird eine alternative Evaluierungsmethode namens Cross-Validation verwendet.
Zuerst wird der gesamte Datensatz in 5 gleich große Teile unterteilt, die als Folds bezeichnet werden.
Anschließend wird ein Fold als Testmenge verwendet und die verbleibenden Folds werden zum Trainingssatz zusammengefasst.
Wie bei jedem Evaluierungsprozess wird das Trainingsset verwendet, um das Modell zu trainieren, während das Testset zur Messung seiner Leistung dient.
Der Prozess wird wiederholt, sodass jeder Fold einmal als Testset dient, während die verbleibenden Folds das Trainingsset bilden.
Dieser Prozess liefert fünf Genauigkeitswerte, jeweils einen aus jedem Split. Der Mittelwert dieser Werte ergibt die durchschnittliche Modellleistung.
In Python kann der Cross-Validation-Score mit cross_val_score()
aus dem Modul sklearn.model_selection
berechnet werden.
Obwohl im Beispiel 5 Folds verwendet werden, kann jede beliebige Anzahl von Folds für die Kreuzvalidierung gewählt werden. Beispielsweise könnten Sie 10 Folds verwenden, wobei 9 dem Trainingssatz und 1 dem Testsatz zugeordnet werden. Dies lässt sich über den Parameter cv
in der Funktion cross_val_score()
anpassen.
1234567891011import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
Diese Methode liefert stabilere und verlässlichere Ergebnisse als die Train-Test-Split-Methode; sie ist jedoch deutlich langsamer, da das Modell fünfmal (oder n-mal, wenn Sie n Folds festlegen) trainiert und bewertet werden muss, im Vergleich zu nur einmal beim Train-Test-Split.
Kreuzvalidierung wird typischerweise beim Hyperparameter-Tuning eingesetzt, wobei der gesamte Kreuzvalidierungsprozess für jeden möglichen Hyperparameterwert durchgeführt wird.
Beispielsweise wird bei der Bestimmung der optimalen Anzahl von Nachbarn im k-Nearest-Neighbors-Algorithmus für jeden Kandidatenwert eine vollständige Runde der Kreuzvalidierung durchgeführt. Dieses Verfahren gewährleistet eine umfassende Bewertung jeder Hyperparametereinstellung über den gesamten Datensatz und ermöglicht die Auswahl des Wertes, der konsequent die beste Leistung erzielt.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you explain how cross-validation improves model evaluation compared to train-test split?
What are some common use cases for cross-validation in machine learning?
How do I choose the number of folds for cross-validation?
Awesome!
Completion rate improved to 3.13
Kreuzvalidierung
Swipe um das Menü anzuzeigen
Im vorherigen Kapitel wurde die Aufteilung in Trainings- und Testdaten zur Modellevaluierung verwendet. Diese Methode hat zwei Hauptnachteile:
- Begrenzte Trainingsdaten: Nur ein Teil des Datensatzes wird für das Training genutzt, obwohl mehr Daten die Leistung in der Regel verbessern.
- Abhängigkeit von der Aufteilung: Da die Aufteilung zufällig erfolgt, können die Ergebnisse zwischen verschiedenen Durchläufen deutlich variieren.
Um diese Probleme zu lösen, wird eine alternative Evaluierungsmethode namens Cross-Validation verwendet.
Zuerst wird der gesamte Datensatz in 5 gleich große Teile unterteilt, die als Folds bezeichnet werden.
Anschließend wird ein Fold als Testmenge verwendet und die verbleibenden Folds werden zum Trainingssatz zusammengefasst.
Wie bei jedem Evaluierungsprozess wird das Trainingsset verwendet, um das Modell zu trainieren, während das Testset zur Messung seiner Leistung dient.
Der Prozess wird wiederholt, sodass jeder Fold einmal als Testset dient, während die verbleibenden Folds das Trainingsset bilden.
Dieser Prozess liefert fünf Genauigkeitswerte, jeweils einen aus jedem Split. Der Mittelwert dieser Werte ergibt die durchschnittliche Modellleistung.
In Python kann der Cross-Validation-Score mit cross_val_score()
aus dem Modul sklearn.model_selection
berechnet werden.
Obwohl im Beispiel 5 Folds verwendet werden, kann jede beliebige Anzahl von Folds für die Kreuzvalidierung gewählt werden. Beispielsweise könnten Sie 10 Folds verwenden, wobei 9 dem Trainingssatz und 1 dem Testsatz zugeordnet werden. Dies lässt sich über den Parameter cv
in der Funktion cross_val_score()
anpassen.
1234567891011import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
Diese Methode liefert stabilere und verlässlichere Ergebnisse als die Train-Test-Split-Methode; sie ist jedoch deutlich langsamer, da das Modell fünfmal (oder n-mal, wenn Sie n Folds festlegen) trainiert und bewertet werden muss, im Vergleich zu nur einmal beim Train-Test-Split.
Kreuzvalidierung wird typischerweise beim Hyperparameter-Tuning eingesetzt, wobei der gesamte Kreuzvalidierungsprozess für jeden möglichen Hyperparameterwert durchgeführt wird.
Beispielsweise wird bei der Bestimmung der optimalen Anzahl von Nachbarn im k-Nearest-Neighbors-Algorithmus für jeden Kandidatenwert eine vollständige Runde der Kreuzvalidierung durchgeführt. Dieses Verfahren gewährleistet eine umfassende Bewertung jeder Hyperparametereinstellung über den gesamten Datensatz und ermöglicht die Auswahl des Wertes, der konsequent die beste Leistung erzielt.
Danke für Ihr Feedback!