Ich verwende Brain , um ein neuronales Netzwerk mit einem Funktionsumfang zu trainieren, der sowohl positive als auch negative Werte enthält. Aber Brain benötigt Eingabewerte zwischen 0 und 1. Wie kann ich meine Daten am besten normalisieren?
Ich verwende Brain , um ein neuronales Netzwerk mit einem Funktionsumfang zu trainieren, der sowohl positive als auch negative Werte enthält. Aber Brain benötigt Eingabewerte zwischen 0 und 1. Wie kann ich meine Daten am besten normalisieren?
Antworten:
Dies wird als einheitsbasierte Normalisierung bezeichnet. Wenn Sie einen Vektor , können Sie eine normalisierte Version davon erhalten, z. B. Z , indem Sie Folgendes tun:
Suchen Sie die größte positive Zahl und die kleinste (negativste) Zahl im Array. Addieren Sie den absoluten Wert der kleinsten (negativsten) Zahl zu jedem Wert im Array. Teilen Sie jedes Ergebnis durch die Differenz zwischen der größten und der kleinsten Zahl.
Angenommen, Sie haben einen Vektor / ein Array von Werten v = [1, -2, 3]
minV = Math.min.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] -= minV;}
maxV = Math.max.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] /= ( maxV - minV );}
Ausgabe am Ende wird sein v = [0.6, 0, 1]
. Erläuterung:
Drücken Sie den gesamten Wertebereich, um bei 0 zu beginnen, damit wir keine Negative haben
Teilen Sie die Werte durch (max - min) des Bereichs, so dass max 1 ist
Bevor Sie dies tun, möchten Sie möglicherweise nach Ausreißern suchen. Angenommen, 99% der Daten liegen im Bereich (-5, 5), aber ein kleiner Kerl nimmt einen Wert von 25,0 an. Ihr normalisiertes Array würde sich um (0, 0,3) gruppieren, und dies würde zu Problemen beim Lernen des neuronalen Netzes führen.