Heim  >  Artikel  >  Technologie-Peripheriegeräte  >  Die Bedeutung der Kreuzvalidierung kann nicht ignoriert werden!

Die Bedeutung der Kreuzvalidierung kann nicht ignoriert werden!

王林
王林nach vorne
2023-11-06 20:17:191359Durchsuche

Um die ursprüngliche Bedeutung nicht zu ändern, muss Folgendes neu ausgedrückt werden: Zuerst müssen wir herausfinden, warum eine Kreuzvalidierung erforderlich ist.

Kreuzvalidierung ist eine Technik, die häufig im maschinellen Lernen und in der Statistik verwendet wird, um die Leistung und Generalisierungsfähigkeit eines Vorhersagemodells zu bewerten, insbesondere wenn die Daten begrenzt sind, oder um die Fähigkeit des Modells zur Generalisierung auf neue, unsichtbare Daten zu bewerten.

Die Bedeutung der Kreuzvalidierung kann nicht ignoriert werden!

Unter welchen Umständen wird eine Kreuzvalidierung verwendet?

  • Bewertung der Modellleistung: Die Kreuzvalidierung hilft dabei, die Leistung des Modells anhand unsichtbarer Daten abzuschätzen. Durch das Training und die Auswertung des Modells anhand mehrerer Teilmengen der Daten liefert die Kreuzvalidierung eine robustere Schätzung der Modellleistung als eine einzelne Zugtestaufteilung.
  • Dateneffizienz: Wenn die Daten begrenzt sind, nutzt die Kreuzvalidierung alle verfügbaren Proben vollständig aus und ermöglicht eine zuverlässigere Bewertung der Modellleistung, indem alle Daten gleichzeitig für Training und Bewertung verwendet werden.
  • Hyperparameter-Tuning: Kreuzvalidierung wird häufig verwendet, um die besten Hyperparameter für ein Modell auszuwählen. Indem Sie die Leistung Ihres Modells mithilfe verschiedener Hyperparametereinstellungen für verschiedene Teilmengen der Daten bewerten, können Sie die Hyperparameterwerte identifizieren, die im Hinblick auf die Gesamtleistung am besten abschneiden.
  • Überanpassung erkennen: Mithilfe der Kreuzvalidierung können Sie erkennen, ob das Modell eine Überanpassung an die Trainingsdaten durchführt. Wenn das Modell im Trainingssatz deutlich besser abschneidet als im Validierungssatz, deutet dies möglicherweise auf eine Überanpassung hin und erfordert Anpassungen wie eine Regularisierung oder die Auswahl eines einfacheren Modells.
  • Bewertung der Generalisierungsfähigkeit: Die Kreuzvalidierung bietet eine Bewertung der Fähigkeit des Modells, auf unsichtbare Daten zu generalisieren. Durch die Auswertung des Modells anhand mehrerer Datenaufteilungen hilft es dabei, die Fähigkeit des Modells zu bewerten, zugrunde liegende Muster in den Daten zu erfassen, ohne sich auf Zufälligkeit oder eine bestimmte Zugtestaufteilung zu verlassen.

Die allgemeine Idee der Kreuzvalidierung kann in Abbildung 5-fach-Kreuz dargestellt werden. In jeder Iteration wird das neue Modell an vier Unterdatensätzen trainiert und am letzten beibehaltenen Unterdatensatz getestet, um sicherzustellen, dass alle Daten vorhanden sind werden genutzt. Durch Indikatoren wie durchschnittliche Punktzahl und Standardabweichung wird ein echtes Maß für die Modellleistung bereitgestellt

Die Bedeutung der Kreuzvalidierung kann nicht ignoriert werden!

Alles muss mit dem K-Fold-Crossover beginnen.

KFold

Die K-Fold-Kreuzvalidierung wurde in Sklearn integriert. Hier ist ein 7-faches Beispiel:

from sklearn.datasets import make_regressionfrom sklearn.model_selection import KFoldx, y = make_regression(n_samples=100)# Init the splittercross_validation = KFold(n_splits=7)

Die Bedeutung der Kreuzvalidierung kann nicht ignoriert werden!

Eine weitere häufige Operation besteht darin, Shuffle vor der Aufteilung durchzuführen, wodurch die ursprüngliche Reihenfolge der Proben weiter zerstört wird Minimiert das Risiko einer Überanpassung:

cross_validation = KFold(n_splits=7, shuffle=True)

Die Bedeutung der Kreuzvalidierung kann nicht ignoriert werden!

Auf diese Weise kann eine einfache k-fache Kreuzvalidierung durchgeführt werden. Bitte überprüfen Sie unbedingt den Quellcode! Schauen Sie sich unbedingt den Quellcode an! Schauen Sie sich unbedingt den Quellcode an!

StratifiedKFold

StratifiedKFold wurde speziell für Klassifizierungsprobleme entwickelt.

Bei einigen Klassifizierungsproblemen sollte die Zielverteilung unverändert bleiben, selbst wenn die Daten in mehrere Sätze unterteilt sind. In den meisten Fällen sollte beispielsweise ein binäres Ziel mit einem Klassenverhältnis von 30 zu 70 im Trainingssatz und im Testsatz immer noch das gleiche Verhältnis beibehalten. In gewöhnlichem KFold wird diese Regel verletzt, da die Daten vor der Aufteilung gemischt werden Die Proportionen der Kategorien werden nicht beibehalten.

Um dieses Problem zu lösen, wird in Sklearn eine weitere Splitterklasse speziell für die Klassifizierung verwendet – StratifiedKFold:

from sklearn.datasets import make_classificationfrom sklearn.model_selection import StratifiedKFoldx, y = make_classification(n_samples=100, n_classes=2)cross_validation = StratifiedKFold(n_splits=7, shuffle=True, random_state=1121218)

Die Bedeutung der Kreuzvalidierung kann nicht ignoriert werden!

Obwohl sie KFold ähnelt, bleiben die Klassenproportionen jetzt in allen Teilungen und Iterationen konsistent

ShuffleSplit

Manchmal Der Prozess der Aufteilung des Trainings-/Testsatzes wird einfach mehrmals wiederholt, ganz ähnlich wie bei der Kreuzvalidierung. Validierungsprozess in genügend Iterationen. Die entsprechende Schnittstelle wird auch in der Scikit-learn-Bibliothek bereitgestellt:

from sklearn.model_selection import ShuffleSplitcross_validation = ShuffleSplit(n_splits=7, train_size=0.75, test_size=0.25)

TimeSeriesSplit

Die Bedeutung der Kreuzvalidierung kann nicht ignoriert werden!Wenn es sich bei dem Datensatz um eine Zeitreihe handelt, kann die herkömmliche Kreuzvalidierung nicht verwendet werden, was zu einer vollständigen Störung führt Um dieses Problem zu lösen, finden Sie in Sklearn einen weiteren Splitter-TimeSeriesSplit. Dies liegt daran, dass es sich bei dem Index um ein Datum handelt, was bedeutet, dass wir nicht versehentlich ein Zeitreihenmodell auf ein zukünftiges Datum trainieren und eine Vorhersage für ein früheres Datum treffen können

Kreuzvalidierung nicht unabhängiger und identisch verteilter (Nicht-IID-)Daten

Die obige Methode wird für unabhängige und identisch verteilte Datensätze verarbeitet, d. h. der Prozess der Datengenerierung wird durch andere Stichproben nicht beeinflusst

Allerdings In einigen Fällen erfüllen die Daten nicht die Bedingung der unabhängigen und identischen Verteilung (IID), d. h. zwischen einigen Stichproben besteht eine Abhängigkeitsbeziehung. Diese Situation tritt auch bei Kaggle-Wettbewerben auf, beispielsweise beim Google Brain Ventilator Pressure-Wettbewerb. Diese Daten erfassen die Luftdruckwerte der künstlichen Lunge während Tausender Atemzüge (Ein- und Ausatmen) und werden zu jedem Zeitpunkt jedes Atemzugs aufgezeichnet. Für jeden Atemvorgang gibt es etwa 80 Datenzeilen, die miteinander verknüpft sind. In diesem Fall können herkömmliche Kreuzvalidierungsmethoden nicht verwendet werden, da die Partitionierung der Daten „mitten im Atemprozess“ erfolgen kann

Dies kann als die Notwendigkeit verstanden werden, diese Daten aufgrund der internen Daten zu „gruppieren“. Gruppendaten Es hängt zusammen. Wenn beispielsweise medizinische Daten von mehreren Patienten erfasst werden, verfügt jeder Patient über mehrere Proben. Diese Daten werden jedoch wahrscheinlich durch individuelle Unterschiede zwischen Patienten beeinflusst und müssen daher auch gruppiert werden

Oft hoffen wir, dass sich ein auf eine bestimmte Gruppe trainiertes Modell gut auf andere unbekannte Gruppen übertragen lässt. Bei der Durchführung einer Kreuzvalidierung Geben Sie diesen Datengruppen „Tags“ und sagen Sie ihnen, wie sie sie unterscheiden können.

In Sklearn stehen mehrere Schnittstellen zur Verfügung, um diese Situationen zu bewältigen:

  • GroupKFold
  • StratifiedGroupKFold
  • LeaveOneGroupOut
  • LeavePGroupsOut
  • GroupShuffleSplit

Es wird dringend empfohlen, die Idee von Cross- zu verstehen. Validierung und wie es geht Um es umzusetzen, schauen Sie sich den Sklearn-Quellcode an: Keine schlechte Möglichkeit, Ihren Darm zu mästen. Darüber hinaus benötigen Sie eine klare Definition Ihres eigenen Datensatzes, und die Datenvorverarbeitung ist wirklich wichtig.

Das obige ist der detaillierte Inhalt vonDie Bedeutung der Kreuzvalidierung kann nicht ignoriert werden!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen