Zaczynam uczyć się ukrytych modeli Markowa i na stronie wiki, a także na githubie jest wiele przykładów, ale większość prawdopodobieństw już tam jest (70% zmiana deszczu, 30% szansa na zmianę stanu, itp. .). Przykłady sprawdzania pisowni lub zdania wydają się studiować książki, a następnie klasyfikować prawdopodobieństwa słów.Jakie są sposoby decydowania o prawdopodobieństwach w ukrytych modelach Markowa?
Tak więc model Markowa zawiera sposób obliczenia prawdopodobieństw, czy też przypuszczamy, że do jakiegoś innego modelu, aby go wstępnie obliczyć?
Przepraszam, jeśli to pytanie jest wyłączone. Myślę, że jest to proste, jak ukryty model Markowa wybiera prawdopodobne sekwencje, ale część prawdopodobieństwa jest nieco szara dla mnie (ponieważ jest często dostarczana). Przykłady lub dowolne informacje byłyby świetne.
Dla tych, którzy nie znają modeli Markowa, oto przykład (z Wikipedii) http://en.wikipedia.org/wiki/Viterbi_algorithm i 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()
Dziękuję bardzo. Linki, które przeczytałem przed slajdami, były naprawdę dobre. Zrobili wiele pytań, które miałem, ale nadal nie jestem pewien, jak ustalono prawdopodobieństwo. Na przykład na slajdzie 41 mają prawdopodobieństwa dla każdego węzła (1/3,1/2 itd.). Próbuję dowiedzieć się, jak je zdobyć i aktualizować je. Być może na slajdach i brakuje mi tego, mam na ten temat nowości, więc zamierzam przyjrzeć się temu uważniej podczas weekendu. Dziękuję za slajdy i odpowiedź. – Lostsoul
@ Lostsoul - Prawo, slajd 41 i ten region wyjaśnia właśnie, jak działa HMM w ogóle. Około slajdu 68 zaczyna mówić o tym, jak idziesz o oszacowanie parametrów (łącznie określanych jako λ) z zestawu obserwacji. A algorytm, który to robi, to Baum-Welch. – Dusty
Jeszcze raz dziękuję. Nie mogę ci wystarczająco podziękować. Moja matematyka jest do bani, więc zajęło mi kilka odczytów slajdu (i dużo googlowania), aby zrozumieć, co się dzieje. Nie w pełni rozumiem matematykę, ale mam teraz logikę. Jeszcze raz dziękuję, Dusty. – Lostsoul