Ukryty model Markowa do przewidywania zdarzeń

9

Pytanie : Czy konfiguracja poniżej jest sensowną implementacją modelu Hidden Markov?

Mam zestaw danych 108,000obserwacji (wykonanych w ciągu 100 dni) i przybliżonych 2000zdarzeń z całego okresu obserwacji. Dane wyglądają jak na poniższym rysunku, gdzie obserwowana zmienna może przyjąć 3 wartości dyskretne[1,2,3] a czerwone kolumny podkreślają czasy zdarzeń, tj tE:

wprowadź opis zdjęcia tutaj

Jak pokazano za pomocą czerwonych prostokątów na rysunku, dokonałem analizy {tE do tE5} dla każdego zdarzenia, skutecznie traktując je jako „okna przed zdarzeniem”.

Szkolenie HMM: Planuję trenować ukryty model Markowa (HMM) w oparciu o wszystkie „okna przed zdarzeniem”, stosując metodologię wielu sekwencji obserwacji, jak sugerowano na stronie Pg. 273 Rabiner na papierze . Mam nadzieję, że pozwoli mi to wyszkolić HMM, który przechwytuje wzorce sekwencji, które prowadzą do zdarzenia.

Prognozowanie HMM: Następnie planuję użyć tego HMM do przewidywania log[P(Observations|HMM)] w nowy dzień, gdzie Observations będzie wektorem przesuwnego okna, aktualizowanym w czasie rzeczywistym, aby zawierał obserwacje między bieżącym czasem t i t5 w miarę upływu dnia.

Spodziewam się zobaczyć log[P(Observations|HMM)] wzrost dla Observationsktóre przypominają „okna przed zdarzeniem”. To powinno w efekcie pozwolić mi przewidzieć wydarzenia, zanim się one zdarzą.

Zhubarb
źródło
Możesz podzielić swoje dane, aby zbudować model (powiedzmy 0,7), a następnie przetestować swój model na pozostałych danych. Tylko myśl, że nie jestem specjalistą w tej dziedzinie.
Fernando
Tak dziękuję. Bardziej nadaje się HMM do zadania, którego nie jestem pewien.
Zhubarb
@Zhubarb Mam do czynienia z podobnym problemem i chciałbym postępować zgodnie z podejściem HMM. Gdzie to robisz? Czy w końcu wróciłeś do regresji logistycznej / SVM itp.?
Javierfdr
@Javierfdr, ostatecznie nie wdrożyłem go z powodu trudności we wdrażaniu i obaw, które alto podkreśla w jego odpowiedzi. Zasadniczo HMM wiąże się z koniecznością zbudowania rozległego modelu generatywnego, podczas gdy moje przeczucie dotyczy teraz omawianego problemu, łatwiej można uniknąć modelu dyskryminacyjnego (SVM, sieci neuronowej itp.), Jak sugerujesz .
Zhubarb

Odpowiedzi:

3

Jednym z problemów związanych z opisanym przez ciebie podejściem jest to, że musisz zdefiniować, jaki rodzaj wzrostu P(O) ma znaczenie, co może być trudne P(O)zawsze będzie ogólnie bardzo mała. Lepiej wytrenować dwa HMM, powiedzmy HMM1 dla sekwencji obserwacyjnych, w których występuje zdarzenie będące przedmiotem zainteresowania, i HMM2 dla sekwencji obserwacyjnych, w których zdarzenie nie występuje. Następnie podano sekwencję obserwacjiO ty masz

P(HHM1|O)=P(O|HMM1)P(HMM1)P(O)P(O|HMM1)P(HMM1)
i podobnie w przypadku HMM2. Następnie możesz przewidzieć, czy zdarzenie nastąpi
P(HMM1|O)>P(HMM2|O)P(HMM1)P(O|HMM1)P(O)>P(HMM2)P(O|HMM2)P(O)P(HMM1)P(O|HMM1)>P(HMM2)P(O|HMM2).

Oświadczenie : To, co następuje, oparte jest na moim osobistym doświadczeniu, więc weź to za to, czym jest. Jedną z miłych rzeczy w HMM jest to, że pozwalają radzić sobie z sekwencjami o zmiennej długości i efektami o zmiennej kolejności (dzięki ukrytym stanom). Czasami jest to konieczne (jak w wielu aplikacjach NLP). Wydaje się jednak, że z góry zakładałeś, że tylko 5 ostatnich obserwacji jest istotnych dla przewidywania interesującego zdarzenia. Jeśli to założenie jest realistyczne, możesz mieć znacznie więcej szczęścia, stosując tradycyjne techniki (regresja logistyczna, naiwne bayes, SVM itp.) I po prostu używając ostatnich 5 obserwacji jako cech / zmiennych niezależnych. Zazwyczaj tego rodzaju modele będą łatwiejsze do wyszkolenia i (z mojego doświadczenia) dają lepsze wyniki.

alt
źródło
@ alto, dziękuję. Jak mówisz, będę na nie patrzećp=log(P(O|hmm))i wartości takie jak p1=2504,p2=2403,p3=2450itd., więc zauważając znaczny wzrost liczby pmoże być problematyczne. Tymczasem myślę, że trening HMM2 będzie trudny. Liczba punktów, które mam dla HMM2 (brak zdarzenia) będzie znacznie wyższa i może nie być tupotu, a jedynie szum. Co myślisz? PS : Dowolnie wybrałem 5 jako rozmiar okna, prawdopodobnie będzie on dłuższy niż w rzeczywistej implementacji.
Zhubarb
1
@Berkan Nie sądzę, aby którykolwiek z wymienionych przez ciebie problemów (więcej brak sekwencji zdarzeń niż sekwencje zdarzeń i po prostu szum dla żadnego zdarzenia) nie powinien wykluczyć podejścia 2 HMM. Jeśli wziąłeś wcześniejP(HMM1)pod uwagę (zaktualizowałem moją pierwotną odpowiedź w tym względzie), może być konieczne dostosowanie się do niezrównoważonej dystrybucji klas (więcej nie zdarzeń niż zdarzeń), ale istnieje wiele sposobów, aby sobie z tym poradzić. Zobacz odpowiedź dałem na przykład.
alt
@Berkan Jeśli chodzi o rozmiar okna, w oparciu o moje osobiste doświadczenia oczekuję, że to, co powiedziałem w tej sprawie, będzie dotyczyć dowolnego ustalonego rozmiaru okna. Oczywiście wszystkie rzeczy, które powiedziałem, będą musiały zostać przetestowane empirycznie pod kątem konkretnego problemu.
alt
dzięki za aktualizację odpowiedzi, teraz jest o wiele jaśniej. Ponieważ będę pracował z logarytmami, dokonam porównania:log(P(HMM1))+log(P(O|HMM1))>?log(P(HMM2))+log(P(O|HMM2)). Teraz,log(P(HMM1)) jest obliczany przy użyciu algorytmu przekazywania, jak obliczyć log(P(HMM1))? Czy to tylko wyznaczony przeze mnie przeor?
Zhubarb
dzięki za aktualizację odpowiedzi, teraz jest o wiele jaśniej. Ponieważ będę pracował z logarytmami, dokonam porównania:log(P(HMM1))+log(P(O|HMM1))>?log(P(HMM2))+log(P(O|HMM2)). Teraz,log(P(HMM1))jest obliczany przy użyciu algorytmu przesyłania dalej. Czy obliczam log (P (HMM1)) za pomocą prostego MLE na podstawie częstotliwości? tzn. w danym przypadkuHMM1=(52,000)/108,000gdzie licznik to liczba punktów objętych HMM1, a mianownik to rozmiar zbioru danych.
Zhubarb