Ich verwende diese Bibliothek , um einen Lernagenten zu implementieren.
Ich habe die Trainingsfälle generiert, weiß aber nicht genau, wie die Validierungs- und Testsätze lauten.
Der Lehrer sagt:
70% sollten Zugfälle sein, 10% werden Testfälle sein und der Rest 20% sollten Validierungsfälle sein.
bearbeiten
Ich habe diesen Code für das Training, aber ich habe keine Ahnung, wann ich mit dem Training aufhören soll .
def train(self, train, validation, N=0.3, M=0.1):
# N: learning rate
# M: momentum factor
accuracy = list()
while(True):
error = 0.0
for p in train:
input, target = p
self.update(input)
error = error + self.backPropagate(target, N, M)
print "validation"
total = 0
for p in validation:
input, target = p
output = self.update(input)
total += sum([abs(target - output) for target, output in zip(target, output)]) #calculates sum of absolute diference between target and output
accuracy.append(total)
print min(accuracy)
print sum(accuracy[-5:])/5
#if i % 100 == 0:
print 'error %-14f' % error
if ? < ?:
break
bearbeiten
Ich kann mit Validierungsdaten einen durchschnittlichen Fehler von 0,2 erhalten, nach vielleicht 20 Trainingsiterationen sollte das 80% sein?
durchschnittlicher Fehler = Summe der absoluten Differenz zwischen Validierungsziel und -ausgabe unter Berücksichtigung der Eingabe / Größe der Validierungsdaten.
1
avg error 0.520395
validation
0.246937882684
2
avg error 0.272367
validation
0.228832420879
3
avg error 0.249578
validation
0.216253590304
...
22
avg error 0.227753
validation
0.200239244714
23
avg error 0.227905
validation
0.199875013416
Antworten:
Die Trainings- und Validierungssätze werden während des Trainings verwendet.
Sobald Sie mit dem Training fertig sind, laufen Sie gegen Ihren Testsatz und überprüfen, ob die Genauigkeit ausreichend ist.
Trainingssatz : Dieser Datensatz wird verwendet, um die Gewichte im neuronalen Netzwerk anzupassen.
Validierungssatz : Dieser Datensatz wird verwendet, um eine Überanpassung zu minimieren. Sie passen die Gewichte des Netzwerks mit diesem Datensatz nicht an, sondern überprüfen lediglich, ob eine Erhöhung der Genauigkeit gegenüber dem Trainingsdatensatz tatsächlich zu einer Erhöhung der Genauigkeit gegenüber einem Datensatz führt, der dem Netzwerk zuvor nicht angezeigt wurde. oder zumindest hat das Netzwerk nicht darauf trainiert (dh Validierungsdatensatz). Wenn die Genauigkeit über den Trainingsdatensatz zunimmt, die Genauigkeit über den Validierungsdatensatz jedoch gleich bleibt oder abnimmt, passen Sie Ihr neuronales Netzwerk an und sollten das Training beenden.
Testsatz : Dieser Datensatz wird nur zum Testen der endgültigen Lösung verwendet, um die tatsächliche Vorhersagekraft des Netzwerks zu bestätigen.
quelle
validation set
noch dastest set
verwendet, um die Gewichte des neuronalen Netzwerks abzustimmen. Warum können Sie nicht denselben Datensatz verwenden, der nicht zum Trainieren der Gewichte verwendet wird, wie dasvalidation set
undtest set
? Was bringt es, sie getrennt zu halten?Aus dem Abschnitt ftp://ftp.sas.com/pub/neural/FAQ1.txt " Was sind Population, Stichprobe, Trainingssatz, Entwurfssatz, Validierung? "
Die Fehleroberfläche unterscheidet sich für verschiedene Datensätze von Ihrem Datensatz (Batch-Lernen). Wenn Sie daher sehr gute lokale Minima für Ihre Testsatzdaten finden, ist dies möglicherweise kein sehr guter Punkt und möglicherweise ein sehr schlechter Punkt in der Oberfläche, der von einem anderen Datensatz für dasselbe Problem generiert wird. Daher müssen Sie ein solches Modell berechnen, das nicht nur eine gute Gewichtskonfiguration für den Trainingssatz findet, sondern auch in der Lage sein sollte, neue Daten (die nicht im Trainingssatz enthalten sind) mit guten Fehlern vorherzusagen. Mit anderen Worten, das Netzwerk sollte in der Lage sein, die Beispiele so zu verallgemeinern , dass es die Daten lernt und sich nicht einfach an den Trainingssatz erinnert oder diesen lädt, indem es die Trainingsdaten überpasst.
Der Validierungsdatensatz ist ein Datensatz für die Funktion, die Sie lernen möchten und die Sie nicht direkt zum Trainieren des Netzwerks verwenden. Sie trainieren das Netzwerk mit einem Datensatz, den Sie als Trainingsdatensatz bezeichnen. Wenn Sie zum Trainieren des Netzwerks einen gradientenbasierten Algorithmus verwenden, hängen die Fehleroberfläche und der Gradient zu einem bestimmten Zeitpunkt vollständig vom Trainingsdatensatz ab, sodass der Trainingsdatensatz direkt zum Anpassen der Gewichte verwendet wird. Um sicherzustellen, dass Sie das Netzwerk nicht überladen, müssen Sie den Validierungsdatensatz in das Netzwerk eingeben und prüfen, ob der Fehler in einem bestimmten Bereich liegt. Da der Validierungssatz nicht direkt zum Anpassen der Gewichte des Netzwerks verwendet wird, zeigt ein guter Fehler für die Validierung und auch den Testsatz an, dass das Netzwerk für die Zugsatzbeispiele gute Vorhersagen macht.
Frühes Anhalten ist eine Möglichkeit, das Training abzubrechen. Es stehen verschiedene Variationen zur Verfügung. Der Hauptgrund ist, dass sowohl der Zug- als auch der Validierungssatzfehler überwacht werden, der Zugfehler bei jeder Iteration abnimmt (Backprop und Brüder) und zunächst der Validierungsfehler abnimmt. Das Training wird abgebrochen, sobald der Validierungsfehler zu steigen beginnt. Die Gewichtskonfiguration an diesem Punkt zeigt ein Modell an, das die Trainingsdaten sowie die Daten gut vorhersagt die vom Netzwerk nicht gesehen werden . Sondern weil die Validierungsdaten tatsächlichwirkt sich indirekt auf die Gewichtskonfiguration aus, um die Gewichtskonfiguration auszuwählen. Hier kommt der Testsatz ins Spiel. Dieser Datensatz wird im Trainingsprozess nie verwendet. Sobald ein Modell basierend auf dem Validierungssatz ausgewählt wurde, werden die Testsatzdaten auf das Netzwerkmodell angewendet und der Fehler für diesen Satz gefunden. Dieser Fehler ist ein Vertreter des Fehlers, den wir von absolut neuen Daten für dasselbe Problem erwarten können.
BEARBEITEN:
Falls Sie nicht genügend Daten für einen Validierungssatz haben, können Sie die Kreuzvalidierung verwenden , um die Parameter zu optimieren und den Testfehler abzuschätzen.
quelle
Der Kreuzvalidierungssatz wird für die Modellauswahl verwendet. Wählen Sie beispielsweise das Polynommodell mit der geringsten Fehleranzahl für einen bestimmten Parametersatz aus. Der Testsatz wird dann verwendet, um den Generalisierungsfehler für das ausgewählte Modell zu melden. Von hier aus: https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets
quelle
Wir erstellen einen Validierungssatz für
Warum wurde ein Validierungssatz verwendet :
quelle
Angenommen, Sie trainieren ein Modell an einem Trainingssatz und messen dann seine Leistung an einem Testsatz. Sie denken, dass noch Verbesserungspotenzial besteht, und Sie versuchen, die Hyperparameter zu optimieren (Wenn das Modell ein neuronales Netzwerk ist - Hyperparameter sind die Anzahl der Ebenen oder Knoten in den Ebenen). Jetzt erhalten Sie eine etwas bessere Leistung. Wenn das Modell jedoch anderen Daten ausgesetzt wird (nicht im Test- und Trainingssatz enthalten), erhalten Sie möglicherweise nicht die gleiche Genauigkeit. Dies liegt daran, dass Sie beim Optimieren der Hyperparameter eine gewisse Verzerrung eingeführt haben, um eine bessere Genauigkeit des Testsatzes zu erzielen. Sie haben das Modell und die Hyperparameter grundsätzlich angepasst, um das beste Modell für diesen bestimmten Trainingssatz zu erstellen.
Eine übliche Lösung besteht darin, den Trainingssatz weiter aufzuteilen, um einen Validierungssatz zu erstellen . Jetzt hast du
Sie gehen wie zuvor vor, verwenden jedoch diesmal den Validierungssatz, um die Leistung zu testen und die Hyperparameter zu optimieren. Insbesondere trainieren Sie mehrere Modelle mit verschiedenen Hyperparametern für den reduzierten Trainingssatz (dh den vollständigen Trainingssatz abzüglich des Validierungssatzes) und wählen das Modell aus, das für den Validierungssatz am besten geeignet ist.
Sobald Sie das Modell mit der besten Leistung im Validierungssatz ausgewählt haben, trainieren Sie das Modell mit der besten Leistung im gesamten Trainingssatz (einschließlich des Validierungssatzes). Auf diese Weise erhalten Sie das endgültige Modell.
Zuletzt bewerten Sie dieses endgültige Modell im Testsatz, um eine Schätzung des Generalisierungsfehlers zu erhalten.
quelle
Trainingsdatensatz : Die Stichprobe von Daten, die zur Anpassung an das Modell verwendet wurden.
Validierungsdatensatz : Die Stichprobe von Daten, die verwendet wird, um eine unvoreingenommene Bewertung eines Modells zu erhalten, das in den Trainingsdatensatz passt, während Modellhyperparameter optimiert werden. Die Bewertung wird voreingenommener, wenn die Fähigkeiten des Validierungsdatensatzes in die Modellkonfiguration einbezogen werden.
Testdatensatz : Die Stichprobe von Daten, die verwendet werden, um eine unvoreingenommene Bewertung einer endgültigen Modellanpassung für den Trainingsdatensatz bereitzustellen.
quelle
In einfachen Worten definieren Sie Trainingssatz, Testsatz, Validierungssatz
Trainingsset: Wird verwendet, um die nächsten Nachbarn zu finden. Validierungssatz: Dient zum Finden eines anderen k, das für den Zugsatz gilt. Testsatz: Wird verwendet, um in Zukunft die maximale Genauigkeit und unsichtbare Daten zu ermitteln.
quelle