Kreuzvalidierung
Im vorherigen Kapitel wurde die Aufteilung in Trainings- und Testdaten zur Modellevaluierung verwendet. Diese Methode weist zwei Hauptnachteile auf:
- 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 den 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 der Trainingssatz verwendet, um das Modell zu trainieren, während der Testsatz zur Messung der Modellleistung dient.
Der Prozess wird wiederholt, sodass jeder Fold einmal als Testsatz dient, während die verbleibenden Folds den Trainingssatz bilden.
Dieser Prozess erzeugt fünf Genauigkeitswerte, jeweils einen pro Aufteilung. Das arithmetische Mittel dieser Werte liefert die durchschnittliche Modellleistung.
In Python kann der Cross-Validation-Score mit cross_val_score() aus dem Modul sklearn.model_selection berechnet werden.
Obwohl das Beispiel 5 Folds verwendet, kann beliebige Anzahl von Folds für die Kreuzvalidierung gewählt werden. Beispielsweise könnten 10 Folds verwendet werden, wobei 9 für das Trainingsset und 1 für das Testset zugewiesen werden. Dies ist über den Parameter cv in der Funktion cross_val_score() anpassbar.
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 n Folds gewählt werden) 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 Kreuzvalidierung durchgeführt. Diese Methode 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
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 weist zwei Hauptnachteile auf:
- 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 den 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 der Trainingssatz verwendet, um das Modell zu trainieren, während der Testsatz zur Messung der Modellleistung dient.
Der Prozess wird wiederholt, sodass jeder Fold einmal als Testsatz dient, während die verbleibenden Folds den Trainingssatz bilden.
Dieser Prozess erzeugt fünf Genauigkeitswerte, jeweils einen pro Aufteilung. Das arithmetische Mittel dieser Werte liefert die durchschnittliche Modellleistung.
In Python kann der Cross-Validation-Score mit cross_val_score() aus dem Modul sklearn.model_selection berechnet werden.
Obwohl das Beispiel 5 Folds verwendet, kann beliebige Anzahl von Folds für die Kreuzvalidierung gewählt werden. Beispielsweise könnten 10 Folds verwendet werden, wobei 9 für das Trainingsset und 1 für das Testset zugewiesen werden. Dies ist über den Parameter cv in der Funktion cross_val_score() anpassbar.
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 n Folds gewählt werden) 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 Kreuzvalidierung durchgeführt. Diese Methode 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!