Wie baue ich gute Trainings-, Validation- und Testsets für meine Machine Learning Modelle auf?
Zum Trainieren von Machine Learning Modellen benötigen wir Trainingsdaten - egal, um welche Architektur von Modellen es sich handelt. Doch wie baue ich diese Datensets am besten auf? Und wozu verwende ich Trainingsdaten, Validierungsdaten und Testdaten?
Warum benötige ich mehrere Datensets für das Training?
Stellen wir uns folgenden Fall vor: Wir möchten ein Modell bauen, dass unterscheiden kann, ob auf einem Bild eine Katze oder ein Hund abgebildet ist. Dafür haben wir 500 Bilder von Katzen und 500 Bilder von Hunden. Nun könnten wir alle 1000 Bilder in unser Trainingsset aufnehmen und unser Modell anhand dieser 1000 Bilder lernen lassen. Soweit so gut.
Doch wie messen wir den Erfolg unseres Modells?
Wir könnten jetzt wahlweise einzelne Fotos aus den Trainingsdaten verwenden und diese durch unser Modell durchschicken. Wir erhalten eine Prognose und können diese Prognose des Modells mit den tatsächlichen Werten (ground truth) vergleichen. So könnten wir feststellen, in wievielen Fällen unser Modell richtig gelegen ist und in wievielen wir eine falsche Prognose erhalten haben.
Was wir dabei aber nicht berücksichtigt haben, die Bilder aus diesem “Test-Set” hat unser Modell schon während des Trainings gesehen. Wir können also nicht mit letztgültiger Sicherheit sagen, wie das Modell auf vollständig unbekannte Bilder reagieren würde.
Und wie bewerten wir den Trainingserfolg während des Trainings?
Rufen wir uns nochmals den Prozess des Trainierens eines Machinelearning Modells hervor. Unser Modell bekommt Inputs gemeinsam mit den Parametern (bzw. Weights) und errechnet daraus seine Ergebnisse bzw. Prognosen. Nun muss das Modell jedoch evaluieren, wie gut diese Prognosen waren, um im nächsten Schrtt die Parameter anpassen zu können.
Dafür benötigen wir nun auch wieder ein “Test-Datenset”, auf das wir nach einem Trainingsdurchlauf zugreifen können. Auch hierfür wollen wir Daten verwenden, die das Modell während des Trainings noch nicht gesehen hat.
Diese Inputs aus dem Validationset dürfen jedoch nach Abschluss des Trainings nicht im Testset auftauchen. Denn nur so kann mit dem Testset tatsächlich unabhängig die Performance des Modell geprüft werden.
Training- / Validationsplit
Um also stabile Modelle bauen zu können, teilen wir die Daten zumindest in ein Trainingsset und ein Validierungsset (Training-/ Validationsplit). Das Verhältnis von Trainings- zu Validationdaten wird in der Literatur in der Regel mit 80 zu 20 Prozent angegeben - muss jedoch an das individuelle Modell und die vorhandenen Daten angepasst werden.
Durch die Verwendung von eigenen Trainings- und Validationdatensets können wir vermeiden, dass unser Modell die Trainingsdaten “auswendig” lernt und so reine Zuordnung memorisiert (z.B. “das dritte Bild ist eine Katze”), ohne tatsächlich die Merkmale von Hunden oder Katzen zu lernen. Wir können dies mit dem Lernen von Vokabeln vergleichen. Lernen wir die Vokabel immer in der gleichen Reihenfolge, so werden wir diese nach kurzer Zeit gut aufzählen können, sollen wir jedoch eine Übersetzung wiedergeben, fällt diese Aufgabenstellung umso schwerer.
Das Testdatenset
Nun können wir noch zusätzlich (ca. 10% der Daten) als optionales Testdatenset vorhalten. Nachdem der Trainingsprozess unseres Modells abgeschlossen ist, können wir mit dem Testdatenset feststellen, wie gut unser Modell auf Daten reagiert, die es noch nie gesehen hat.
Doch nicht nur bei der Entwicklung von eigenen Modellen für künstliche Intelligenz kann ein Testdatenset wertvoll sein. Auch wenn externe Dienstleister mit der Entwicklung von Machine Learning Modellen beauftragt werden, kann ich anhand der zurückgehaltenen Testdaten die Performance des eingekauften Modells völlig unabhängig testen.
Auswahl von Validation- bzw. Testdatensets
Wie wähle ich nun jene Datensätze aus meiner Gesamtmenge aus, die in das Datenset für die Validierung bzw. die Tests meine Machinelearning Modells fließen?
Dies hängt stark von den Ausgangsdaten ab. Allgemein werde ich immer eine randomisierte Auswahl treffen. Doch ist das Zufallsprinzip nicht in allen Situationen vorteilhaft. Insbesondere bei Zeitreihendaten kann eine zufällige Auswahl der Validierungsdaten nicht das gewünschte Ergebnis bringen.
Sehen wir uns etwas folgende Daten einer fiktiven Umsatzprognose an:
Wählen wir nun zufällige Datensätze für unser Testset aus, so könnte die Auswahl z.B. so aussehen:
Diese zufällige Auswahl ist bei Zeitreihendaten ausgesprochen ungünstig, da wir ja ein Modell brauchen, das die Daten für die Zukunft vorhersagt und nicht den Umsatz vom letzten Jahr prognostiziert. Aus diesem Grund sollten wir bei zeitlich voneinander abhängigen Daten immer die aktuellsten 10% Prozent der Daten in das Testset aufnehmen.
Unsere Umsatzdaten könnten dann nach dem Training-Test-Split etwa so aussehen: