Po zbadaniu danych za pomocą technik statystycznych i wizualizacji należy je przekształcić w sposób, który ułatwi modelowi skuteczniejsze trenowanie. Celem normalizacji jest przekształcenie funkcji tak, aby działały na podobnej skali. Rozważmy na przykład 2 cechy:
- Cecha
X
obejmuje zakres od 154 do 24 917 482. - Cecha
Y
obejmuje zakres od 5 do 22.
Te 2 funkcje obejmują bardzo różne zakresy. Normalizacja może zmienić wartości X
i Y
tak, aby miały podobny zakres, np. od 0 do 1.
Normalizacja zapewnia te korzyści:
- Pomaga modelom szybciej łączyć się podczas trenowania. Gdy różne cechy mają różne zakresy, metoda gradientu może „odbić się” i spowolnić konwergencję. Bardziej zaawansowani optymalizatorzy, tacy jak Adagrad i Adam, chronią przed tym problemem, zmieniając efektywne tempo uczenia się w czasie.
- Pomaga modelom wyciągać lepsze wnioski. Jeśli różne cechy mają różne zakresy, uzyskany model może generować mniej przydatne prognozy.
- Pomaga uniknąć pułapki typu „NaN”, gdy wartości cech są bardzo wysokie.
NaN to skrót od not a number (nie jest liczbą). Gdy wartość w modelu przekracza limit precyzji liczby zmiennoprzecinkowej, system ustawia ją na
NaN
zamiast na liczbę. Gdy 1 liczba w modelu stanie się NaN, inne liczby w modelu również w końcu staną się NaN. - Pomaga modelowi uczyć się odpowiednich wag dla każdej cechy. Bez skalowania cech model zwraca zbyt dużą uwagę na cechy o szerokim zakresie i nie wystarczająco dużo uwagi na cechy o wąskim zakresie.
Zalecamy normalizowanie cech liczbowych obejmujących wyraźnie różne zakresy (np. wiek i dochody).
Zalecamy też znormalizowanie pojedynczej cechy numerycznej, która obejmuje szeroki zakres, na przykład city population.
.
Rozważ te 2 funkcje:
- Najniższa wartość cechy
A
wynosi -0,5, a najwyższa to +0,5. - Najniższa wartość funkcji
B
to -5,0, a najwyższa – +5,0.
Cechy A
i B
mają stosunkowo wąskie zakresy. Jednak rozpiętość cechy B
jest 10 razy szerszy niż rozpiętość cechy A
. Dlatego:
- Na początku trenowania model zakłada, że Cecha
B
jest 10 razy „ważniejsza” niż CechaA
. - Trenowanie trwa dłużej niż powinno.
- Otrzymany model może nie być optymalny.
Ogólne szkody spowodowane brakiem normalizacji będą stosunkowo niewielkie, ale zalecamy normalizację funkcji A i B w tej samej skali, np. od -1,0 do +1,0.
Teraz weź pod uwagę 2 funkcje o większych różnicach zakresów:
- Najniższa wartość cechy
C
to -1, a najwyższa to +1. - Najniższa wartość funkcji
D
to +5000, a najwyższa – +1 000 000 000.
Jeśli nie znormalizujesz atrybutów C
i D
, Twój model prawdopodobnie nie będzie optymalny. Ponadto trening będzie potrzebował znacznie więcej czasu na zbieżność lub w ogóle nie będzie się zbieżeć.
W tej sekcji omówiono 3 popularne metody normalizacji:
- skalowanie liniowe
- Skalowanie standaryzacji Z
- skalowanie logarytmiczne
Ta sekcja zawiera dodatkowo informacje o przycinaniu. Chociaż nie jest to prawdziwa technika normalizacji, przycinanie pozwala uporządkować niesforne cechy liczbowe w zakresy, które dają lepsze modele.
Skala liniowa
Skalowanie liniowe (często w skrócie skalowane) polega na przekształcaniu wartości zmiennoprzecinkowych ze swojego naturalnego zakresu na zakres standardowy, zwykle od 0 do 1 lub od -1 do +1.
Skalowanie liniowe jest dobrym wyborem, gdy są spełnione wszystkie te warunki:
- Dolna i górna granica danych nie zmieniają się znacząco w czasie.
- Cecha zawiera niewiele odstających lub zerową liczbę, które nie są ekstremalne.
- Obiekt jest mniej więcej równomierny w całym swoim zakresie. Oznacza to, że histogram będzie zawierał w przybliżeniu równe słupki dla większości wartości.
Załóżmy, że człowiek age
jest funkcją. Skalowanie liniowe to dobra technika normalizacji w przypadku age
, ponieważ:
- Przybliżone dolne i górne granice to 0–100.
- Plik
age
zawiera stosunkowo niewielki odsetek wartości odstających. Tylko około 0,3% ludzi ma więcej niż 100 lat. - Chociaż niektóre grupy wiekowe są nieco lepiej przedstawione niż inne, duży zbiór danych powinien zawierać wystarczającą liczbę przykładów osób ze wszystkich grup wiekowych.
Ćwiczenie: sprawdź swoją wiedzę
Załóżmy, że Twój model ma cechę o nazwienet_worth
, która zawiera wartość netto różnych osób. Czy skalowanie liniowe byłoby dobrą techniką normalizacji w przypadku net_worth
? Dlaczego?
Skalowanie standaryzacji Z
Wynik testu Z to liczba standardowych odchyleń wartości od średniej. Na przykład wartość o 2 odchyleniach standardowych większych niż średnia ma wynik Z +2, 0. Wartość, która jest o 1,5 odchylenia standardowego mniej od średniej, ma współczynnik Z-score równy –1,5.
Reprezentowanie cechy za pomocą skalowania do wyniku Z oznacza zapisanie wyniku Z-cech we wektorze cech. Na przykład na rysunku poniżej widać 2 histogramy:
- Po lewej stronie klasyczny rozkład normalny.
- Po prawej stronie ten sam rozkład jest normalizowany przez skalowanie wyniku Z.
Skalowanie wyniku Z jest też dobrym rozwiązaniem w przypadku danych takich jak na ilustracji poniżej, gdzie rozkład jest niejasny i normalny.
Wartość z-score jest dobrym wyborem, gdy dane mają rozkład normalny lub rozkład zbliżony do rozkładu normalnego.
Pamiętaj, że niektóre rozkłady mogą być normalne w większości zakresu, ale nadal mogą zawierać wartości skrajne. Na przykład prawie wszystkie punkty w cesze net_worth
mogą mieścić się w 3 odchyleniach standardowych, ale niektóre przykłady tej cechy mogą być oddalone od średniej o setki odchyleń standardowych. W takich sytuacjach możesz połączyć skalowanie według wartości Z-score z inną formą normalizacji (zwykle przycinaniem), aby rozwiązać ten problem.
Ćwiczenie: sprawdź swoją wiedzę
Załóżmy, że Twój model trenuje obiekt o nazwieheight
, który uwzględnia wzrost dziesięciu milionów kobiet. Czy standaryzacja za pomocą skali Z byłaby dobrą metodą normalizacji w przypadku height
? Dlaczego?
Skalowanie logarytmiczne
Skalowanie logarytmiczne oblicza logarytm wartości nieprzetworzonej. Teoretycznie logarytm może mieć dowolną podstawę, ale w praktyce skalowanie logarytmiczne zwykle oblicza logarytm naturalny (ln).
Skalowanie logu jest przydatne, gdy dane są zgodne z prawem mocy. Mówiąc najprościej, rozkład prawa władzy wygląda tak:
- Niskie wartości
X
mają bardzo wysokie wartościY
. - Wraz ze wzrostem wartości
X
wartościY
szybko maleją. W związku z tym wysokie wartościX
mają bardzo niskie wartościY
.
Oceny filmów są dobrym przykładem rozkładu według prawa potęgowego. Na poniższym rysunku:
- Kilka filmów ma wiele ocen użytkowników. (niskie wartości atrybutu
X
mają wysokie wartości atrybutuY
). - Większość filmów ma bardzo mało ocen użytkowników. (wysokie wartości
X
mają niskie wartościY
).
Skalowanie logów zmienia rozkład, co pomaga trenować model generujący lepsze prognozy.
Drugi przykład: sprzedaż książek podlega rozkładowi według prawa potęgowego, ponieważ:
- Większość opublikowanych książek sprzedaje się w niewielkich egzemplarzach, czasem nawet 1–200.
- Niektóre książki sprzedają się w umiarkowanej liczbie, w tysiącach egzemplarzy.
- Tylko kilka najpopularniejszych tytułów sprzeda się w ponad milionie egzemplarzy.
Załóżmy, że trenujesz model liniowy, aby znaleźć zależność między okładkami książek a ich sprzedażą. Model liniowy trenowany na podstawie wartości nieprzetworzonych musiałby znaleźć coś w okładkach książek, które sprzedały milion egzemplarzy, co jest 10 tysięcy razy bardziej skuteczne niż okładki książek, które sprzedały tylko 100 egzemplarzy. Jednak dzięki skalowaniu wszystkich danych o sprzedaży zadanie to staje się znacznie łatwiejsze do wykonania. Na przykład logarytm z 100 to:
~4.6 = ln(100)
a log 1 000 000 to:
~13.8 = ln(1,000,000)
Zatem log 1 000 000 jest tylko około 3 razy większy niż log 100. Prawdopodobnie możesz sobie wyobrazić, że okładka bestsellera jest około trzykrotnie bardziej atrakcyjna (w jakimś sensie) niż okładka książki, która nie cieszy się zbytnim powodzeniem.
Przycinanie
Odcięcie wartości odstających to technika minimalizowania wpływu wartości skrajnych. Krótko mówiąc, przycinanie zwykle ogranicza (zmniejsza) wartość wartości odstających do określonej wartości maksymalnej. Clipping to dziwny pomysł, ale może być bardzo skuteczny.
Wyobraź sobie na przykład zbiór danych zawierający cechę o nazwie roomsPerPerson
, która reprezentuje liczbę pokoi (łączna liczba pokoi podzielona przez liczbę osób) w różnych domach. Na poniższym wykresie widać, że ponad 99% wartości funkcji jest zgodnych z rozkładem normalnym (średnia 1,8 i odchylenie standardowe 0,7). Funkcja zawiera jednak kilka wartości odstających, niektóre z nich są bardzo odległe od reszty:
Jak można zminimalizować wpływ tych skrajnych wartości? Widok histogramu nie przypomina rozkładu równomiernego, normalnego ani rozkładu według prawa potęgowego. Co się stanie, jeśli po prostu ograniczymy lub przytniemy maksymalną wartość funkcji roomsPerPerson
do dowolnej wartości, np.4,0?
Przycięcie wartości funkcji na poziomie 4,0 nie oznacza, że model ignoruje wszystkie wartości większe niż 4,0. Oznacza to, że wszystkie wartości większe niż 4,0 są teraz ustawiane na 4,0. To wyjaśnia dziwny szczyt w 4.0. Pomimo tego wzgórza przeskalowany zbiór cech jest teraz bardziej przydatny niż oryginalne dane.
Zaczekaj chwilę. Czy naprawdę możesz zredukować wszystkie wartości odstające do dowolnego górnego progu? Podczas trenowania modelu – tak.
Wartości możesz też przyciąć po zastosowaniu innych form normalizacji. Załóżmy na przykład, że używasz skalowania na podstawie wartości z testu Z, ale kilka wartości odstających ma wartości bezwzględne znacznie większe niż 3. W takim przypadku możesz:
- Zredukuj wartości Z-score większe niż 3, tak aby wynosiły dokładnie 3.
- Zredukuj wartości poniżej -3, tak aby wynosiły dokładnie -3.
Dzięki temu model nie będzie nadmiernie indeksować nieistotnych danych. Jednak pewne odchylenia są istotne, więc musisz je ostrożnie przyciąć.
Podsumowanie metod normalizacji
Technika normalizacji | Formuła | Kiedy używać |
---|---|---|
Skala liniowa | $$ x' = \frac{x - x_{min}}{x_{max} - x_{min}} $$ | Gdy funkcja jest równomiernie rozłożona w ramach stałego zakresu. |
Skalowanie standaryzacji Z | $$ x' = \frac{x - μ}{σ}$$ | Gdy rozkład funkcji nie zawiera skrajnych wartości odstających. |
Skalowanie logarytmiczne | $$ x' = log(x)$$ | gdy funkcja jest zgodna z zasadami prawa potęgi. |
Przycinanie | Jeśli $x > max$, ustaw $x' = max$ Jeśli $x < min$, ustaw $x' = min$ |
gdy funkcja zawiera skrajne wartości odstające. |
Ćwiczenie: sprawdzenie wiedzy
Załóżmy, że opracowujesz model, który przewiduje wydajność centrum danych na podstawie temperatury zmierzonej wewnątrz tego centrum.
Prawie wszystkie wartości temperature
w Twoim zbiorze danych mieszczą się w zakresie 15–30 °C, z tymi wyjątkami:
- Raz lub dwa razy w roku, w bardzo gorące dni, w
temperature
rejestruje się kilka wartości z zakresu 31–45. - Każdy 1000. punkt w pliku
temperature
ma wartość 1000, a nie rzeczywistą temperaturę.
Która z tych technik normalizacji byłaby odpowiednia w przypadku temperature
?
Wartości 1000 są błędne i należy je usunąć, a nie przyciąć.
Wartości od 31 do 45 to prawidłowe punkty danych. Przycinanie może być prawdopodobnie dobrym pomysłem w przypadku tych wartości, przy założeniu, że zbiór danych nie zawiera wystarczającej liczby przykładów w tym zakresie temperatur, aby wytrenować model w celu generowania dobrych prognoz. Podczas wnioskowania pamiętaj jednak, że model przycięty przeprowadziłby w ten sposób taką samą prognozę dla temperatury 45 stopni i temperatury 35 stopni.