2016-04-25 13 views
0

Ich habe ein Trainingsdatensatz der Größe NxD und einen Testdatensatz der Größe AxD. Die Zeilen sind die Datenpunkte und die Spalten sind die Features.Normalisieren von Daten zu [-1, 1] Bereich

Jetzt möchte ich jedes Feature (Spalte) in den Bereich [-1, 1] transformieren. Darüber hinaus sollte die Skalierung der Merkmale in dem Testsatz mit den auf dem Trainingssatz geschätzten Parametern durchgeführt werden. Wenn ich zum Beispiel die Standardisierung durch Subtrahieren des Mittelwerts und Dividieren der Standardabweichung durchführe, würde ich den Mittelwert und die Standardabweichung auf dem Trainingssatz berechnen und sie verwenden, um den Testsatz zu standardisieren. Das gleiche möchte ich nun für die Skalierung auf den Bereich [-1, 1] tun.

Wie kann das gemacht werden?

Antwort

2

Etwas wie folgt aus:

mins = min(trainingDataset); 
maxs = max(trainingDataset); 
testDataset = 2*bsxfun(@rdivide, bsxfun(@minus,testDataset,mins), maxs-mins)-1; 
+0

Etwas scheint nicht funktioniert zu. Wenn ich trainingDataset = rand (5,5) erstelle und dann benutze deine Funktion, um das TrainingDataset auf [-1,1] zu skalieren, werden Einträge mit verschiedenen Werten auf -1 bzw. 1 gemappt. – machinery

+0

Ich bin mir nicht sicher, ob ich verstehe, was Sie sagen, das Problem ist, was darauf hindeutet, dass ich missverstanden habe, was Sie wollten. Was ich dachte, du wolltest: Jede Spalte in 'testDataset' (die die Werte eines Merkmals über mehrere Datenpunkte hinweg darstellt) soll so normalisiert werden, dass die Min- und Max-Werte der entsprechenden Spalte in' trainingDataset' zu -1 und + werden 1. –

+0

Also was mein Code tun soll (es könnte natürlich einen Fehler haben) ist: berechne zuerst die Min- und Max-Werte der Spalten in 'trainingDataset' (so machen die ersten zwei Zeilen; sie sollten zwei Zeilenvektoren geben, mit jeweils einem Eintrag pro Merkmal). Dann nimm 'testDataset', subtrahiere die Minuten von jeder Spalte (das ist der innere' bsxfun' Aufruf), dividiere jede Spalte mit dem entsprechenden 'max-min' (das ist der äußere' bsxfun' Aufruf) - soweit wir es zuordnen die Extremwerte von 'testDataset' zu [0,1] - und transformiere das dann mit x-> 2x-1, um stattdessen [-1, + 1] zu erhalten. –