python 隱馬爾可夫鏈

2021-08-24 20:47:57 字數 1961 閱讀 8318

馬爾科夫轉換矩陣

out

[72]:

sunny

cloudy

rainy

sunny 0.50 0.375 0.125

cloudy 0.25 0.125 0.625

rainy 0.25 0.375 0.375

混淆矩陣

dry  dryish  damp  soggy

sunny 0.60 0.20 0.15 0.05

cloudy 0.25 0.25 0.25 0.25

rainy 0.05 0.10 0.35 0.50

初始向量概率

sunny     0.63

cloudy 0.17

rainy 0.20

dtype: float64

觀測狀態

obs=('soggy','dryish','dry')
# -*- coding: utf-8 -*-

"""thomas luo

**優雅是非常必要的

學習演算法的最佳方式是分析**

偽**與**的區別等價於猴子與人之間的區別

"""from numpy import *

import pandas as pd

defviterbi

(obs,states,start_p,trans_p,emit_p):

v=fst=obs[0]

vn=emit_p[fst]*start_p#計算初始狀態

for t in range(1,len(obs)):

tp=emit_p[obs[t]] #通過觀測狀態,提取混淆矩陣的某一列

cc=for y in states:

#v[t-1]是上乙個狀態

#trans_p[y]是其他狀態轉換到y狀態轉換概率,簡言之就所有其他狀態的的條件概率

gv=v[t-1]*trans_p[y]*tp[y]

#如果執行這一行**,就是經典的隱馬爾科夫鏈

#如果這一行**就是威位元演算法,一言以蔽之,威位元就職最大值,經典演算法就是求和

cc1=pd.series(cc,index=states)

result=

for vector in v :

p=vector

p1=p.sort_values(ascending=false)

p2=p1[:1]

return result

states=('sunny','cloudy','rainy')

obs=('soggy','dryish','dry')

start_p=pd.series()

trans_p=pd.dataframe([[0.50,0.375,0.125],

[0.25,0.125,0.625],

[0.25,0.375,0.375]],

index=('sunny','cloudy','rainy'),

columns=('sunny','cloudy','rainy'))

emit_p=pd.dataframe([ [0.60,0.20,0.15,0.05],

[0.25,0.25,0.25,0.25],

[0.05,0.10,0.35,0.50]],

index=('sunny','cloudy','rainy'),

columns=('dry','dryish','damp','soggy'))

tt=viterbi(obs,states,start_p,trans_p,emit_p)

print(tt)

[, , ]
計算結果:雨,雲,晴天

隱馬爾可夫模型

隱 馬爾可夫模型 hidden markov model,hmm 作為一種統計分析模型,創立於20世紀70年代。80 年代得到了傳播和發展,成為訊號處理的乙個重要方向,現已成功地用於語音識別 行為識別,文字識別以及故障診斷等領域。隱馬爾可夫模型是馬爾可夫鏈的一種,它的狀態不能直接觀察到,但能通過觀測...

隱馬爾可夫模型

對隱馬爾可夫模型的解釋,個人覺得一句簡單概括就是 在馬爾可夫鏈的情況下對每乙個狀態都加入乙個單獨輸出口,而我們把這個輸出口定為可視視窗,可把馬爾可夫鏈放到裡面藏起來。ok!這樣就是知道隱馬爾可夫模型的結構了。通過如下例子來說明hmm的含義。假定乙個暗室中有n個口袋,每個口袋中有m種不同顏色的球,乙個...

隱馬爾可夫模型

搖色子的比喻很好 它解釋了模型的概念 模型的n個狀態 s 對應於色子的種類 隱狀態 真實不可見狀態s的序列,是每次用的色子種類d4 d6 d8組成的序列 觀測狀態 o 是可見的狀態,這裡是色子搖出的點數 觀測概率 是當確定用d4 d6 d8搖的色子的種類,求產生某種點數的概率 如 d4產生點數1的概...