Procesy gaussowskie: jak używać GPML do uzyskania wyników wielowymiarowych

13

Czy istnieje sposób na przeprowadzenie regresji procesu Gaussa na wielowymiarowych danych wyjściowych (być może skorelowanych) przy użyciu GPML ?

W skrypcie demo znalazłem tylko przykład 1D.

Podobne pytanie na CV, które wciągniki przypadku wejścia wielowymiarowej.


Przejrzałem ich książkę, aby sprawdzić, czy mogę coś znaleźć. W 9 rozdziale tej książki (sekcja 9.1) wspomnieli o tym przypadku wielu wyników. Wspomnieli o kilku sposobach poradzenia sobie z tym, Jednym z nich za pomocą skorelowanego procesu hałasu i Two-Cokriging (wcześniej skorelowanym).

Nadal nie wiem, jak mogę włączyć którykolwiek z tych pomysłów do środowiska GPML.


Czy są jeszcze jakieś biblioteki / struktury GP, które obsługują wielowymiarowe wyjście?

steadyfish
źródło
„Prognozowanie danych strukturalnych” mówi o wykorzystaniu SVM w przypadku jednej klasy (szacowanie gęstości jądra) na połączonych jądrach między wejściem a wyjściem. Biorąc pod uwagę, że oba są maszynami jądra, to podejście powinno działać. Znalazłem jeden artykuł wspominający coś podobnego. datamin.ubbcluj.ro/tr/2011/sogp.pdf moje próby dopasowania algorytmów uczenia strukturalnego były dość fatalne, więc nie jestem pewien, jak to się układa.
Jessica Collins

Odpowiedzi:

7

Wierzę, że Twin Gaussian Processes jest dokładnie tym, czego szukasz. Nie umiem opisać modelu lepiej niż streszczenie samego papieru, więc skopiuję go i wkleję:

Opisujemy podwójne procesy Gaussa (TGP) 1, ogólna metoda prognozowania strukturalnego, która wykorzystuje priory procesu GP (GP) [2] zarówno na zmiennych towarzyszących, jak i odpowiedzi, zarówno na wielu odmianach, jak i szacuje wyniki, minimalizując rozbieżność Kullbacka-Leiblera między dwoma GP, zamodelowanymi jako normalne rozkłady w porównaniu ze skończonymi zestawami wskaźników treningu i przykłady testowania, podkreślając cel, że podobne dane wejściowe powinny wytwarzać podobne percepcje, a to powinno utrzymywać się średnio między ich rozkładami krańcowymi. TGP przechwytuje nie tylko współzależności między zmiennymi towarzyszącymi, jak w typowym GP, ale także te między odpowiedziami, więc uwzględnia się korelacje między danymi wejściowymi i wyjściowymi. Przykładem TGP, z obiecującymi wynikami, jest rekonstrukcja trójwymiarowych pozycji człowieka z jednookularowych i wielokamerowych sekwencji wideo w niedawno wprowadzonym benchmarku HumanEva, gdzie osiągamy błąd 5 cm średnio na marker 3D dla modeli trenowanych wspólnie, wykorzystując dane od wielu osób i wielu działań. Metoda jest szybka i automatyczna: nie wymaga ręcznego tworzenia początkowej pozycji, parametrów kalibracji aparatu ani dostępności trójwymiarowego modelu ciała powiązanego z ludzkimi podmiotami wykorzystywanego do treningu lub testowania.

Autorzy hojnie dostarczyli kod i przykładowe zestawy danych na początek.

Yanshuai Cao
źródło
Witamy na stronie @caoy. Czy mógłbyś podać trochę informacji na temat tego linku? W ten sposób czytelnicy mogliby wiedzieć, czy warto dla nich dążyć, a to oznaczałoby, że w przypadku przyszłego linkrota nadal jest coś wartościowego.
Gung - Przywróć Monikę
@ Gung, dzięki, mam nadzieję, że streszczenie zadziała.
Yanshuai Cao,
@caoy ... Czy możesz rozwinąć kwestię średniej predykcyjnej rozkładu i wariancji wyników w procesach Twin Gaussa?
Sandipan Karmakar
3

Krótka odpowiedź Regresja wyników wielowymiarowych jest nieco trudna i według mojego obecnego poziomu wiedzy nie jest bezpośrednio włączona do zestawu narzędzi GPML.

Długa odpowiedź Możesz podzielić problem wielowymiarowej regresji wyjściowej na 3 różne części.

  1. Wyjścia nieze sobą powiązane - po prostu zresetuj wyjścia indywidualnie, tak jak skrypt demonstracyjny dla przypadku 1d.
  2. Wyjścia są powiązane, ale nie znają relacji między nimi - Zasadniczo chciałbyś poznać wewnętrzne relacje między wyjściami. Jak wspomniano w książce, coKriging to dobry sposób na rozpoczęcie. Istnieją programy inne niż GPML, które mogą bezpośrednio umożliwiać wykonywanie operacji kryptograficznych, np. ooDace
  3. Wyjścia są powiązane i znasz relację między nimi - Wykonuj regularne współdziałanie, ale możesz zastosować twarde ograniczenia między wyjściami, stosując ograniczenia w optymalizatorze (minimalizując prawdopodobieństwo krańcowe logarytmu), jak powiedział Hall & Huang 2001 lub zastosuj relacje w poprzedniej funkcji, jak powiedział Constantinescu i Anitescu 2013 .

Mam nadzieję, że to pomoże :)

Ankit Chiplunkar
źródło
2

To jest moduł scikit-learn, który zadziałał dla mnie zaskakująco dobrze:

http://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gp_regression.html

# Instanciate a Gaussian Process model
gp = GaussianProcess(corr='cubic', theta0=1e-2, thetaL=1e-4, thetaU=1e-1,
                     random_start=100)

# Fit to data using Maximum Likelihood Estimation of the parameters
gp.fit(X, y)

# Make the prediction on the meshed x-axis (ask for MSE as well)
y_pred, MSE = gp.predict(x, eval_MSE=True)
sigma = np.sqrt(MSE)
denfromufa
źródło
1

Szukałem wielu wyjść procesów Gaussa i znalazłem wiele sposobów działania, takich jak metoda splotu, metoda modelowania efektów mieszanych i najnowsza wersja Twin Gaussian Processes (TGP).

Mam wątpliwości co do koncepcji Twin Gaussian Processes (TGP). Czy ktoś może mi w tym pomóc?

y^p(y|y)(μ,σ2)σ2yy^y

Sandipan Karmakar
źródło