Pytanie:
Czy powinniśmy standaryzować dane, wykonując regresję procesu Gaussa?
Autonomous
2015-10-23 02:46:42 UTC
view on stackexchange narkive permalink

Wykonuję regresję procesu Gaussa (GPR) i optymalizuję hiperparametry. Używam minFunc do wykonywania wszystkich optymalizacji. Moje pytanie brzmi: czy powinniśmy (a raczej czy możemy) ujednolicić dane przed przekazaniem ich funkcji celu? Jeśli dokonamy standaryzacji, hiperparametry zostaną poznane zgodnie ze znormalizowanymi danymi. Jednak w czasie testu, zakładając, że będziemy pobierać próbki pojedynczo, nie będzie możliwe samodzielne standaryzowanie każdej próbki, prawda? (Chyba że wykorzystamy pewne czynniki standaryzujące z danych treningowych). Jeśli ma to znaczenie, wszystkie elementy w moich danych mieszczą się w przedziale od -1 do 1, jednak niektóre kolumny mogą mieć bardzo małą średnią i wariancję w porównaniu z innymi kolumnami.

Moje pytanie brzmi: czy powinniśmy znormalizować dane podczas wykonywania georadaru?

PS Właściwie to obserwuję dziwne zachowanie, jeśli nie ustandaryzuję moich danych. Na przykład minFunc nagle wyświetla mi błąd krok jest niedozwolony . Niektóre lektury online doprowadziły mnie do wniosku, że albo jest problem z obliczaniem gradientu, albo twoje dane nie są znormalizowane. Jestem pewien co do obliczania funkcji gradientu, sprawdziłem to również opcją DerivativeCheck . Zatem pozostawia to możliwość braku standaryzacji danych.

Jeśli chodzi o twoje pytanie dotyczące przetwarzania późniejszych danych, które są * poza próbką * w stosunku do danych użytych do kalibracji modelu, myślę, że byłoby bardzo ważne, aby użyć tych samych parametrów z danych kalibracyjnych do wstępnego przetworzenia lub przekształcenia wszelkich późniejszych danychprzeszedł przez model.Jeśli tego nie zrobisz, będziesz mieszał lub mylił * dryf * w nowych informacjach z szumem.
@DJohnson Więc masz na myśli, że powinienem znormalizować moje dane * testowe * przy użyciu tych samych parametrów skalowania, które uzyskano z danych treningowych?
Tak ... dokładnie to mam na myśli.Normalizacja jakichkolwiek nowych danych za pomocą informacji pochodzących z tych nowych danych nie byłaby spójna z parametrami modelu opracowanymi na podstawie znormalizowanych danych kalibracyjnych.
Niestety nie mogę komentować odpowiedzi @zilver's (za mało reputacji).Zastosowałem tę samą procedurę (średnia zero i normalizacja z odchyleniem standardowym) dla mojej implementacji do przewidywanej przestrzeni wejściowej. Po prognozie chcę cofnąć standaryzację poprzez pomnożenie i dodanie średniej z powrotem do wartości.Działa to świetnie w przypadku przewidywanej średniej, ale nie w przypadku przewidywanej wariancji.Czy można zastosować również wariancję predykcyjną?O ile rozumiem, równania, których nie możesz zastosować po prostu tego samego wzoru, ponieważ prowadzi to do kompletnego nonsensu, prawda?Najlepsza
Dwa odpowiedzi:
Alexey Zaytsev
2015-10-28 18:47:57 UTC
view on stackexchange narkive permalink

Tak, ujednolicenie danych jest pożądane podczas uczenia się regresji procesów Gaussa. Istnieje wiele powodów:

  1. W typowym modelu regresji procesów Gaussa zakładamy, że wynik $ y $ ma zerową średnią, więc powinniśmy ustandaryzować $ y $, aby pasował do naszego założenia.
  2. Dla wielu funkcji kowariancji mamy parametry skali w funkcjach kowariancji. Dlatego powinniśmy ustandaryzować dane wejściowe, aby uzyskać lepsze oszacowanie parametrów funkcji kowariancji.
  3. Regresja procesów Gaussa jest podatna na problemy numeryczne, ponieważ musimy odwrócić źle uwarunkowaną macierz kowariancji. Aby zmniejszyć ten problem, powinieneś ustandaryzować swoje dane.

Niektóre pakiety wykonują tę pracę za Ciebie, na przykład GPR w sklearn ma opcję normalizuj dla normalizacji wejść, ale nie wyjść ( http://scikit-learn.org/stable/modules/generated/sklearn.gaussian_process.GaussianProcess.html)

Rozumiem wszystkie trzy punkty.Jednak moje pytanie brzmi: gdybyśmy nauczyli się hiperparametrów na znormalizowanych danych treningowych, czy działałyby na danych testowych, których nie mogę normalizować (poza wykorzystaniem współczynników skalujących z danych treningowych).Jeden z komentarzy @DJohnson (chyba) sugeruje to samo.
W przypadku próbki testowej należy zastosować normalizację podobną do tej stosowanej w przypadku próby treningowej, jak zasugerowano powyżej w komentarzach.
Jeśli nie użyjemy normalizacji dla danych testowych, to model jest nieprawidłowy, ponieważ znormalizowana próbka treningowa różni się od nieprzekształconej próbki testowej.
@AlexeyZaytsev przepraszam, że wtrącam się, czy mam rację interpretując twoją odpowiedź, mówiąc, że musimy nie tylko znormalizować dane wejściowe, ale także dane wyjściowe zestawu uczącego?
@KRS-fun Proponuję znormalizować wyniki, aby poprawić stabilność numeryczną techniki, podczas gdy właściwy przebieg działań zawsze zależy od danych.Oczekuję również, że korzyść (dokładność modelu, solidność itd.) Z normalizacji wyników może być znacznie mniejsza niż w przypadku normalizacji danych wejściowych.
W jaki sposób normalizacja y poprawia stabilność numeryczną?(Kernel zależy tylko od x, więc nie rozumiem punktu 3.) Ponadto GPR ma opcję normalize_y, ale nie x, w przeciwieństwie do tego, co napisałeś (może się zmieniło od czasu napisania tej odpowiedzi?)
@samlaf Jeśli nie wykonasz normalizacji ani dla $ x $, jak i $ y $, to np.możesz mieć złą inicjalizację parametrów, a następnie pozostać na tym plateau ponieważ dla większości funkcji kowariancji masz w niej wykładnik (więc dla złej inicjalizacji parametry kowariancji będą arbitralnie bliskie jedności lub zera, więc będziesz mieć albo macierz jednościlub macierz jedynek. A ten efekt oznacza problemy numeryczne).W przypadku normalizacji wyników: również może pomóc w niektórych przypadkach, ponieważ prawdopodobieństwo zawiera wartości wyjściowe, a duże wartości mogą utrudnić problem optymalizacji.
zilver
2019-06-24 16:48:45 UTC
view on stackexchange narkive permalink

Zgadzam się z odpowiedzią Aleksieja Zajcewa (i omówieniem tej odpowiedzi), że standaryzacja jest dobra do zrobienia z różnych powodów również na wynikach. Chciałbym jednak tylko dodać przykład, dlaczego standaryzacja wyników może być ważna.

Przykładem, w którym normalizacja / standaryzacja wyjścia jest ważna, to małe i zaszumione wartości wyjściowe. Poniższy rysunek ilustruje to na bardzo prostym przykładzie. Kod MATLABa poniżej rysunku.

Niebieskie kropki reprezentują zaszumione próbki funkcji sin (). Pomarańczowe / czerwone kółka reprezentują przewidywane wartości procesu Gaussa.

  1. W górnym dolnym wykresie amplituda jest równa jedności (z szumem).
  2. W drugim wykresie pomocniczym wartości wyjściowe zostały przeskalowane za pomocą 1e-5 i widzimy, że model procesu Gaussa (z ustawieniami domyślnymi) przewiduje model stały. Domyślne ustawienia optymalizują parametr szumu i mają dość wysoką dolną granicę.
  3. W trzecim wykresie pomocniczym parametr szumu jest ustawiony na zero i nie jest optymalizowany. W tym przypadku model zbyt mocno pasuje.
  4. Czwarty wykres pomocniczy przedstawia standardowe wyniki i model dopasowany do tych danych.
  5. W ostatnim wykresie podrzędnym wyniki są skalowane wstecz z operacji standaryzacji (nie skalowane z powrotem do wartości pierwotnych), a także wartości przewidywane są skalowane. Zwróć uwagę, że przewidywane wartości są skalowane przy użyciu średniej i odchylenia standardowego ze standaryzacji danych uczących.

Simple example

 , funkcja valid_normgp ()
% małych wyników

% danych
x = 0: 0,01: 1; x = x (:);
xp = przestrzeń linowa (0,1, 0,9, długość (x)); xp = xp (:);

% modelu bez hałasu
y = sin (2 * pi * x) + 5e-1 * randn (length (x), 1);

% trenuje i przewiduje model GP
mdl = fitrgp (x, y);
yp = przewidzieć (mdl, xp);

postać
subplot (5, 1, 1)
plot (x, y, '.')
czekaj
plot (xp, yp, 'o')
tytuł ('oryginalny problem')

%% sprawia, że ​​wyjścia są małe (poniżej dolnej granicy szumu)
ym = y / 1e5;

% trenuje i przewiduje model GP
mdlm = fitrgp (x, ym);
ypm = przewidzieć (mdlm, xp (:));

subplot (5, 1, 2)
plot (x, ym, '.')
czekaj
plot (xp, ypm, „o”)
tytuł („małe produkty”)

%% wyświetla małe i ustawia sigma = 0

% trenuje i przewiduje model GP
mdlm1 = fitrgp (x, ym, 'Sigma', 1e-12, 'ConstantSigma', true, 'SigmaLowerBound', eps);
ypm1 = przewidzieć (mdlm1, xp (:));

subplot (5, 1, 3)
plot (x, ym, '.')
czekaj
plot (xp, ypm1, 'o')
tytuł ('małe wyniki i sigma = 0')

%% normalizuj / standaryzuj
nu = średnia (ym);
sigma = std (ym);
yms = (ym - nu) / sigma;

% trenuje i przewiduje model GP
mdlms = fitrgp (x, yms);
ypms = przewidzieć (mdlms, xp (:));

subplot (5, 1, 4)
plot (x, yms, '.')
czekaj
plot (xp, ypms, „o”)
tytuł ('standardowe wyjścia')

% rescale
ypms2 = ypms * sigma + nu;

subplot (5, 1, 5)
plot (x, ym, '.')
czekaj
plot (xp, ypms2, „o”)
tytuł („skalowane prognozy”)

legenda („prawdziwy model”, „prognoza”, „lokalizacja”, „najlepsza”)
koniec
 
(+1) Pomocna edycja i przydatna odpowiedź.Dziękujemy i witamy na stronie!


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...