EWzIRD/L/z5

From WikiZMSI

< EWzIRD | L

Na zajęciach

  • Wejść na stroną Weather Underground. Z górnego menu wybrać: History Data, a następnie znaleźć dane pogodowe dla Szczecina (dowolny dzień miesiąca września 2009). Zapoznać się z danymi z tabeli "Hourly Observations", która zawiera zapisy pogodowe z częstością co pół godziny.
  • Pobrać i rozpakować plik: weather_hmm.zip zawierający dane pogodowe dla całego miesiąca (pobrane z w/w strony) oraz skrypty MATLABa pomocne do rozpoczęcia pracy.
  • Uruchomić skrypt weatherData.m podając ścieżkę do pliku z danymi oraz liczbę q (liczba przedziałów dyskretyzacji zmiennych ciągłych, np. q = 7). Zapoznać się z wynikami zwracanymi przez ten skrypt.
  • Zadaniem będzie opracowanie Ukrytego Modelu Markowa traktując wrześniową pogodę w Szczecinie jako źródło Markowowskie.
  • Zbiór stanów w modelu będzie podyktowany przez wartości zmiennej pogodowej "Condition" pogrupowane do takich możliwości: {Clear, Fog, Light Rain, Rain, Cloudy, Unknown}. Zbiór obserwacji będzie wyznaczony przez produkt kartezjański wybranych zmiennych: temperatura, wilgotność, ciśnienie, prędkość wiatru (po dyskretyzacji). Np. czwórka (4, 6, 4, 7) to możliwa pojedyncza obserwacja, którą mógł wyprodukować np. stan "Light Rain".
  • Zadaniem gotowego modelu będzie odkrywanie ukrytej ścieżki stanów pogodowych ("Condition") mając daną sekwencję obserwacji. Będzie to można robić dwojako: podejściem z wielkościami gamma lub algorytmem Viterbi'ego.
  • Dane należy podzielić na sekwencje uczące i testujące np. w proporcji 70:30. Długość pojedynczej sekwencji można ustalić np. na T = 12, 24, 48 (zważywszy na fakt, że notowania są co pół godziny).
  • Należy napisać skrypt realizujący strojenie modelu Markova za pomocą reestymacji Bauma-Welcha. Potrzebny będzie skrypt pomocniczy losujący początkowy model Markova (odpowiednie macierze sumujące się wierszami do jedności). Skrypt do reestymacji Bauma-Welcha powinien przyjmować na wejście: początkowe wartości A, B, pi; zbiór sekwencji obserwacji na potrzeby uczenia; liczbę zadanych iteracji.
  • Ze względu na fakt, że idąc od losowej macierzy B możemy w wyniku reestymacji dostać model, który inaczej ponazywa poszczególne stany (permutacja nazw, numerów stanów, np. "Clear" -> "Cloudy", "Rain" -> "Unknown", itp.), można przeprowadzić wstępne nadzorowane uczenie macierzy B. Do tego celu można wykorzystać gotowy skrypt partialB.m. Po jego wykonaniu, macierz B należy zepsilonować.

Do domu

  • Napisać skrypt realizujący algorytm Forward-Backward ze skalowaniem.
  • Rozszerzyć skrypt reestymacji Bauma-Welcha (lub napisać nowy) o wariant ze skalowaniem. Sprawdzić, czy wyniki otrzymywane z i bez skalowania są takie same dla odpowiednio krótkich sekwencji. Ustawiać liczbę iteracji rzędu: 10, 20, 50.
  • W szczególności sprawdzić także, czy model po nauczeniu lepiej naśladuje zjawisko niż początkowy model losowy (można tu patrzeć na prawdopodobieństwo dowolnej sekwencji obserwacji pod warunkiem modelu, lub już na zbiorcze wyniki podejścia z gammami lub Viterbi'ego).
  • Przetestować gotowy model dla sekwencji testowych, tj. odkrywać ukryte ścieżki stanów pogodywch na podstawie sekwencji obserwacji. Przedstawić zbiorcze procentowe wyniki poprawności (procent poprawnych stanów, procent poprawnych całych ścieżek, średnia poprawna długość podciągu).
  • (zadanie premiowane) Spróbować podnieść poprawność procentową poprzez eksperymentalne wybranie innych zmiennych obserwacyjnych (skrypt weatherData.m).