Jak skalować tablicę liczb całkowitych ze znakiem od 0 do 1?

Odpowiedzi:

24

Nazywa się to normalizacją opartą na jedności. Jeśli masz wektor , możesz uzyskać jego znormalizowaną wersję, powiedzmy , wykonując:ZXZ

Z=Xmin(X)max(X)min(X)
stochazesthai
źródło
1
To podejście jest również znane jako normalizacja min-maks. (Ponieważ używamy wartości min i maks.)
Shagun Sodhani
Czy można użyć tej metody do normalizacji wartości, która reprezentuje procent i może być ujemna, ale zawsze wyższa niż -2% i mniejsza niż 30%? Czy sieci neuronowej nie będzie trudniej uzyskać wskazówkę dotyczącą wartości, jeśli znormalizuję ją w ten sposób?
Ivan
3

Znajdź największą liczbę dodatnią i najmniejszą (najbardziej ujemną) w tablicy. Dodaj wartość bezwzględną najmniejszej (najbardziej ujemnej) liczby do każdej wartości w tablicy. Podziel każdy wynik przez różnicę między największą i najmniejszą liczbą.

McDuffee
źródło
@Jathanathan: nie ma znaczenia, o ile obie wartości pochodzą z tej samej tablicy, oryginalnej lub zaktualizowanej. Ponieważ do każdej wartości dodawana jest ta sama liczba, różnica między minimum a maksimum pozostaje taka sama.
RemcoGerlich
1

powiedzmy, że masz wektor / tablicę wartości 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 );}

Wyjście na końcu będzie v = [0.6, 0, 1]. Wyjaśnienie:

  1. Przesuwamy cały zakres wartości, aby zacząć od 0, abyśmy nie mieli negatywów

  2. Dzieląc wartości przez (max - min) zakresu, tak aby max wynosił 1

device_exec
źródło
1

Zanim to zrobisz, możesz sprawdzić wartości odstające. Powiedzmy, że 99% danych mieści się w zakresie (-5, 5), ale jeden mały facet przyjmuje wartość 25,0. Twoja znormalizowana tablica skupiałaby się wokół (0, 0,3), co spowodowałoby problem w nauce sieci neuronowej.

horaceT
źródło