Gizli markov modelleri öğrenmeye başlıyorum, wiki sayfasında ve github'da çok sayıda örnek var ama olasılıkların çoğu zaten orada (% 70 yağmur değişimi,% 30 durum değişikliği, vb.) .). Yazım denetimi ya da cümleler örnekleri kitap okumak gibi görünüyor ve daha sonra kelimelerin olasılıklarını sıralıyor.Gizli markov modellerinde olasılıkları belirleme yolları nelerdir?
Markov modelinde olasılıkların belirlenmesi için bir yol var mı yoksa önceden hesaplamak için başka bir modele mi gerek var?
Bu soru kapalıysa üzgünüz. Gizli markov modelinin olası dizileri nasıl seçtiğini açık bir şekilde görüyorum ama olasılık kısmı benim için biraz greydir (sık sık sağlandığı için). Örnekler veya herhangi bir bilgi harika olurdu.
Markov modelleri ile aşina olmayanlar için, burada mısın bilinmeyen parametreleri hesaplamak için algoritma bir EM (beklenti maksimizasyonu) aradığınız bir http://en.wikipedia.org/wiki/Viterbi_algorithm (wikipedia dan) örneği ve http://en.wikipedia.org/wiki/Hidden_Markov_model
#!/usr/bin/env python
states = ('Rainy', 'Sunny')
observations = ('walk', 'shop', 'clean')
start_probability = {'Rainy': 0.6, 'Sunny': 0.4}
transition_probability = {
'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},
'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},
}
emission_probability = {
'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},
'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},
}
#application code
# Helps visualize the steps of Viterbi.
def print_dptable(V):
print " ",
for i in range(len(V)): print "%7s" % ("%d" % i),
print
for y in V[0].keys():
print "%.5s: " % y,
for t in range(len(V)):
print "%.7s" % ("%f" % V[t][y]),
print
def viterbi(obs, states, start_p, trans_p, emit_p):
V = [{}]
path = {}
# Initialize base cases (t == 0)
for y in states:
V[0][y] = start_p[y] * emit_p[y][obs[0]]
path[y] = [y]
# Run Viterbi for t > 0
for t in range(1,len(obs)):
V.append({})
newpath = {}
for y in states:
(prob, state) = max([(V[t-1][y0] * trans_p[y0][y] * emit_p[y][obs[t]], y0) for y0 in states])
V[t][y] = prob
newpath[y] = path[state] + [y]
# Don't need to remember the old paths
path = newpath
print_dptable(V)
(prob, state) = max([(V[len(obs) - 1][y], y) for y in states])
return (prob, path[state])
#start trigger
def example():
return viterbi(observations,
states,
start_probability,
transition_probability,
emission_probability)
print example()
ile ilgili çok genel bir görüşe sahiptir. Slaytlardan önce okuduğum bağlantılar gerçekten çok iyiydi. Sahip olduğum soruların birçoğunu açıkladılar ama olasılıkın nasıl anlaşıldığı konusunda emin değilim. Örneğin, slaytta, 41 her bir düğüme (1/3,1/2, vb.) Sahip olma olasılıkları vardır. Bunları nasıl alacağımı anlamaya çalışıyorum ve bunları güncel tutmaya devam ediyorum. Belki de slaytlarda ve onu özlüyorum, bunun için yeni oluyorum, bu yüzden hafta sonlarında daha dikkatli çalışacağım. Slaytlar ve cevap için teşekkürler. – Lostsoul
@Lostsoul - Doğru, 41. slayt ve bu bölge HMM'lerin genel olarak nasıl çalıştığını açıklıyor. 68. slayt etrafında, bir dizi gözlemden parametrelerin (topluca λ olarak anılacaktır) tahmin edilmesine nasıl başladığınızı anlatmaya başlar. Ve bunu yapan algoritma Baum-Welch. – Dusty
Tekrar teşekkürler Çok teşekkür edemem. Math'ım berbat, bu yüzden neler olup bittiğini anlamak için birkaç slayt okumamı istedi (ve bir sürü googling). Ben matematiği tam olarak anlamıyorum ama şimdi mantığı alıyorum. Tekrar çok teşekkürler, Dusty. – Lostsoul