Po zbadaniu danych za pomocą technik statystycznych i wizualizacji należy je przekształcić w sposób, który pozwoli na skuteczniejsze trenowanie modelu. Celem normalizacji jest przekształcenie cech tak, aby były one na podobnej skali. Rozważmy na przykład te 2 funkcje:
- Funkcja
X
obejmuje zakres od 154 do 24 917 482. - Funkcja
Y
ma 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 się dopasowywać podczas trenowania. Gdy różne cechy mają różne zakresy, metoda gradientu może „odbywać się” i spowolniać konwergencję. Bardziej zaawansowane algorytmy optymalizacyjne, takie jak Adagrad i Adam, zapobiegają temu problemowi, zmieniając skuteczną szybkość 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 zamiast liczby ustawia wartość
NaN
. Gdy 1 liczba w modelu stanie się NaN, inne liczby w tym 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 szerokich zakresach i nie wystarczająco dużą na cechy o wąskich zakresach.
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, takiej jak city population.
.
Rozważ te 2 funkcje:
- Najniższa wartość funkcji
A
to -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 zakres funkcji B
jest 10 razy szerszy niż zakres funkcji A
. Dlatego:
- Na początku trenowania model zakłada, że Cecha
B
jest 10 razy „ważniejsza” niż CechaA
. - Trening będzie trwał dłużej niż powinien.
- W efekcie model może nie być optymalny.
Ogólne szkody spowodowane brakiem normalizacji będą stosunkowo niewielkie, ale zalecamy normalizację funkcji A i B według tej samej skali, np. od -1,0 do +1,0.
Teraz weź pod uwagę 2 funkcje o większym zakresie:
- Najniższa wartość funkcji
C
to -1, a najwyższa +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ży.
W tej sekcji omówiono 3 popularne metody normalizacji:
- skalowanie liniowe
- Skalowanie standaryzacji Z
- skalowanie logarytmiczne
Ta sekcja zawiera również 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ęściej nazywane po prostu skalowaniem) oznacza konwersję wartości zmiennoprzecinkowych z ich 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.
- Funkcja zawiera niewiele lub żadne wartości odstające, które nie są skrajne.
- Cecha jest rozłożona w przybliżeniu równomiernie w całym zakresie. Oznacza to, że histogram będzie zawierał w przybliżeniu równe paski dla większości wartości.
Załóżmy, że człowiek age
to funkcja. 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 reprezentowane niż inne, duży zbiór danych powinien zawierać wystarczającą liczbę przykładów dla 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ść, która jest wyższa o 2 odchylenia standardowe od średniej, ma współczynnik Z równy +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 na podstawie wyniku Z oznacza przechowywanie w wektorze cech wyniku Z tej cechy. Na przykład na rysunku poniżej widać 2 histogramy:
- Po lewej stronie klasyczny rozkład normalny.
- Po prawej stronie ta sama dystrybucja znormalizowana za pomocą skalowania wartości Z.
![Rysunek 4. 2 histogramy: oba przedstawiają rozkłady normalne o identycznym rozkładzie. Pierwszy histogram, który zawiera dane nieprzetworzone, ma średnią 200 i odchylenie standardowe 30. Drugi histogram, który zawiera wersję rozkładu Z-score pierwszego rozkładu, ma średnią równą 0 i odchylenie standardowe równe 1.](https://developers.google.cn/static/machine-learning/crash-course/images/z-scaling_classic.png?authuser=19&hl=pl)
Skalowanie według wartości z-score jest też dobrym wyborem w przypadku danych takich jak na poniższym rysunku, które mają tylko przybliżoną normalną dystrybucję.
![Rysunek 5. Dwie histogramy o identycznym kształcie, z których każda pokazuje stromy wzrost do plateau, a następnie stosunkowo szybki spadek, po którym następuje stopniowy zanik. Jeden histogram przedstawia rozkład danych wyjściowych, a drugi – rozkład danych wyjściowych po ich znormalizowaniu za pomocą skalowania wartości Z.
Wartości na osi X na obu histogramach są bardzo różne.
Histogram surowych danych obejmuje zakres od 0 do 29 tys., a histogram skalowany za pomocą wartości Z – od –1 do około +4, 8.](https://developers.google.cn/static/machine-learning/crash-course/images/z-scaling-non-classic-normal-distribution.png?authuser=19&hl=pl)
Z-score jest dobrym wyborem, gdy dane mają rozkład normalny lub rozkład podobny do rozkładu normalnego.
Pamiętaj, że niektóre rozkłady mogą być normalne w większości swojego zakresu, ale nadal mogą zawierać wartości skrajne. Na przykład prawie wszystkie punkty cechy net_worth
mogą mieścić się w 3 odchyleniach standardowych, ale niektóre przykłady tej cechy mogą znajdować się w setkach odchyleń standardowych od średniej. W takich sytuacjach możesz połączyć skalowanie według wartości Z-score z inną formą normalizacji (zwykle odcięciem) w celu rozwiązania tego problemu.
Ćwiczenie: sprawdź swoją wiedzę
Załóżmy, że Twój model trenuje na podstawie atrybutu o nazwieheight
, który zawiera dane dotyczące wzrostu 10 milionów dorosłych kobiet. Czy standaryzacja za pomocą Z-score będzie dobrą techniką normalizacji w przypadku height
? Dlaczego?
Skalowanie logarytmiczne
Skalibrowanie logarytmiczne oblicza logarytm wartości nieprzetworzonej. Teoretycznie logarytm może mieć dowolną podstawę. W praktyce skalowanie logarytmiczne zwykle oblicza logarytm naturalny (ln).
Skalowanie logarytmiczne jest przydatne, gdy dane są zgodne z rozkładem mocy. W ogólnym ujęciu rozkład według prawa potęgowego 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
).
Przejście na skalę logarytmiczną zmienia rozkład, co ułatwia wytrenowanie modelu, który będzie lepiej prognozował.
Drugi przykład: sprzedaż książek podlega rozkładowi według prawa potęgowego, ponieważ:
- Większość opublikowanych książek sprzedaje się w bardzo niewielkiej liczbie egzemplarzy, może 100–200.
- Niektóre książki sprzedają się w umiarkowanej liczbie, w tysiącach egzemplarzy.
- Tylko kilka najlepiej sprzedających się tytułów osiągnie sprzedaż ponad miliona 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)
natomiast dziennik o długości 1 000 000 znaków:
~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 dziwna koncepcja, ale może być bardzo skuteczna.
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 zgodne 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 duże:
![Rysunek 7. Wykres roomsPerPerson, na którym prawie wszystkie wartości
są skupione między 0 i 4, ale jest też bardzo długi ogon
sięga aż do 17 pokoi na osobę](https://developers.google.cn/static/machine-learning/crash-course/images/PreClipping.png?authuser=19&hl=pl)
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 ograniczysz lub obrzeżysz maksymalną wartość funkcji roomsPerPerson
do dowolnej wartości, np.4,0?
![Wykres roomsPerPerson, na którym wszystkie wartości mieszczą się w zakresie od 0 do 4,0. Wykres ma kształt dzwonu, ale w miejscu 4,0 występuje nietypowy szczyt](https://developers.google.cn/static/machine-learning/crash-course/images/Clipping.png?authuser=19&hl=pl)
Ograniczenie 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 skalowany zestaw funkcji jest teraz bardziej przydatny niż pierwotne dane.
Zaczekaj chwilę. Czy naprawdę możesz zredukować wszystkie wartości odstające do dowolnego górnego progu? Podczas trenowania modelu.
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 tabeli 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, aby były dokładnie równe 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. Niektóre wartości odstające są jednak ważne, dlatego należy ostrożnie podchodzić do ich przycinania.
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 tysiąc punktów 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 są prawidłowymi punktami danych. W przypadku tych wartości warto zastosować przycinanie, jeśli zbiór danych nie zawiera wystarczającej liczby przykładów w danym zakresie temperatury, aby można było wytrenować model w celu uzyskania dobrych prognoz. Podczas wnioskowania należy jednak pamiętać, że przycięty model będzie przewidywać tę samą temperaturę dla temperatury 45 °C i 35 °C.