Jak znormalizować dane dla sieci neuronowej i lasu decyzyjnego

10

Mam zestaw danych zawierający 20000 próbek, z których każda ma 12 różnych funkcji. Każda próbka należy do kategorii 0 lub 1. Chcę trenować sieć neuronową i las decyzyjny, aby kategoryzować próbki, aby móc porównać wyniki i obie techniki.

Pierwszą rzeczą, na którą natknąłem się, jest właściwa normalizacja danych. Jedna cecha jest w zakresie , inna w i jest jedna cecha, która w większości przyjmuje wartość 8, a czasem 7. Tak więc, jak czytam z różnych źródeł, właściwa normalizacja danych wejściowych dane są kluczowe dla sieci neuronowych. Jak się dowiedziałem, istnieje wiele możliwych sposobów normalizacji danych, na przykład:[0,106][30,40]

  1. Normalizacja min./maks . : Zakres wejściowy jest przekształcany liniowo na przedział (lub alternatywnie , czy to ma znaczenie?)[0,1][1,1]
  2. Normalizacja Z-score : Dane są przekształcane w celu uzyskania zerowej średniej i wariancji jednostkowej:
    ynew=yoldmeanVar

Którą normalizację wybrać? Czy normalizacja jest również potrzebna w przypadku lasów decyzyjnych? W przypadku normalizacji Z-Score różne cechy moich danych testowych nie mieszczą się w tym samym zakresie. Czy to może być problem? Czy każda funkcja powinna zostać znormalizowana przy użyciu tego samego algorytmu, aby zdecydować się na użycie Min-Max dla wszystkich funkcji lub Z-Score dla wszystkich funkcji?

Czy istnieją kombinacje, w których dane są odwzorowane na a także mają średnią zero (co oznaczałoby nieliniową transformację danych, a zatem zmianę wariancji i innych cech danych wejściowych).[1,1]

Czuję się trochę zagubiony, ponieważ nie mogę znaleźć referencji, które odpowiedzą na te pytania.

Merlin1896
źródło

Odpowiedzi:

21

Nie zgadzam się z innymi komentarzami.

Przede wszystkim nie widzę potrzeby normalizacji danych dla drzew decyzyjnych . Drzewa decyzyjne działają poprzez obliczanie wyniku (zwykle entropii) dla każdego innego podziału danych . Zastosowanie transformacji do danych, która nie zmienia kolejności danych, nie ma znaczenia.(Xxi,X>xi)

Losowe lasy to tylko kilka drzew decyzyjnych, więc to nie zmienia tego uzasadnienia.

Sieci neuronowe to inna historia. Po pierwsze, jeśli chodzi o przewidywanie, nie ma znaczenia. Sieć neuronowa może łatwo przeciwdziałać normalizacji, ponieważ po prostu skaluje wagi i zmienia obciążenie. Dużym problemem jest szkolenie.

Jeśli użyjesz algorytmu, takiego jak sprężysta propagacja wsteczna, do oszacowania wag sieci neuronowej, nie ma to znaczenia. Powodem jest to, że używa znaku gradientu, a nie jego wielkości, podczas zmiany wag w kierunku, co minimalizuje błąd. Nawiasem neuralnetmówiąc, jest to domyślny algorytm dla pakietu w języku R.

Kiedy to robi różnicę? Kiedy używasz tradycyjnej propagacji wstecznej z funkcjami aktywacji sigmoidalnej, może ona nasycić pochodną sigmoidalną.

Rozważ funkcję sigmoidalną (zielony) i jej pochodną (niebieski):

sigmoid

Co się stanie, jeśli nie znormalizujesz swoich danych, to to, że dane zostaną pomnożone przez losowe wagi i otrzymasz takie rzeczy jak . Pochodna sigmoidu wynosi (w przybliżeniu) zero, a proces szkolenia nie przebiega dalej. Sieć neuronowa, z którą się kończysz, jest po prostu siecią neuronową o losowych wagach (nie ma treningu).s(9999)=0

Czy to pomaga nam wiedzieć, jaka jest najlepsza funkcja normalizacyjna? Ale oczywiście! Przede wszystkim kluczowe jest zastosowanie normalizacji, która centruje dane, ponieważ większość implementacji inicjuje błąd na zero. Normalizowałbym od -0,5 do 0,5, . Ale standardowy wynik jest również dobry.XminXmaxXminX0.5

Rzeczywista normalizacja nie jest bardzo ważna, ponieważ wpływa tylko na początkowe iteracje procesu optymalizacji. Tak długo, jak jest wyśrodkowany, a większość danych jest mniejsza niż 1, może to oznaczać, że będziesz musiał użyć nieco mniej lub więcej iteracji, aby uzyskać ten sam wynik. Ale wynik będzie taki sam, dopóki unikniesz problemu nasycenia, o którym wspomniałem.

Jest coś nie omawianego tutaj, a mianowicie regularyzacja . Jeśli używasz regularyzacji w funkcji celu, sposób znormalizować dane będą wpływać wynikowy model. Zakładam, że już to wiesz. Jeśli wiesz, że jedna zmienna jest bardziej podatna na nadmierne dopasowanie, normalizacja danych powinna to wziąć pod uwagę. Jest to oczywiście całkowicie niezależne od używanych sieci neuronowych.

Ricardo Cruz
źródło
2
  1. Nie ma jednoznacznej odpowiedzi . To, co zaleciłbym, to skalowanie danych przy użyciu różnych metod, a następnie użycie tego samego modelu do prognozowania wyników w zestawie wstrzymań (w tym przypadku RF mogłyby dobrze działać). To powinno przynajmniej pokazać, które podejście skalowania jest najlepsze w twoim problemie z prognozowaniem.
  2. Nie musisz skalować danych dla Losowych Lasów
  3. Poszczególne zakresy nie powinny stanowić problemu, o ile na początku są konsekwentnie skalowane. To tylko pokazuje, że istnieją różnice między zmiennymi, tylko w bardziej zwartej skali niż wcześniej.
  4. Tak - wszystkie dane powinny być skalowane przy użyciu tego samego podejścia. W przeciwnym razie wartości w przekształconym zestawie danych mogą nie odnosić się do samych danych, ale do algorytmu używanego do skalowania.

Mam nadzieję, że to pomaga.

plumbus_bouquet
źródło
1
Świetna odpowiedź, chciałbym tylko dodać, że zależy to nieco od konkretnej dystrybucji danych, z którymi masz do czynienia i tego, czy usuwasz wartości odstające. Normalne dane będą wyglądać bardzo dobrze, jeśli zostaną ujednolicone. Jednak jednolity rozkład może wyglądać znacznie lepiej przy normalizacji min / maks. Co więcej, rozkład normalny log z sigma = 10 może ukryć wiele interesujących zachowań bliskich zeru, jeśli min / max znormalizujesz je.
AN6U5,
@ AN6U5 - Bardzo dobry punkt. Szczerze mówiąc, nie myślałem zbyt wiele o wpływie skalowania na różne leżące u podstaw rozkłady / wartości odstające. Może przeczytam go dziś rano!
plumbus_bouquet