Jak znormalizować dane między -1 a 1?

36

Widziałem formułę normalizacji min-max, ale normalizuje ona wartości od 0 do 1. W jaki sposób normalizowałbym moje dane od -1 do 1? Mam zarówno ujemne, jak i dodatnie wartości w mojej macierzy danych.

Covfefe
źródło
1
Jeśli pracujesz w R, zobacz ten wątek, aby uzyskać kilka opcji. W szczególności komentarz do zaakceptowanej odpowiedzi ma tę funkcję, w której ustawiasz „newMax” na 1, a „newMin” na -1 i uruchamiasz funkcję na swoich danych
mtreg
Referencje w Wikipedii można znaleźć w następujący sposób: en.wikipedia.org/wiki/Normalization_(statistics)
salem
Przykład Javascript, wzięty stąd . funkcja convertRange (wartość, r1, r2) {return (wartość - r1 [0]) * (r2 [1] - r2 [0]) / (r1 [1] - r1 [0]) + r2 [0]; } convertRange (328,17, [300,77, 559,22], [1, 10]); >>> 1.9541497388276272
Giuseppe Canale
1
@covfefe, jeśli nadal jesteś w pobliżu, możesz zaakceptować jedną z odpowiedzi
Simone

Odpowiedzi:

97

Za pomocą: normalizujesz swoją funkcję x w [0,1] .

x=xminxmaxxminx
x[0,1]

Aby normalizować w [1,1] , możesz użyć:

x=2xminxmaxxminx1

Ogólnie rzecz biorąc, zawsze możesz uzyskać nową zmienną x w [a,b] :

x=(ba)xminxmaxxminx+a
Simone
źródło
15
Szczerze mówiąc, nie mam na to cytatów. Jest to po prostu liniowa transformacja zmiennej losowej. Zobacz wpływ transformacji liniowych na obsługę zmiennej losowej.
Simone,
-1

Testowałem na losowo generowanych danych i

Xout=(ba)XinminXinmaxXinminXin+a

nie zachowuje kształtu rozkładu. Naprawdę chciałbym zobaczyć prawidłowe wyprowadzenie tego przy użyciu funkcji zmiennych losowych.

Podejście, które zachowało dla mnie ten kształt, polegało na:

Xout=Xinμinσinσout+μout

gdzie

σout=ba6

(Przyznaję, że używanie 6 jest trochę brudne ) i

μout=b+a2

i

ai jest pożądany zakres; tak jak w oryginalnym powinno wynosić i .ba=1b=1

Doszedłem do wyniku tego rozumowania

Zout=Zin

Xoutμoutσout=Xinμinσin

AL Verminburger
źródło
3
Czy jesteś pewien, że gwarantuje to, że przekształcone dane znajdą się w granicach? W R, spróbuj: set.seed(1); scale(rnorm(1000))*.333. Dostaję maksimum 1.230871. Wydaje się, że twoja metoda to tylko drobna poprawa standaryzacji danych, zamiast normalizacji ich zgodnie z żądaniami. Zauważ, że pytanie nie wymaga metody, która zachowuje kształt rozkładu (co byłoby dziwnym wymogiem normalizacji).
gung - Przywróć Monikę
3
Nie jestem pewien, jak oryginalna transformacja mogłaby nie zachować kształtu danych. Odpowiada to odjęciu stałej, a następnie podzieleniu przez stałą, co robi twoja propozycja i która nie zmienia kształtu danych. Twoja propozycja zakłada, że ​​wszystkie dane mieszczą się w trzech standardowych odchyleniach średniej, co może być nieco uzasadnione w przypadku małych, w przybliżeniu normalnie rozłożonych próbek, ale nie w przypadku dużych lub niestandardowych próbek.
Noah
1
@Nieah Nie jest to równoważne z odejmowaniem i dzieleniem przez stałe, ponieważ min. I maks. Danych są zmiennymi losowymi. Rzeczywiście, w przypadku większości podstawowych dystrybucji są one dość zmienne - bardziej zmienne niż reszta danych - skąd użycie ich do jakiejkolwiek formy standaryzacji zwykle nie jest dobrym pomysłem. W tej odpowiedzi nie jest jasne, co i średni lub w jaki sposób może być związane z danymi. ab
whuber
2
@ whuber prawda, ale miałem na myśli, że w danym zestawie danych (tj. traktując dane jako stałe) są one stałymi, w taki sam sposób, jak średnia próbki i przykładowe odchylenie standardowe działają jako stałe podczas standaryzacji zestawu danych. Mam wrażenie, że OP chciał znormalizować zestaw danych, a nie dystrybucję.
Noah
@ Nie, miałem takie samo wrażenie, ale uważam, że obecny post może odpowiadać na inną interpretację.
whuber