[英]How to visualize a hidden Markov model in Python?
我認為這個問題已經很清楚了。 我想在 Python 中制作一個隱藏的馬爾可夫 model 並繪制它的可視化 model。 所以,它是這樣的圖片:
有沒有什么模塊可以做到這一點? 我已經用谷歌搜索了它並沒有發現任何東西。
來自graphviz的dot
包是我發現的最好的。 語法簡單,比xml簡單。
Python 庫pomegranate對隱馬爾可夫模型有很好的支持。 它包括用於定義此類模型、從數據中學習、進行推理和可視化轉換圖的功能(如您在此處要求的那樣)。
下面是用於定義 model 並繪制狀態和轉換的示例代碼。 圖像 output 將是這樣的:
from pomegranate import HiddenMarkovModel, State, DiscreteDistribution
from matplotlib import pyplot as plt
def build_model():
d1 = DiscreteDistribution({'A' : 0.50, 'B' : 0.50})
d2 = DiscreteDistribution({'A' : 0.10, 'B' : 0.90})
d3 = DiscreteDistribution({'A' : 0.90, 'B' : 0.10})
s1 = State(d1, name="s1")
s2 = State(d2, name="s2")
s3 = State(d3, name="s3")
model = HiddenMarkovModel(name='my model')
model.add_states(s1, s2, s3)
model.add_transition(model.start, s1, 1.0)
model.add_transition(s1, s1, 0.7)
model.add_transition(s1, s2, 0.3) # s1->s2
model.add_transition(s2, s2, 0.8)
model.add_transition(s2, s3, 0.0) # no transition from s2 to s3
model.add_transition(s1, s3, 0.1) # indirect from s1 to s3
model.add_transition(s3, s1, 0.1) # indirect from s3 to s1
model.add_transition(s3, s3, 0.9)
model.add_transition(s3, model.end, 0.1)
model.start.name = 'start'
model.end.name = 'end'
model.bake()
return model
model = build_model()
fig, ax = plt.subplots(1)
model.plot(ax=ax, precision=2)
fig.savefig('model.png')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.