簡體   English   中英

如何在 Python 中可視化隱藏的馬爾可夫 model?

[英]How to visualize a hidden Markov model in Python?

我認為這個問題已經很清楚了。 我想在 Python 中制作一個隱藏的馬爾可夫 model 並繪制它的可視化 model。 所以,它是這樣的圖片:

模型

有沒有什么模塊可以做到這一點? 我已經用谷歌搜索了它並沒有發現任何東西。

來自graphvizdot包是我發現的最好的。 語法簡單,比xml簡單。

雖然我從未使用隱馬爾可夫模型,但當我需要可視化圖形(指示,帶標簽,顏色等)時,我使用Gephi ,GUI圖形瀏覽器/編輯器並以編程方式生成圖形為GraphML文件,是一種基於XML的格式。 Python具有良好的XML處理工具(在標准庫lxml中 )。 Gephi將一些<data>子元素識別為節點和邊的位置,顏色和標簽。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM