最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)隱馬爾可夫模型的前向后向算法的示例代碼

 更新時(shí)間:2019年12月31日 11:56:52   作者:潤(rùn)°  
這篇文章主要介紹了Python實(shí)現(xiàn)隱馬爾可夫模型的前向后向算法,本文通過實(shí)例代碼給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

本篇文章對(duì)隱馬爾可夫模型的前向和后向算法進(jìn)行了Python實(shí)現(xiàn),并且每種算法都給出了循環(huán)和遞歸兩種方式的實(shí)現(xiàn)。

前向算法Python實(shí)現(xiàn)

循環(huán)方式

import numpy as np
def hmm_forward(Q, V, A, B, pi, T, O, p):
  """
  :param Q: 狀態(tài)集合
  :param V: 觀測(cè)集合
  :param A: 狀態(tài)轉(zhuǎn)移概率矩陣
  :param B: 觀測(cè)概率矩陣
  :param pi: 初始概率分布
  :param T: 觀測(cè)序列和狀態(tài)序列的長(zhǎng)度
  :param O: 觀測(cè)序列
  :param p: 存儲(chǔ)各個(gè)狀態(tài)的前向概率的列表,初始為空
  """
  for t in range(T):
    # 計(jì)算初值
    if t == 0:
      for i in range(len(Q)):
        p.append(pi[i] * B[i, V[O[0]]])
    # 初值計(jì)算完畢后,進(jìn)行下一時(shí)刻的遞推運(yùn)算
    else:
      alpha_t_ = 0
      alpha_t_t = []
      for i in range(len(Q)):
        for j in range(len(Q)):
          alpha_t_ += p[j] * A[j, i]
        alpha_t_t.append(alpha_t_ * B[i, V[O[t]]])
        alpha_t_ = 0
      p = alpha_t_t
  return sum(p)
# 《統(tǒng)計(jì)學(xué)習(xí)方法》書上例10.2
Q = [1, 2, 3]
V = {'紅':0, '白':1}
A = np.array([[0.5, 0.2, 0.3], [0.3, 0.5, 0.2], [0.2, 0.3, 0.5]])
B = np.array([[0.5, 0.5], [0.4, 0.6], [0.7, 0.3]])
pi = [0.2, 0.4, 0.4]
T = 3
O = ['紅', '白', '紅']
p = []
print(hmm_forward(Q, V, A, B, pi, T, O, p)) # 0.130218

遞歸方式

import numpy as np
def hmm_forward_(Q, V, A, B, pi, T, O, p, T_final):
  """
  :param T_final:遞歸的終止條件
  """
  if T == 0:
    for i in range(len(Q)):
      p.append(pi[i] * B[i, V[O[0]]])
  else:
    alpha_t_ = 0
    alpha_t_t = []
    for i in range(len(Q)):
      for j in range(len(Q)):
        alpha_t_ += p[j] * A[j, i]
      alpha_t_t.append(alpha_t_ * B[i, V[O[T]]])
      alpha_t_ = 0
    p = alpha_t_t
  if T >= T_final:
    return sum(p)
  return hmm_forward_(Q, V, A, B, pi, T+1, O, p, T_final)

Q = [1, 2, 3]
V = {'紅':0, '白':1}
A = np.array([[0.5, 0.2, 0.3], [0.3, 0.5, 0.2], [0.2, 0.3, 0.5]])
B = np.array([[0.5, 0.5], [0.4, 0.6], [0.7, 0.3]])
pi = [0.2, 0.4, 0.4]
T = 0
O = ['紅', '白', '紅']
p = []
T_final = 2 # T的長(zhǎng)度是3,T的取值是(0時(shí)刻, 1時(shí)刻, 2時(shí)刻)
print(hmm_forward_(Q, V, A, B, pi, T, O, p, T_final))

后向算法Python實(shí)現(xiàn)

循環(huán)方式

import numpy as np
def hmm_backward(Q, V, A, B, pi, T, O, beta_t, T_final):
  for t in range(T, -1, -1):
    if t == T_final:
      beta_t = beta_t
    else:
      beta_t_ = 0
      beta_t_t = []
      for i in range(len(Q)):
        for j in range(len(Q)):
          beta_t_ += A[i, j] * B[j, V[O[t + 1]]] * beta_t[j]
        beta_t_t.append(beta_t_)
        beta_t_ = 0
      beta_t = beta_t_t
    if t == 0:
      p=[]
      for i in range(len(Q)):
        p.append(pi[i] * B[i, V[O[0]]] * beta_t[i])
      beta_t = p
  return sum(beta_t)
# 《統(tǒng)計(jì)學(xué)習(xí)方法》課后題10.1
Q = [1, 2, 3]
V = {'紅':0, '白':1}
A = np.array([[0.5, 0.2, 0.3], [0.3, 0.5, 0.2], [0.2, 0.3, 0.5]])
B = np.array([[0.5, 0.5], [0.4, 0.6], [0.7, 0.3]])
pi = [0.2, 0.4, 0.4]
T = 3
O = ['紅', '白', '紅', '白']
beta_t = [1, 1, 1]
T_final = 3
print(hmm_backward_(Q, V, A, B, pi, T, O, beta_t, T_final)) # 0.06009

遞歸方式

import numpy as np
def hmm_backward(Q, V, A, B, pi, T, O, beta_t, T_final):
  if T == T_final:
    beta_t = beta_t
  else:
    beta_t_ = 0
    beta_t_t = []
    for i in range(len(Q)):
      for j in range(len(Q)):
        beta_t_ += A[i, j] * B[j, V[O[T+1]]] * beta_t[j]
      beta_t_t.append(beta_t_)
      beta_t_ = 0
    beta_t = beta_t_t
  if T == 0:
    p=[]
    for i in range(len(Q)):
      p.append(pi[i] * B[i, V[O[0]]] * beta_t[i])
    beta_t = p
    return sum(beta_t)
  return hmm_backward(Q, V, A, B, pi, T-1, O, beta_t, T_final)
jpgQ = [1, 2, 3]
V = {'紅':0, '白':1}
A = np.array([[0.5, 0.2, 0.3], [0.3, 0.5, 0.2], [0.2, 0.3, 0.5]])
B = np.array([[0.5, 0.5], [0.4, 0.6], [0.7, 0.3]])
pi = [0.2, 0.4, 0.4]
T = 3
O = ['紅', '白', '紅', '白']
beta_t = [1, 1, 1]
T_final = 3
print(hmm_backward_(Q, V, A, B, pi, T, O, beta_t, T_final)) # 0.06009

這里我有個(gè)問題不理解,這道題的正確答案應(yīng)該是0.061328,我計(jì)算出的答案和實(shí)際有一點(diǎn)偏差,我跟蹤了代碼的計(jì)算過程,發(fā)現(xiàn)在第一次循環(huán)完成后,計(jì)算結(jié)果是正確的,第二次循環(huán)后的結(jié)果就出現(xiàn)了偏差,我懷疑是小數(shù)部分的精度造成,希望有人能給出一個(gè)更好的解答,如果是代碼的問題也歡迎指正。

以上所述是小編給大家介紹的Python實(shí)現(xiàn)隱馬爾可夫模型的前向后向算法,希望對(duì)大家有所幫助!

相關(guān)文章

  • python 文件操作api(文件操作函數(shù))

    python 文件操作api(文件操作函數(shù))

    總是記不住API。昨晚寫的時(shí)候用到了這些,但是沒記住,于是就索性整理一下吧,方便需要的朋友
    2016-08-08
  • Python+AutoIt實(shí)現(xiàn)界面工具開發(fā)過程詳解

    Python+AutoIt實(shí)現(xiàn)界面工具開發(fā)過程詳解

    這篇文章主要介紹了Python+AutoIt實(shí)現(xiàn)界面工具開發(fā)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python內(nèi)置模塊hashlib、hmac與uuid用法分析

    Python內(nèi)置模塊hashlib、hmac與uuid用法分析

    這篇文章主要介紹了Python內(nèi)置模塊hashlib、hmac與uuid用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了hashlib、hmac與uuid模塊的概念、功能及簡(jiǎn)單使用方法,需要的朋友可以參考下
    2018-02-02
  • Python之re模塊案例詳解

    Python之re模塊案例詳解

    這篇文章主要介紹了Python之re模塊案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 基于Python編寫一個(gè)單詞自測(cè)程序

    基于Python編寫一個(gè)單詞自測(cè)程序

    這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫一個(gè)單詞自測(cè)程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • Python類的繼承用法示例

    Python類的繼承用法示例

    這篇文章主要介紹了Python類的繼承用法,結(jié)合實(shí)例形式分析了Python類的定義、繼承等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • 如何給pip更換國(guó)內(nèi)源并配置Python的國(guó)內(nèi)鏡像詳解

    如何給pip更換國(guó)內(nèi)源并配置Python的國(guó)內(nèi)鏡像詳解

    pip安裝的包都存在于外國(guó)的服務(wù)器上,速度會(huì)非常慢,可以給pip配置國(guó)內(nèi)鏡像,直接從國(guó)內(nèi)服務(wù)器安裝依賴,這篇文章主要介紹了如何給pip更換國(guó)內(nèi)源并配置Python的國(guó)內(nèi)鏡像的相關(guān)資料,需要的朋友可以參考下
    2025-04-04
  • Python Request類源碼實(shí)現(xiàn)方法及原理解析

    Python Request類源碼實(shí)現(xiàn)方法及原理解析

    這篇文章主要介紹了Python Request類源碼實(shí)現(xiàn)方法及原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python?如何實(shí)現(xiàn)變量交換

    Python?如何實(shí)現(xiàn)變量交換

    這篇文章主要介紹了Python?如何實(shí)現(xiàn)變量交換,Python?程序員肯定知道?a,b?=?b,a,這句話用來交換兩個(gè)變量。相較于其它語言需要引入一個(gè)?temp?來臨時(shí)存儲(chǔ)變量的做法,Python?的這種寫法無疑非常優(yōu)雅,下面我們來看看具體的實(shí)現(xiàn)過程吧
    2022-01-01
  • Python用來做Web開發(fā)的優(yōu)勢(shì)有哪些

    Python用來做Web開發(fā)的優(yōu)勢(shì)有哪些

    這篇文章主要介紹了Python用來做Web開發(fā)的優(yōu)勢(shì)有哪些,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08

最新評(píng)論

通辽市| 繁昌县| 昭通市| 金平| 鄂托克前旗| 喀喇沁旗| 个旧市| 五大连池市| 庆安县| 于田县| 分宜县| 乌什县| 和顺县| 德江县| 石林| 南京市| 大竹县| 灌南县| 玉环县| 镇雄县| 萨迦县| 郧西县| 肥东县| 定州市| 张家港市| 连云港市| 呼玛县| 内丘县| 碌曲县| 古交市| 拜泉县| 双鸭山市| 隆德县| 巴里| 穆棱市| 苗栗县| 屯门区| 南华县| 内江市| 德令哈市| 华坪县|