Wie skaliere ich ein Array vorzeichenbehafteter Ganzzahlen im Bereich von 0 bis 1?

13

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?

Jonathan Shobrook
quelle

Antworten:

23

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:XZ

Z=Xmin(X)max(X)min(X)
stochazesthai
quelle
1
Dieser Ansatz wird auch als Min-Max-Normalisierung bezeichnet (da wir
Min-
Ist es in Ordnung, diese Methode zu verwenden, um einen Wert zu normalisieren, der den Prozentsatz darstellt und negativ sein kann, aber immer höher als -2% und niedriger als 30% ist? Wird es für ein neuronales Netzwerk nicht schwieriger sein, den Hinweis auf die Wertbedeutung zu erhalten, wenn ich es auf diese Weise normalisiere?
Ivan
3

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.

mcduffee
quelle
@ Jonathan: Es spielt keine Rolle, solange beide Werte aus demselben Array stammen, original oder aktualisiert. Da jedem Wert dieselbe Zahl hinzugefügt wird, bleibt die Differenz zwischen Minimum und Maximum gleich.
RemcoGerlich
1

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:

  1. Drücken Sie den gesamten Wertebereich, um bei 0 zu beginnen, damit wir keine Negative haben

  2. Teilen Sie die Werte durch (max - min) des Bereichs, so dass max 1 ist

device_exec
quelle
1

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.

horaceT
quelle