牛mm細心給我講了乙個小時,終於明白它的含義,然後花了一兩節分布式資料庫的課實現了。當時牛mm還說不可能這麼快實現,結果不可能事還是發生了。發現python果真非常好用。不明白此演算法可以看這篇blog
初始化方法:
viterbi演算法函式
結果列印輸出函式:
"""nodes format path is [weight,[pos1,pos2....]]""" def result(nodes,path,edcode="utf-8"): realpath = path[0][1] resultprint(nodes,realpath,edcode) """nodes format path is [pos1,pos2....]""" def resultprint(nodes,path,edcode="utf-8"): for i in xrange(len(nodes)): print nodes[i].decode(edcode),"/",path[i].decode(edcode)
下面是測試**:
aa = convertgbktoutf("球球") bb = convertgbktoutf("娃娃") cc = convertgbktoutf("吃飯") dd = convertgbktoutf("好") ee = convertgbktoutf("dddwieoewkem") dictions = ,bb:,"@@@":400} posdi = ,"s":,"v":,"@@@":100} posw = ,bb:,cc:,"@@@":10002} nodes = [aa,bb,cc,ee,dd,bb,aa,cc] path = viterbi(nodes,posw,posdi,3,0.01) print path result(nodes,path)
這裡不要問為啥要encode,然後再decode 因為只有這樣才能在螢幕上列印出中文。
簡單理解viterbi演算法
viterbi演算法其實就是多步驟每步多選擇模型的最優選擇問題,其在每一步的所有選擇都儲存了前續所有步驟到當前步驟當前選擇的最小總代價 或者最大價值 以及當前代價的情況下前繼步驟的選擇。依次計算完所有步驟後,通過回溯的方法找到最優選擇路徑。符合這個模型的都可以用viterbi演算法解決。隱含的身體狀...
維特比演算法(Viterbi)
import numpy as np state transfer np.array 0.5,0.2,0.3 0.3,0.5,0.2 0.2,0.3,0.5 狀態轉移矩陣 observe prob np.array 0.5,0.5 0.4,0.6 0.7,0.3 觀測概率矩陣 initial np....
維特比演算法(Viterbi)
編輯 維特比演算法是一種 動態規劃演算法用於尋找最有可能產生觀測事件序列的 維特比路徑 隱含狀態序列,特別是在馬爾可夫資訊源上下文和隱馬爾可夫模型中。術語 維特比路徑 和 維特比演算法 也被用於尋找觀察結果最有可能解釋相關的動態規劃演算法。例如在統計句法分析中動態規劃演算法可以被用於發現最可能的上下...