stackoverflow.com

Senin probleminde hidden state olmadigi icin HMM'e gerek yok. Sequence prediction icin HMM falan kalmadi pek machine learning camiasinda. Recurrent neural networklere bakmani öneririm (LSTM, GRU vs.).
HMM'de israr ediyorsan, yapman gereken seyler:
- k-fold cross validation: 10 fold olur genelde. Datani random 10 esit parcaya bol. 9 parcasini training al, kalanina dokunma (en son test olarak kullanicaksin).
- Training datasinda her class icin bir HMM train et. Bu isi EM ile yapiyosun. EM algoritmasi MATLABda vardir herhalde.
- Sistemini test etmek icin test datasindaki her sequence icin her class icin likelihood (numerik problemler cikmasin diye log-likelihood olur bu genelde) hesapla. Maksimum likelihood veren kategori de o observation icin prediction'in oluyor.
- Bu 3 maddeyi her 10 fold icin tekrar et.
Opsiyonel.
- HMM'de Gaussian Mixture Model kullanirsin buyuk ihtimal. GMM parametrelerinden biri de kac tane Gaussian olacagi (number of mixtures). Soruna bilimsel yaklasmak istiyorsan bu parametreyi optimize etmek icin CV icine bi tane daha CV yapman gerekir (nested cross validation).
- Eger kategorilerin balanced degilse, CV icin stratified sampling (kategorilerdeki data oranini sabit tutarak rastgele bölmece) yapman daha saglikli olur.
Sorudan bagimsiz: Machine learning ile ugrasmaya devam etmeyi planliyorsan, MATLAB'i birakip python'a gecmeni öneririm.


hmm'de ısrar etmek durumundayım çünkü değişiklik şansım yok bundan sonra. "her class için hmm train etme" noktasında problemim var benim. çünkü prediction probleminde sequence'ları nasıl class'lara böleceğim hakkında bir fikrim yok. atıyorum mesela bir sequence 1 - 3 - 4 - 5 category'lerini takip ediyorsa ben bunu 5'ler class'ında mı kabul etmeliyim? yani son elemanına göre tüm sequence'ları gruplayıp sonra bunları mı train etmeliyim. anlayamadığım asıl kısım bu.
bir de maximum likelihood'unu hesaplarken aklıma takılan bir şey var. ben c1c2c3...ct-1 category sırasını biliyorum ve ct'nin değerini tahmin etmeye çalışıyorum. sadece c sırasını kullanarak nasıl estimation alabilirim ki? bunlar observation'larım benim. hidden state de user'ın hangi hex içinde check-in yaptığı.


Öncelikle verdigin örnekteki 1,3,4 ve 5 kategori degil state. Kategori herhangi bir seriye ait bir etiket. 1-3-4-5'in kategorisi (class) A, 3-4-5-6'ninki B, 2-3-4'unku A ... gibi.
Yapmaya calistigin sey supervised learning. Yani elinde annotated bi training datasi olmasi lazim.
Kafamdan bi problem uyduruyorum:
Olasi mekanlar 1'den 10'a kadar diyelim. 1,3,4,5,8 restoran ve kafeler. 2 ve 6 kitapcilar. 7, 9, 10 da barlar olsun.
Elindeki data söyle bir sey olmali:
6-4-8-5 serisine sahip bir kullanici "disarida yemek yemeyi seven biri" kategorisinde.
7-9 serisine sahip bir kullanici "icki icen" kategorisinde
...
Yukaridaki datayi algortimaya ögretiyorsun. Algoritmaya ögretmedigin yeni bir örnegi test etmek istiyorsun:
10-3-4 serisine sahip bir kullanici hangi kategoridedir gibi.
Bir seri bircok kategoriye de ait olabilir yukaridaki örnek icin (multi-label classification). O durumda bana özelden yaz. HMM ile nasil olur dusunmem lazim.
Özet: 1-3-4-5 serisinin hangi kategoriye ait oldugunun sana verilmesi lazim. O statelerin ne anlama geldigine bagli olarak senin karar vericegin bir sey de olabilir. Ama eger öyle olsaydi (son state'in ayni zamanda kategoriyi belirlemesini önermissin) machine learning'e ihtiyacin olmazdi. Herhangi bir serinin son state'ine bakip hemen söylerdin kategoriyi.
