Chcę reprezentować zmienną jako liczbę z przedziału od 0 do 1. Zmienna jest nieujemną liczbą całkowitą bez nieodłącznego wiązania. Odwzorowuję 0 na 0, ale co mogę odwzorować na 1 lub liczby od 0 do 1?
Mógłbym użyć historii tej zmiennej, aby podać limity. Oznaczałoby to, że muszę powtórzyć stare statystyki, jeśli maksimum wzrośnie. Czy muszę to zrobić, czy są inne sztuczki, o których powinienem wiedzieć?
normalization
Russell Gallop
źródło
źródło
Odpowiedzi:
Bardzo popularną sztuczką (np. W modelowaniu łącznikowym) jest użycie hiperbolicznej stycznej tanh jako „funkcji zgniatania”. Automatycznie dopasowuje wszystkie liczby do przedziału od -1 do 1. Co w twoim przypadku ogranicza zakres od 0 do 1. W
r
imatlab
dostajesz to przeztanh()
.Inną funkcją zgniatania jest funkcja logistyczna (dzięki Simonowi za nazwę), zapewniona przez , która ogranicza zakres od 0 do 1 (z 0 zamapowanymi na. 5). Musisz więc pomnożyć wynik przez 2 i odjąć 1, aby dopasować swoje dane do przedziału od 0 do 1.f(x)=1/(1+e−x)
Oto prosty kod R przedstawiający obie funkcje (tanh na czerwono, logistycznie na niebiesko), dzięki czemu można zobaczyć, jak obie squash:
źródło
Jak często moim pierwszym pytaniem było „ dlaczego chcesz to zrobić”, potem zobaczyłem, że odpowiedziałeś już na to w komentarzach do pytania: „ Mierzę zawartość w wielu różnych wymiarach i chcę być jestem w stanie dokonać porównań pod względem trafności danego fragmentu treści. Ponadto chcę wyświetlać wartości w tych wymiarach, które są zrozumiałe i łatwe do zrozumienia ”.
Nie ma powodu, aby znormalizować dane, aby maksimum wynosiło 1, a min było zero, aby to osiągnąć, i moim zdaniem jest to ogólnie zły pomysł . Wartości maksymalne lub minimalne mogą bardzo łatwo być wartościami odstającymi , które nie są reprezentatywne dla rozkładu populacji. @osknows rozstanie się z uwagą na temat korzystania wyników Z jest znacznie lepszym pomysłemz . Wyniki (znane również jako standardowe wyniki) normalizują każdą zmienną przy użyciu odchylenia standardowego, a nie zakresu. Na odchylenie standardowe mniej mają wpływ wartości odstające. Aby użyćzz z - wyniki, najlepiej, aby każda zmienna miała mniej więcej normalny rozkład lub przynajmniej miała mniej więcej symetryczny rozkład (tzn. nie jest poważnie przekrzywiony), ale w razie potrzeby możesz najpierw zastosować odpowiednią transformację danych , aby to osiągnąć; którą transformację zastosować, można znaleźć poprzez znalezienie najlepiej pasującej transformacji Box – Cox .
źródło
mad()
funkcji. A jeśli martwisz się skośnością, możesz użyć szeregów danych zamiast oryginalnych obserwacji. W R, to byłobyrank()
, ale jeśli ktoś ma zamiar to wykorzystać na nowych danych,ecdf()
byłoby lepszym rozwiązaniem (ecdf(x)
powraca nowa funkcja, która w zasadzie daje wartość dla -quantile od , na przykład 0 (naprawdę ) do najniższej wartości , do najwyższej wartości, 0,5 do mediany itp.)p x 1 / n x 1Każda funkcja sigmoidalna będzie działać:
źródło
Oprócz dobrych sugestii Henrika i Simona Byrne, możesz użyć f (x) = x / (x + 1). Dla porównania, funkcja logistyczna wyolbrzymia różnice, gdy x rośnie. Oznacza to, że różnica między f (x) i f (x + 1) będzie większa przy funkcji logistycznej niż przy f (x) = x / (x + 1). Możesz lub nie chcesz tego efektu.
źródło
Mój wcześniejszy post ma metodę rangowania między 0 a 1. Rada na temat korelacji danych wejściowych klasyfikatora
Jednak w rankingu, którego użyłem, Tmin / Tmax wykorzystuje próbkę min / max, ale może okazać się, że populacja min / max jest bardziej odpowiednia. Sprawdź także wyniki z
źródło
Aby dodać do innych odpowiedzi sugerujących pnorm ...
Dla potencjalnie optymalnej metody wyboru parametrów sugeruję to przybliżenie dla pnorm.
Jest to zasadniczo normalizacja Softmax.
Odwołaj Pnorm w mgnieniu oka
źródło
Są dwa sposoby realizacji tego, z których często korzystam. Zawsze pracuję z danymi w czasie rzeczywistym, więc zakłada to ciągłe wprowadzanie danych. Oto pseudo-kod:
Używając trenowalnego minmax:
Ta funkcja wymaga, abyś albo przeprowadził wstępną fazę szkolenia (przy użyciu
calibrate()
), albo abyś ponownie trenował w określonych odstępach czasu lub zgodnie z określonymi warunkami. Wyobraź sobie na przykład taką funkcję:Używając historycznego minmax:
źródło
Bardzo prostą opcją jest podzielenie każdej liczby w danych przez największą liczbę w danych. Jeśli masz wiele małych liczb i kilka bardzo dużych, może to źle przekazać informacje. Ale to stosunkowo łatwe; jeśli uważasz, że znaczące informacje zostaną utracone podczas przedstawiania takich danych na wykresach, możesz wypróbować jedną z bardziej wyrafinowanych technik sugerowanych przez innych.
źródło