6

숨겨진 마코프 모델을 배우기 시작하고 wiki 페이지뿐만 아니라 github에도 예제가 많이 있지만 대부분의 확률은 이미 있습니다 (비 70 %, 상태 변경 가능성 30 % 등).). 맞춤법 검사 또는 문장 예제는 책을 연구하고 단어의 확률을 랭킹하는 것처럼 보입니다.숨겨진 마코프 모델의 확률을 결정하는 방법은 무엇입니까?

그래서 마코프 모델에는 확률을 계산하는 방법이 포함되어 있습니까? 아니면 사전 계산을위한 다른 다른 모델을 생각하고 있습니까?

죄송합니다.이 질문은 꺼져 있습니다. 나는 숨겨진 마르코프 모델이 가능한 시퀀스를 선택하는 방법을 간단하게 생각하지만, 확률 부분은 나에게 조금 회색이다 (종종 제공되기 때문에). 예 또는 어떤 정보가 좋을 것입니다.

마르코프 모델에 익숙하지 않은 사람들을 위해

, 여기 당신의 알 수없는 매개 변수를 계산하는 알고리즘 전각 (기대 극대화)를 찾고 http://en.wikipedia.org/wiki/Viterbi_algorithm (위키 백과에서) 예와 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() 

답변

4

입니다 관찰 된 서열 세트. 가장 일반적으로 사용되는 알고리즘은 Baum-Welch 알고리즘이며 forward-backward 알고리즘을 사용합니다.

참조를 위해 이전에 HMM을 검토하는 데 사용한 set of slides입니다. 전방 - 후진, 비터 비 및 바움 - 웰치에 대한 개요가 있습니다.

+0

대단히 감사합니다. 슬라이드 전에 읽었던 링크가 정말 좋았습니다. 그들은 내가 가진 질문을 분명히했지만 분명히 확률이 계산되는 방법을 여전히 확신 할 수 없습니다. 예를 들어, 슬라이드 41에서는 각 노드 (1/3,1/2 등)에 확률이 있습니다. 나는 그것들을 얻는 방법을 알아 내려고 노력하고 있으며 그것들을 계속 업데이트하려고 노력하고있다. 슬라이드에있을 수도 있고 놓치 겠어. 주말 내내 더 신중하게 공부할거야. 슬라이드와 답변에 감사드립니다. – Lostsoul

+0

@Lostsoul - 오른쪽, 슬라이드 41과 그 영역은 HMM이 일반적으로 어떻게 작동 하는지를 설명하는 것입니다. 슬라이드 68 주변에서 일련의 관측치로부터 매개 변수를 추정하는 방법에 대해 이야기하기 시작합니다 (집합 적으로 λ라고 함). 그리고 그 알고리즘은 Baum-Welch입니다. – Dusty

+0

다시 한번 감사드립니다. 감사합니다. 내 수학은 짜증나. 그래서 슬라이드의 여러 가지 판독 결과 (그리고 검색 속도가 굉장히 높음)로 인해 진행 상황을 이해할 수있었습니다. 나는 수학을 완전히 이해하지 못하고 있지만 지금 논리를 얻습니다. 너무 고마워, 더스티. – Lostsoul

관련 문제