python vertibi算法實(shí)現(xiàn)原理解析
題目闡釋
viterbi算法實(shí)現(xiàn)。 用python實(shí)現(xiàn)viterbi的hidden state 和 表現(xiàn)層的轉(zhuǎn)移動態(tài)規(guī)劃問題,歸結(jié)到相鄰兩個(gè)step之間存在 state轉(zhuǎn)移概率,state2emibission轉(zhuǎn)移概率。
計(jì)算后可以得到每個(gè)step的每個(gè)state max_probablity
由于step_n依賴于 step_n-1,跟 step_n-2無關(guān),所以可以一直如此往復(fù),得到最后的max_prob
整個(gè)問題抽象為,下一個(gè)step依賴于上一個(gè)step的所有state,所以只需要計(jì)算每一層step的所有state的prbo即可。
難點(diǎn)
三層for循環(huán),為了保留,計(jì)算每個(gè)step的state的概率,所以要 next_state 嵌套在 source_state之外。
states=['Rainy','Sunny']
observations=['walk','shop','clean']
observations=('walk','clean','walk')
emission_probability={'Rainy':{'walk':0.1,'shop':0.4,'clean':0.5},
'Sunny': {'walk': 0.6, 'shop': 0.3, 'clean': 0.1}
}
trans_probability={'Rainy':{'Rainy':0.7,'Sunny':0.3},
'Sunny':{'Rainy':0.4,'Sunny':0.6}
}
start_probability={'Rainy':0.6,'Sunny':0.4}
def vertibi(states,objservations,start_prob,trans_prob,emi_prob):
T={state:[start_prob[state],[state],start_prob[state]] for state in states}
for objservation in objservations:
U={}
for next_state in states:
total=0
argmax=None
valmax=0
for source_state in states:
prob,v_path,v_prob=T[source_state]
p=emi_prob[source_state][objservation]*trans_prob[source_state][next_state]
prob*=p
v_prob*=p
if v_prob>valmax:
valmax=v_prob
argmax=v_path+[next_state]
total+=prob
U[next_state]=[total,argmax,valmax]
T=U
total = 0
argmax = None
valmax = 0
for state in states:
prob, v_path, v_prob=T[state]
if v_prob>valmax:
argmax=v_path
total=prob
valmax=v_prob
return total,argmax,valmax
total,argmax,valmax=vertibi(states,observations,start_probability,trans_probability,emission_probability)
print(total)
print(argmax)
print(valmax)以上就是python vertibi算法實(shí)現(xiàn)原理解析的詳細(xì)內(nèi)容,更多關(guān)于python vertibi算法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用Pandas讀取表格行數(shù)據(jù)判斷是否相同的方法
這篇文章主要給大家介紹了關(guān)于利用Pandas讀取表格行數(shù)據(jù)判斷是否相同的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
利用Python通過獲取剪切板數(shù)據(jù)實(shí)現(xiàn)百度劃詞搜索功能
大家是不是嫌棄每次打開百度太麻煩?今天教大家利用Python通過獲取剪切板數(shù)據(jù)實(shí)現(xiàn)百度劃詞搜索功能,用程序直接打開網(wǎng)頁,需要的朋友可以參考下2021-06-06
講解Python的Scrapy爬蟲框架使用代理進(jìn)行采集的方法
這篇文章主要介紹了講解Python的Scrapy爬蟲框架使用代理進(jìn)行采集的方法,并介紹了隨機(jī)使用預(yù)先設(shè)好的user-agent來進(jìn)行爬取的用法,需要的朋友可以參考下2016-02-02
Pycharm內(nèi)存設(shè)置方式(解決內(nèi)存不足的問題)
本文詳細(xì)介紹了如何在PyCharm設(shè)置中調(diào)整內(nèi)存大小以解決內(nèi)存不足的問題,并提供了查看內(nèi)存使用情況的方法,幫助用戶徹底解決PyCharm內(nèi)存不足的問題2026-05-05
Python使用MySQLdb for Python操作數(shù)據(jù)庫教程
這篇文章主要介紹了Python使用MySQLdb for Python操作數(shù)據(jù)庫教程,詳細(xì)講述了MySQLdb的用法,針對Python操作MySQL數(shù)據(jù)庫程序設(shè)計(jì)具有很好的參考借鑒價(jià)值,需要的朋友可以參考下2014-10-10
使用python實(shí)現(xiàn)簡單爬取網(wǎng)頁數(shù)據(jù)并導(dǎo)入MySQL中的數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了如何使用 python 實(shí)現(xiàn)簡單爬取網(wǎng)頁數(shù)據(jù)并導(dǎo)入 MySQL 中的數(shù)據(jù)庫,對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-06-06

