python 隐马尔可夫链
生活随笔
收集整理的這篇文章主要介紹了
python 隐马尔可夫链
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
馬爾科夫轉(zhuǎn)換矩陣
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觀測狀態(tài)
obs=('soggy','dryish','dry') # -*- coding: utf-8 -*- """ 作者:羅干 Thomas luo 代碼優(yōu)雅是非常必要的 學(xué)習(xí)算法的最佳方式是分析代碼 偽代碼與代碼的區(qū)別等價(jià)于猴子與人之間的區(qū)別 """ from numpy import * import pandas as pddef viterbi(obs,states,start_p,trans_p,emit_p):v=[]fst=obs[0]vn=emit_p[fst]*start_p#計(jì)算初始狀態(tài)v.append(vn)for t in range(1,len(obs)):tp=emit_p[obs[t]] #通過觀測狀態(tài),提取混淆矩陣的某一列cc=[]for y in states:#v[t-1]是上一個(gè)狀態(tài)#trans_p[y]是其他狀態(tài)轉(zhuǎn)換到y(tǒng)狀態(tài)轉(zhuǎn)換概率,簡言之就所有其他狀態(tài)的的條件概率gv=v[t-1]*trans_p[y]*tp[y]#如果執(zhí)行這一行代碼,就是經(jīng)典的隱馬爾科夫鏈cc.append(gv.sum())#如果這一行代碼就是威比特算法,一言以蔽之,威比特就職最大值,經(jīng)典算法就是求和#cc.append(gv.max())cc1=pd.Series(cc,index=states)v.append(cc1)result=[]for vector in v :p=vectorp1=p.sort_values(ascending=False) p2=p1[:1]result.append(dict(p2))return resultstates=('Sunny','Cloudy','Rainy') obs=('soggy','dryish','dry') start_p=pd.Series({'Sunny':0.63,'Cloudy':0.17,'Rainy':0.20}) 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) [{'Rainy': 0.1}, {'Cloudy': 0.013656250000000002}, {'Sunny': 0.0061509375}]計(jì)算結(jié)果:雨,云,晴天
總結(jié)
以上是生活随笔為你收集整理的python 隐马尔可夫链的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以太坊挖矿
- 下一篇: Ubuntu 调节屏幕亮度