In der Praxis arbeiten Datenwissenschaftler mit drei unterschiedlichen Beispielsätzen:
- Trainingsset
- Validierungssatz
- Testsatz
Sobald Sie die Daten in Kind einer Sammlung von Beispielen erhalten haben, ist das Erste, was Sie in Ihrem maschinellen Lernprojekt tun, die Beispiele zu mischen und den Datensatz in drei verschiedene Sätze aufzuteilen: Coaching, Validierung und Take a look at. Der Trainingssatz ist normalerweise der größte; Der Lernalgorithmus verwendet den Trainingssatz, um das Modell zu erstellen. Die Validierungs- und Testsätze sind ungefähr gleich groß und viel kleiner als die Größe des Trainingssatzes. Das Lernen
Der Algorithmus darf keine Beispiele aus den Validierungs- oder Testsätzen verwenden, um das Modell zu trainieren. Deshalb werden diese beiden Mengen auch Holdout-Units genannt.
Wenn Sie nur wenige Trainingsbeispiele haben, kann es unerschwinglich sein, sowohl Validierungs- als auch Testsätze zu haben. Sie möchten lieber mehr Daten zum Trainieren des Modells verwenden. In einem solchen Fall sollten Sie Ihre Daten nur in zwei Teile aufteilen: ein Coaching und einen Take a look at. Verwenden Sie dann die Kreuzvalidierung des Trainingssatzes, um einen Validierungssatz zu simulieren.
Kreuzvalidierung
Bevor wir ein Modell für maschinelles Lernen erstellen, müssen wir wissen, was Kreuzvalidierung ist und wie wir abhängig von Ihren Datensätzen die beste Modellvalidierung auswählen.
Was ist additionally eine Kreuzvalidierung?
Meine einzeilige Definition lautet:
Kreuzvalidierung ist eine Technik, um die Generalisierungsfähigkeit eines Modells zu bewerten und fundierte Entscheidungen über seine Leistung zu treffen, bevor es in Produktion geht.
Wann sollte eine Kreuzvalidierung verwendet werden?
Es hilft bei der Bewertung von Modellen in Situationen, in denen nur begrenzte Daten vorhanden sind oder wenn zuverlässige Leistungsschätzungen erforderlich sind, bevor das Modell auf unsichtbare Daten angewendet wird.
Wir können mehrere Definitionen dafür finden, was Kreuzvalidierung ist. Eine andere Definition, die mir gefällt, ist:
Die Kreuzvalidierung ist ein Schritt im Prozess der Erstellung eines Modells für maschinelles Lernen, der uns dabei hilft, sicherzustellen, dass unsere Modelle zu den Daten passen, und auch sicherstellt, dass wir keine Überanpassungen vornehmen.
Aber das führt zu einem anderen Begriff: Überanpassung.
Überanpassung bedeutet, dass das Modell die Trainingsdaten intestine lernt, aber nicht auf unsichtbare Stichproben verallgemeinert.
Es gibt viele verschiedene Möglichkeiten, eine Kreuzvalidierung durchzuführen, und sie ist der wichtigste Schritt, wenn es darum geht, ein gutes Modell für maschinelles Lernen zu erstellen, das verallgemeinerbar ist, wenn es um unsichtbare Daten geht. Die Auswahl der richtigen Kreuzvalidierung hängt von dem Datensatz ab, mit dem Sie arbeiten, und die Wahl der Kreuzvalidierung für einen Datensatz kann für andere Datensätze gelten oder auch nicht. Es gibt jedoch einige Arten von Kreuzvalidierungstechniken, die am beliebtesten und am weitesten verbreitet sind.
Diese beinhalten:
– k-fache Kreuzvalidierung
– geschichtete k-fache Kreuzvalidierung
– Maintain-out-basierte Validierung
– Eine einmalige Kreuzvalidierung weglassen
– Gruppen-k-fache Kreuzvalidierung
Wie funktioniert die k-fache Kreuzvalidierung?
Bei der Kreuzvalidierung werden Trainingsdaten in einige Teile unterteilt. Wir trainieren das Modell an einigen dieser Teile und testen es an den übrigen Teilen. Schauen Sie sich Abbildung 3 an.
Abbildung 3 und 4 zeigen, dass Sie, wenn Sie einen Datensatz zum Erstellen von Modellen für maschinelles Lernen erhalten, diese in zwei verschiedene Sätze unterteilen: Coaching und Validierung. Wie Sie sehen, teilen wir die Stichproben und die damit verbundenen Ziele auf. Wir können die Daten in okay verschiedene Sätze aufteilen, die sich gegenseitig ausschließen. Dies ist bekannt als k-fache Kreuzvalidierung.
Beginnen wir mit dem Codieren.
# Obtain the information
! wget https://uncooked.githubusercontent.com/amit-timalsina/model-validation-tutorial/grasp/datasets/winequality-red.csv winequality.csv
Schauen wir uns an, wie diese Daten aussehen:
import pandas as pd
df = pd.read_csv("winequality-red.csv")
Dieser Datensatz sieht in etwa so aus:
Es gibt einen Datensatz zur Rotweinqualität, der ziemlich berühmt ist. Dieser Datensatz enthält 11 verschiedene Attribute, die über die Qualität von Rotwein entscheiden. Zu diesen Attributen gehören: fester Säuregehalt, flüchtiger Säuregehalt, Zitronensäure, Restzucker, Chloride, freies Schwefeldioxid, Gesamtschwefeldioxid, Dichte, pH-Wert, Sulfate und Alkohol.
Basierend auf diesen verschiedenen Attributen müssen wir die Qualität von Rotwein vorhersagen, deren Wert zwischen 0 und 10 liegt.
Der Einfachheit halber wählen wir dieses Drawback als Klassifizierungsproblem. Dieser Datensatz besteht jedoch nur aus sechs Arten von Qualitätswerten. Wir werden daher alle Qualitätswerte von 0 bis 5 abbilden.
# a mapping dictionary that maps the standard values from 0 to five
quality_mapping = {
3: 0,
4: 1,
5: 2,
6: 3,
7: 4,
8: 5
}
# you should use the map operate of pandas with
# any dictionary to transform the values in a given
# column to values within the dictionary
df.loc[:, "quality"] = df.high quality.map(quality_mapping)
Mit KFold von scikit-learn können wir beliebige Daten in k-gleiche Teile aufteilen. Bei Verwendung der k-fachen Kreuzvalidierung wird jeder Stichprobe ein Wert von 0 bis k-1 zugewiesen.
# We create a brand new column referred to as kfold and fill it with -1
df_0["kfold"] = -1# the following step is to randomize the rows of the information
df_0 = df_0.pattern(frac=1).reset_index(drop=True)
# provoke the kfold class from model_selection module
kf = model_selection.KFold(n_splits=5)
# fill the brand new kfold column
for fold, (trn_, val_) in enumerate(kf.cut up(X=df_0)):
df_0.loc[val_, "kfold"] = fold
Sie können diesen Prozess mit quick allen Arten von Datensätzen verwenden: Bilder, Textual content usw.
Wenn Sie beispielsweise über Bilder verfügen, können Sie eine CSV-Datei mit Bild-ID, Bildspeicherort und Bildbezeichnung erstellen und den oben beschriebenen Vorgang verwenden.
Wie funktioniert die geschichtete k-fache Kreuzvalidierung?
Die nächste wichtige Artwork der Kreuzvalidierung ist die geschichtete k-Faltung. Wenn Sie einen verzerrten Datensatz für die binäre Klassifizierung mit 90 % positiven Stichproben und nur 10 % negativen Stichproben haben, möchten Sie keine zufällige k-fache Kreuzvalidierung verwenden. Die Verwendung einer einfachen k-fachen Kreuzvalidierung für einen Datensatz wie diesen kann zu Faltungen mit allen negativen Stichproben führen. In diesen Fällen bevorzugen wir die Verwendung einer geschichteten k-fachen Kreuzvalidierung. Durch die geschichtete k-fache Kreuzvalidierung bleibt das Verhältnis der Markierungen in jeder Falte konstant. Sie erhalten additionally in jeder Falte die gleichen 90 % positiven und 10 % negativen Proben. Unabhängig davon, welche Metrik Sie zur Auswertung wählen, werden auf allen Ebenen ähnliche Ergebnisse erzielt.
Es ist einfach, den Code zum Erstellen einer Okay-Falten-Kreuzvalidierung zu ändern, um geschichtete Okay-Falten zu erstellen. Wir wechseln nur von model_selection.KFold zu
model_selection.StratifiedKFold und in der Funktion kf.cut up(…) geben wir die Zielspalte an, auf der wir stratifizieren möchten. Wir gehen davon aus, dass unser CSV-Datensatz eine Spalte namens „Ziel“ hat und es sich um ein Klassifizierungsproblem handelt!
# We create a brand new column referred to as kfold and fill it with -1
df_1["kfold"] = -1# the following step is to randomize the rows of the information
df_1 = df.pattern(frac=1).reset_index(drop=True)
# fetch targets
y = df_1.high quality.values
# provoke the StratifiedKFold class from model_selection module
kf = model_selection.StratifiedKFold(n_splits=5)
# fill the brand new kfold column
for fold, (trn_, val_) in enumerate(kf.cut up(X=df_1, y=y)):
df_1.loc[val_, "kfold"] = fold
Schauen wir uns für den Weindatensatz die Verteilung der Etiketten an.
b = sns.countplot(x='high quality', knowledge=df)
b.set_xlabel("high quality", fontsize=20)
b.set_ylabel("rely", fontsize=20)
Beachten Sie, dass wir mit dem obigen Code fortfahren. Daher haben wir die Zielwerte umgerechnet. Wenn wir uns Abbildung 6 ansehen, können wir sagen, dass die Qualität sehr stark verzerrt ist. Einige Klassen haben viele Beispiele, andere nicht so viele. Wenn wir eine einfache k-Faltung durchführen, werden wir nicht in jeder Falte eine gleiche Verteilung der Ziele haben. Daher wählen wir in diesem Fall die geschichtete k-Faltung.
Unten sehen Sie die Verteilung der Etiketten in allen Falzen bei Verwendung der Okay-Faltung. Wir können sehen, dass das Verteilungsverhältnis nicht mit dem ursprünglichen df übereinstimmt.
Aber wie Sie unten sehen können, entspricht das Verteilungsverhältnis bei Verwendung der geschichteten k-Faltung genau dem ursprünglichen df.
Die Regel ist einfach. Wenn es sich um ein Standardklassifizierungsproblem handelt, wählen Sie blind die geschichtete k-Falte aus.
Wie funktioniert die Maintain-out-Kreuzvalidierung?
Aber was sollen wir tun, wenn wir eine große Datenmenge haben? Angenommen, wir haben 1 Million Proben. Eine 5-fache Kreuzvalidierung würde ein Coaching an 800.000 Proben und eine Validierung an 200.000 bedeuten. Je nachdem, welchen Algorithmus wir wählen, können das Coaching und sogar die Validierung für einen Datensatz dieser Größe sehr teuer sein. In diesen Fällen können wir uns für eine Maintain-out-basierte Validierung entscheiden.
Der Holdout-Satz muss repräsentativ für die Eingaben sein, die das Modell bei der Produktion sehen wird.
Der Prozess zum Erstellen des Maintain-Outs bleibt derselbe wie bei der geschichteten Okay-Faltung. Für einen Datensatz mit 1 Million Stichproben können wir zehn Falten statt fünf erstellen und eine dieser Falten als Maintain-out behalten. Das bedeutet, dass wir 100.000 Samples im Maintain-out haben werden, und wir werden immer Verlust, Genauigkeit und andere Metriken für diesen Satz berechnen und auf 900.000 Samples trainieren.
Maintain-out wird auch sehr häufig verwendet Zeitreihendaten. Nehmen wir an, das Drawback, mit dem wir konfrontiert werden, besteht darin, die Umsätze eines Ladens für das Jahr 2020 vorherzusagen, und Sie erhalten alle Daten von 2015 bis 2019. In diesem Fall können Sie alle Daten für 2019 als Maintain-Out auswählen und Ihr Modell auf allen Daten von 2015 bis 2018 trainieren.
Nehmen wir in dem in Abbildung 9 dargestellten Beispiel an, dass unsere Aufgabe darin besteht, die Verkäufe von Zeitschritt 31 bis 40 vorherzusagen. Dann können wir 21 bis 30 als Maintain-out beibehalten und unser Modell von Schritt 0 bis Schritt 20 trainieren. Das sollten Sie beachten Wenn Sie 31 bis 40 vorhersagen, sollten Sie die Daten von 21 bis 30 in Ihr Modell einbeziehen. andernfalls wird die Leistung unterdurchschnittlich sein.
Wie funktioniert die einmalige Kreuzvalidierung?
In vielen Fällen müssen wir mit kleinen Datensätzen umgehen, und die Erstellung großer Validierungssätze bedeutet, dass viele Daten verloren gehen, damit das Modell lernen kann. In diesen Fällen können wir uns für eine Artwork k-fache Kreuzvalidierung entscheiden, bei der okay=N ist, wobei N die Anzahl der Stichproben im Datensatz ist. Das bedeutet, dass wir in allen Trainingsfalten mit allen Datenproben außer 1 trainieren. Die Anzahl der Falten für diese Artwork der Kreuzvalidierung ist dieselbe wie die Anzahl der Proben, die wir im Datensatz haben.
Man sollte beachten, dass diese Artwork der Kreuzvalidierung im Hinblick auf den Zeitaufwand kostspielig sein kann, wenn das Modell nicht schnell genug ist. Da diese Kreuzvalidierung jedoch nur für kleine Datensätze vorzuziehen ist, spielt sie keine große Rolle.