日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通俗理解什么是隐马尔科夫模型(hmm)

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通俗理解什么是隐马尔科夫模型(hmm) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 什么是隱馬爾科夫模型
    • HMM模型相關的算法
    • 前向算法(forward algorithm)
    • 維特比算法(Viterbi algorithm)
      • 求解最可能的天氣
    • NLP應用
    • 小結

參考文章 一文搞懂HMM(隱馬爾可夫模型)
本人博客地址: https://xiaoxiablogs.top

什么是隱馬爾科夫模型

隱馬爾可夫模型(Hidden Markov Model,HMM)是統計模型,它用來描述一個含有隱含未知參數的馬爾可夫過程。其難點是從可觀察的參數中確定該過程的隱含參數。然后利用這些參數來作進一步的分析,例如模式識別。


用一個簡單的例子來描述:

假設有3個不同的骰子,分別為四面(D4)、六面(D6)、八面(D8),每個面的概率都是相同的,每個骰子被選中的概率也是相同的。

假設我們開始擲骰子,隨機從三個里面選一個,然后擲骰子,我們會得到一個數字,重復上面的過程,我們就可以得到一串數字。例如我們得到的是1 8 6 4 4 2 3 6 1 4,這串數字就是可見狀態鏈,而我們對應的擲骰子的順序就是隱含狀態鏈,假設為D4 D8 D6 D4 D6 D8 D6 D6 D4 D8,我們第一次隨機的骰子是D4, 而第一次選中每個骰子的概率是1/3,也就是初始概率, 而第一次選中D4后,第二次選中每個骰子的概率為1/3,這就是轉換概率,如:D4->D8為1/3,即選中D4后再選中D8的轉移概率為1/3。

一般來說,HMM中說到的馬爾科夫鏈其實就是指隱含狀態鏈,因為隱含狀態之間存在轉換概率

HMM模型相關的算法

  • 知道隱含狀態數量、轉換概率、可見狀態鏈、輸出概率,求隱含狀態鏈
  • 知道隱含狀態數量、轉換概率、可見狀態鏈、輸出概率,求這個結果的概率
  • 知道隱含狀態數量、隱含狀態鏈、可見狀態鏈、輸出概率,求轉換概率
  • 前向算法(forward algorithm)

    我們拿到一串可見狀態鏈,也知道轉換概率、輸出概率,如何求解隱含狀態鏈最可能是什么呢?

    我們就可以使用前向算法(forward algorithm)

    例如我們得到的數字為: 1 6 3

    我們可以分為以下幾步:

    首先,我們只擲一次骰子:

    看到結果為1,產生這個結果的總概率可以按照如下計算,清高率為0.18:

    然后我們擲兩次骰子:

    看到結果為1,6.產生這個結果的總概率可以按照如下計算,總概率為0.05:

    然后我們擲三次骰子:

    看到結果為1,6,3.產生這個結果的總概率可以按照如下計算,總概率為0.03:

    同樣的,我們一步一步的算,有多長算多長,再長的馬爾可夫鏈總能算出來的。這就是前向算法(forward algorithm)

    維特比算法(Viterbi algorithm)

    HMM(隱馬爾可夫模型)是用來描述隱含未知參數的統計模型,舉一個經典的例子:一個東京的朋友每天根據天氣{下雨,天晴}決定當天的活動{公園散步,購物,清理房間}中的一種,我每天只能在twitter上看到她發的推“啊,我前天公園散步、昨天購物、今天清理房間了!”,那么我可以根據她發的推特推斷東京這三天的天氣。在這個例子里,顯狀態是活動,隱狀態是天氣。

    任何一個HMM都可以通過下列五元組來描述:

    :param obs:觀測序列 :param states:隱狀態 :param start_p:初始概率(隱狀態) :param trans_p:轉移概率(隱狀態) :param emit_p: 發射概率 (隱狀態表現為顯狀態的概率)

    states = ('Rainy', 'Sunny')observations = ('walk', 'shop', 'clean')start_probability = {'Rainy': 0.6, 'Sunny': 0.4}transition_probability = {'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},}emission_probability = {'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1}, }

    求解最可能的天氣

    求解最可能的隱狀態序列是HMM的三個典型問題之一,通常用維特比算法解決。維特比算法就是求解HMM上的最短路徑(-log(prob),也即是最大概率)的算法。

    稍微用中文講講思路,很明顯,第一天天晴還是下雨可以算出來:

  • 定義V[時間][今天天氣] = 概率,注意今天天氣指的是,前幾天的天氣都確定下來了(概率最大)今天天氣是X的概率,這里的概率就是一個累乘的概率了。
  • 因為第一天我的朋友去散步了,所以第一天下雨的概率V[第一天][下雨] = 初始概率[下雨] * 發射概率[下雨][散步] = 0.6 * 0.1 = 0.06,同理可得V[第一天][天晴] = 0.24 。從直覺上來看,因為第一天朋友出門了,她一般喜歡在天晴的時候散步,所以第一天天晴的概率比較大,數字與直覺統一了。
  • 從第二天開始,對于每種天氣Y,都有前一天天氣是X的概率 * X轉移到Y的概率 * Y天氣下朋友進行這天這種活動的概率。因為前一天天氣X有兩種可能,所以Y的概率有兩個,選取其中較大一個作為V[第二天][天氣Y]的概率,同時將今天的天氣加入到結果序列中
  • 比較V[最后一天][下雨]和[最后一天][天晴]的概率,找出較大的哪一個對應的序列,就是最終結果。
  • # -*- coding:utf-8 -*- # Filename: viterbi.py # Author:hankcs # Date: 2014-05-13 下午8:51states = ('Rainy', 'Sunny')observations = ('walk', 'shop', 'clean')start_probability = {'Rainy': 0.6, 'Sunny': 0.4}transition_probability = {'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},}emission_probability = {'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1}, }# 打印路徑概率表 def print_dptable(V):print " ",for i in range(len(V)): print "%7d" % i,printfor y in V[0].keys():print "%.5s: " % y,for t in range(len(V)):print "%.7s" % ("%f" % V[t][y]),printdef viterbi(obs, states, start_p, trans_p, emit_p):""":param obs:觀測序列:param states:隱狀態:param start_p:初始概率(隱狀態):param trans_p:轉移概率(隱狀態):param emit_p: 發射概率 (隱狀態表現為顯狀態的概率):return:"""# 路徑概率表 V[時間][隱狀態] = 概率V = [{}]# 一個中間變量,代表當前狀態是哪個隱狀態path = {}# 初始化初始狀態 (t == 0)for y in states:V[0][y] = start_p[y] * emit_p[y][obs[0]]path[y] = [y]# 對 t > 0 跑一遍維特比算法for t in range(1, len(obs)):V.append({})newpath = {}for y in states:# 概率 隱狀態 = 前狀態是y0的概率 * y0轉移到y的概率 * y表現為當前狀態的概率(prob, state) = max([(V[t - 1][y0] * trans_p[y0][y] * emit_p[y][obs[t]], y0) for y0 in states])# 記錄最大概率V[t][y] = prob# 記錄路徑newpath[y] = path[state] + [y]# 不需要保留舊路徑path = newpathprint_dptable(V)(prob, state) = max([(V[len(obs) - 1][y], y) for y in states])return (prob, path[state])def example():return viterbi(observations,states,start_probability,transition_probability,emission_probability)print example()

    輸出:

    0 1 2 Rainy: 0.06000 0.03840 0.01344 Sunny: 0.24000 0.04320 0.00259 (0.01344, ['Sunny', 'Rainy', 'Rainy'])

    NLP應用

    具體到分詞系統,可以將天氣當成“標簽”,活動當成“字或詞”。那么,幾個NLP的問題就可以轉化為:

    • 詞性標注:給定一個詞的序列(也就是句子),找出最可能的詞性序列(標簽是詞性)。如ansj分詞和ICTCLAS分詞等。
    • 分詞:給定一個字的序列,找出最可能的標簽序列(斷句符號:[詞尾]或[非詞尾]構成的序列)。結巴分詞目前就是利用BMES標簽來分詞的,B(開頭),M(中間),E(結尾),S(獨立成詞)
    • 命名實體識別:給定一個詞的序列,找出最可能的標簽序列(內外符號:[內]表示詞屬于命名實體,[外]表示不屬于)。如ICTCLAS實現的人名識別、翻譯人名識別、地名識別都是用同一個Tagger實現的。

    小結

    HMM是一個通用的方法,可以解決貼標簽的一系列問題。

    總結

    以上是生活随笔為你收集整理的通俗理解什么是隐马尔科夫模型(hmm)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩精品视频久久 | 在线永久看片免费的视频 | 国产在线中文字幕 | 天堂无乱码 | 变态另类一区二区 | 免费看黄色网址 | 在线看的网站 | 亚州激情视频 | 午夜院线 | 日韩精品在线一区 | 777奇米视频 | 国产午夜精品一区二区理论影院 | 超碰人人插| 琪琪色视频 | 最新超碰 | 国产精品白嫩极品美女视频 | 亚洲天堂av网 | 女生扒开尿口让男生桶 | 免费国产羞羞网站视频 | 美女被男人插 | 在线观看中文字幕2021 | 亚洲五月激情 | 亚洲激情视频一区 | 欧美一级黄色网 | 999精品在线 | 日韩av综合网站 | 女人叫床高潮娇喘声录音mp3 | 中文字幕一区二区三三 | 日韩欧美一区二区三区 | 亚洲成a人| 麻豆国产精品777777在线 | 午夜插插| 色婷婷中文 | 国产欧美日韩精品区一区二污污污 | 亚洲男人的天堂av | 久久精品韩国 | 日韩av无码一区二区三区不卡 | 99在线小视频 | 第四色影音先锋 | 麻豆啪啪| 怡春院一区二区 | 美女极度色诱图片www视频 | 91精品国自产在线 | 欧美精品在线视频 | 日韩一区二区三区在线观看 | 91丨porny丨中文| 少妇被粗大猛进进出出s小说 | 人妻无码一区二区三区 | 男男play呻吟动漫网站 | 国产麻豆乱码精品一区二区三区 | 丁香激情婷婷 | 成年人免费网 | 黄色a一级 | 免费在线不卡av | 欧美日韩一区二区在线播放 | 久久国产视频网站 | av网站亚洲 | 88av视频| 18禁网站免费无遮挡无码中文 | 国产视频第二页 | 人人澡人人透人人爽 | 色哟哟在线观看视频 | 97爱爱视频| 爆操91| 国产高清在线免费 | 免费毛片视频网站 | 美足av| 啪啪福利视频 | 国产女人视频 | 99激情网| 亚洲一线二线在线观看 | 伊人看片 | 神马影院一区二区三区 | 窝窝视频在线观看 | 免费在线日韩av | 亚洲天堂一区二区 | 日本极品丰满ⅹxxxhd | 99一区二区 | 好屌妞视频这里只有精品 | 丰满人妻一区二区三区53 | 欧美高清| 天天干天天草 | 欧美成人黑人猛交 | 无码h肉动漫在线观看 | 毛片一级视频 | 欧美丝袜视频 | 一区二区视频在线播放 | 青春草在线视频免费观看 | 亚洲一久久 | 日本中文字幕影院 | 又黄又爽又刺激的视频 | 日韩一区二区精品视频 | 久久综合资源 | 亚洲国产成人一区二区精品区 | 欧美色哟哟 | 激情视频一区二区 | 免费黄视频在线观看 | 中文字幕在线观看日本 | 免费麻豆国产一区二区三区四区 |