隱藏馬爾科夫模型HMM

概率圖模型
image

HMM

先從一個具體的例子入手,看看我們要解決的實際問題.例子引自wiki.https://en.wikipedia.org/wiki/Hidden_Markov_model

Consider two friends, Alice and Bob, who live far apart from each other and who talk together daily over the telephone about what they did that day. Bob is only interested in three activities: walking in the park, shopping, and cleaning his apartment. The choice of what to do is determined exclusively by the weather on a given day. Alice has no definite information about the weather, but she knows general trends. Based on what Bob tells her he did each day, Alice tries to guess what the weather must have been like.
Alice believes that the weather operates as a discrete Markov chain. There are two states, "Rainy" and "Sunny", but she cannot observe them directly, that is, they are hidden from her. On each day, there is a certain chance that Bob will perform one of the following activities, depending on the weather: "walk", "shop", or "clean". Since Bob tells Alice about his activities, those are the observations. The entire system is that of a hidden Markov model (HMM).

簡單翻譯一下:Alice和Bob住在兩地,每天電話溝通.Bob只對三件事有興趣:逛公園,購物,打掃房間.Bob根據天氣安排自己每日的活動.Alice知道bob每天都干嘛,以此為基礎,她可以推測出Bob所在地區的天氣.Alice認為天氣預測就是一個馬爾科夫鏈.天氣有兩種狀態,Rainy/Sunny,由于她無法直接觀測到天氣狀態,天氣對她而言是隱藏的.

馬爾科夫假設:

假設模型的當前狀態僅僅依賴于前面的幾個狀態,這被稱為馬爾科夫假設,它極大地簡化了問題。顯然,這可能是一種粗糙的假設,并且因此可能將一些非常重要的信息丟失。

一個馬爾科夫過程是狀態間的轉移僅依賴于前n個狀態的過程。這個過程被稱之為n階馬爾科夫模型,其中n是影響下一個狀態選擇的(前)n個狀態。

最簡單的馬爾科夫過程是一階模型,它的狀態選擇僅與前一個狀態有關.

比如今天的天氣和昨天的天氣有關.如下:
image

隱藏馬爾科夫

回到我們的例子,當我們有足夠多的天氣資料以后,我們是可以根據昨天的天氣推測出最有可能的的今天的天氣的.比如昨天晴天,那求p(晴天|晴天),p(陰天|晴天)的概率,取二者之中較大的一個即可.
image
這個例子里天氣狀況我們稱之為狀態,相應的概率矩陣稱之為狀態轉移矩陣.一個有M個狀態的馬爾科夫模型有\(M^2\)個狀態轉移.

現在我們定義一個一階馬爾科夫過程如下: 狀態:三個狀態——晴天,多云,雨天。 pi向量:定義系統初始化時每一個狀態的概率。 狀態轉移矩陣:給定前一天天氣情況下的當前天氣概率。
任何一個可以用這種方式描述的系統都是一個馬爾科夫過程。

但是考慮我們的例子中,Alice雖然每日與Bob通話,但是Bob并不會告訴他當地天氣情況,只會告訴他自己每天干了啥(逛公園/購物/打掃房間等).所以天氣狀態對Alice來說是隱藏(Hidden)的,Alice并不知道每日天氣,他能事先知道的只有陰天后,第二天是陰天/晴天的概率,即狀態轉移矩陣。

天氣狀態是隱藏狀態,Bob的每日活動(逛公園/購物/打掃房間)是觀察狀態.
image
圖文不符,湊合看,領會意圖....假裝soggy/damp/...代表逛公園/購物/打掃房間....

對每一種隱藏狀態,都有與之對應的觀測狀態,和前面的狀態轉移概率矩陣一樣,我們有如下的概率矩陣稱之為混淆矩陣:
image

至此,一個HMM模型所包含的要素如下:

  • 隱藏狀態
  • 觀測狀態
  • pi向量 模型初始隱藏狀態的概率
  • 轉移矩陣:狀態轉移的概率矩陣
  • 混淆矩陣(有的翻譯成發射概率矩陣):隱藏狀態與觀察狀態的對應概率矩陣

alice預測bob所在地區天氣用HMM建模可以表達如下:

 #隱藏狀態states = ('Rainy', 'Sunny')#觀測狀態observations = ('walk', 'shop', 'clean')#初始pi向量start_probability = {'Rainy': 0.6, 'Sunny': 0.4}#狀態轉移矩陣transition_probability = {'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},}#混淆矩陣.比如如下數據代表陰天時,bob有0.1的概率逛公園,0.4的概率散步,0.5的概率做清潔.emission_probability = {'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},}

HMM解決的三個基本問題

  • 給定HMM求一個觀察序列的概率(評估) 使用前向算法解決
  • 搜索最有可能生成一個觀察序列的隱藏狀態序列(解碼)使用維特比算法解決
  • 是給定觀察序列生成一個HMM(學習)使用前向-后向算法解決

對應到alice-bob的例子里即我們通過大量樣本的訓練已經得到了一個HMM的model.
Alice和Bob通了三天電話后發現第一天Bob去散步了,第二天他去購物了,第三天他清理房間了。Alice現在有兩個問題:

  • 這個觀察序列“散步、購物、清理”的總的概率是多少?(注:這個問題對應于HMM的基本問題之一:已知HMM模型λ及觀察序列O,如何計算P(O|λ)?)
  • 最能解釋這個觀察序列的狀態序列(晴/雨)又是什么?(注:這個問題對應HMM基本問題之二:給定觀察序列O=O1,O2,…OT以及模型λ,如何選擇一個對應的狀態序列S = q1,q2,…qT,使得S能夠最為合理的解釋觀察序列O?)
  • 至于HMM的基本問題之三:如何調整模型參數, 使得P(O|λ)最大?這個問題事實上就是給出很多個觀察序列值,來訓練以上幾個參數的問題。

算法

  • 前向算法
  • 維特比算法
  • 前向-后向算法

HMM應用

  • 詞性標注
  • 中文分詞

HMM與CRF關系

比如要給"i love you"進行詞性標注.
那么HMM中的"隱藏狀態"即為詞性(名詞/動詞/形容詞/...)
HMM中的"觀測狀態"即為我們看到的具體的詞(i/love/you)
實際上我們要做的就是求解p(l,s)哪種l使其最大?
其中s="i love u",對l1=(名詞/動詞/名詞),我們可以計算出一個p1=p(l1,s),對l2=(名詞/名詞/名詞),我們可以計算出一個p2=p(l2,s).自然地,對一個模型來說,應該算出的是p1>p2. 那么我們就把"i love u"標注為"名詞/動詞/名詞"

如何計算p(l,s)
583030-20190214101616490-1190845444.png
還是以上面的"i love u"為例,l=(名詞/動詞/名詞)

  • p(li|li?1) 狀態轉移概率 (比如l2=動詞,l1=名詞,則代表名詞后面接動詞的概率);
  • p(wi|li) 發射概率(也就是之前例子里說的混淆矩陣概率) (比如l2=動詞 w2="love" 代表一個動詞是單詞"love"的概率)

注意我們在條件隨機場https://www.cnblogs.com/sdu20112013/p/10370334.html里提到的583030-20190214101656621-1490334591.png

對一個HMM來說,對概率取對數可得583030-20190214102001071-117406591.png

我們可以構建一個等價于該HMM的CRF
583030-20190214101729960-86534844.png

  • 對每一個狀態轉移概率,都可以創建一個特征函數f,給一個權重w
  • 對每一個發射概率,也可以定一個特征函數g,給一個權重w
    這樣crf計算出來的p(l,s)和HMM計算出來的p(l,s)就等價了.
    也就是說每一個HMM都可以用某一個CRF來表達

crf比HMM更強大
583030-20190214101752781-4513324.png

  • crf可以定制更多的特征函數 比如對"is that ok?"做詞性標注.用crf的話,我們可以定義一個特征函數:一個以?結尾的句子的第一個單詞更可能是動詞. 在HMM中我們沒辦法表達這個信息. 從而crf的標注的準確率可以更高.
  • crf可以有更多樣的權重. hmm里權重是可以任意的,正的,負的都可以.

轉載于:https://www.cnblogs.com/sdu20112013/p/10373091.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387419.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387419.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387419.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常用HQL

進入hive客戶端后: 1、建表: create table page_view(viewTime int, userid bigint,page_url string, referrer_url string,ip string comment IP Address of the User)comment This is the page view tablepartitioned by(dt string, country string)r…

阿里云天池 金融風控訓練營Task1 廣東工業站

Task1 賽題理解 一、學習知識點概要 本次學習先是介紹了賽題的背景和概況,題目以金融風控中的個人信貸為背景,給所給的47列特征中,根據貸款申請人的數據信息預測其是否有違約的可能,以此判斷是否通過貸款。隨后介紹了比賽中的評…

如何將.crt的ssl證書文件轉換成.pem格式

如何將.crt的ssl證書文件轉換成.pem格式摘自:https://www.landui.com/help/show-8127 2018-07-04 14:55:41 2158次 準備:有一臺安裝了php的linux操作系統執行下面的openssl命令即可:openssl x509 -in www.xx.com.crt -out www.xx.com.pem轉載于:https://…

SpringMVC學習記錄--Validator驗證分析

一.基于Validator接口的驗證. 首先創建User實例,并加入幾個屬性 ?12345678910111213141516171819202122232425262728293031323334<code class"hljs cs">public class User {private String username;private String password;private String nickname;public …

NTP時間服務器實現Linux時間同步

在linux下&#xff0c;可以通過自帶的NTP(Network Time Protocol)協議通過網絡使自己的系統保持精確的時間。 什么是NTP&#xff1f; NTP是用來使系統和一個時間源保持時間同步的協議。 在自己管理的網絡中建立至少一臺時間服務器來同步本地時間&#xff0c;這樣可以使得在不同…

阿里云天池 Python訓練營Task1:從變量到異常處理

本學習筆記為阿里云天池龍珠計劃Python訓練營的學習內容&#xff0c;學習鏈接為&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 目錄 一、學習知識點概要 二、學習內容 I.變量、運算符與數據類…

python回收機制

目錄 Python的垃圾回收機制引子:一、什么是垃圾回收機制&#xff1f;二、為什么要用垃圾回收機制&#xff1f;三、垃圾回收機制原理分析1、什么是引用計數&#xff1f;2、引用計數擴展閱讀&#xff1f;&#xff08;折疊&#xff09;Python的垃圾回收機制 引子: 我們定義變量會申…

安裝openssl-devel命令

centos&#xff1a; yum install openssl-devel ubuntu&#xff1a; sudo apt-get install openssl sudo apt-get install libssl-dev

阿里云天池 Python訓練營Task2: Python基礎練習:數據結構大匯總 學習筆記

本學習筆記為阿里云天池龍珠計劃Python訓練營的學習內容&#xff0c;學習鏈接為&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 目錄 一、學習知識點概要 二、學習內容 I.列表&#xff08;list…

windows文件與Linux文件互轉

使用命令 unix2dos filename dos2unix filename

1G.小a的排列(C++)

小a的排列&#xff08;C&#xff09; 點擊做題網站鏈接 題目描述 小a有一個長度為n的排列。定義一段區間是"萌"的&#xff0c;當且僅當把區間中各個數排序后相鄰元素的差為1現在他想知道包含數x,y的長度最小的"萌"區間的左右端點 也就是說&#xff0c;我們…

阿里云天池 Python訓練營Task3: Python基礎進階:從函數到高級魔法方法 學習筆記

本學習筆記為阿里云天池龍珠計劃Python訓練營的學習內容&#xff0c;學習鏈接為&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 目錄 一、學習知識點概要 二、學習內容 I.函數 1.定義自己的函…

C# 獲取句柄程序

這個小程序需要用到系統API&#xff0c;也就是需要用到user32中的三個函數。 第一個&#xff1a;WindowFromPoint 返回一個窗口句柄 第二個&#xff1a;GetWindowText 獲取窗口標題 第三個&#xff1a;GetClassName 獲取類名 當然&#xff0c;最重要的一點就是要引用命名空間…

HBase安裝配置

HBase的安裝配置&#xff1a; 4臺主機&#xff1a;hdp0 hdp1 hdp2 hdp3 hdp0 hdp1 跑HMaster hdp2 hdp3 跑HRegionServer 將HBase解壓之后 1、確保安裝ZooKeeper&#xff1b; 2、修改hbase-env.sh export JAVA_HOME/.../jdk export HBASE_MANAGES_ZKfalse //使用外部的…

python cook讀書筆記第2章字符串和文本

使用多個界定符分割字符串 line asdf fjdk; afed, fjek,asdf, fooimport re# line re.split(r[;,\s]\s*,line)# print(line)# [asdf, fjdk, afed, fjek, asdf, foo]"""當你使用 re.split() 函數時候&#xff0c;需要特別注意的是正則表達式中是否包含一個括號…

centos7安裝oracle12c 一

本文 基本參考了下面這篇文章http://blog.csdn.net/gq5251/article/details/42004035 和http://www.linuxidc.com/Linux/2017-08/146528.htm 但是改正了一些錯誤操作系統:CentOS Linux release 7.2.1511 (Core) oracle: oarcle (12.1.0.2.0) - Standard Edition (SE2)幾點要注…

Bigtable的些許重點

分布式數據庫系統 針對于海量數據&#xff0c;可擴展&#xff0c;高吞吐量&#xff0c;低時延 不支持關系模型 通過row和column進行索引&#xff0c;row和column可以是任意字符串 所存儲的數據也是字符串 Bigtable是一個map&#xff0c;value是array of bytes&#xff0c;通…

阿里云天池 Python訓練營Task4: Python數據分析:從0完成一個數據分析實戰 學習筆記

本學習筆記為阿里云天池龍珠計劃Python訓練營的學習內容&#xff0c;學習鏈接為&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 一、學習知識點概要 本次主要通過阿里云天池的賽題【Python入門系…

JMETER從JSON響應中提取數據

如果你在這里&#xff0c;可能是因為你需要使用JMeter從Json響應中提取變量。 好消息&#xff01;您正在掌握掌握JMeter Json Extractor的權威指南。作為Rest API測試指南的補充&#xff0c;您將學習掌握Json Path Expressions 所需的一切。 我們走吧&#xff01;并且不要驚慌&…

centos7安裝oracle12c 二

環境&#xff1a;CentOS7VMware12&#xff0c;分配資源&#xff1a;CPU&#xff1a;2顆&#xff0c;內存&#xff1a;4GB&#xff0c;硬盤空間&#xff1a;30GB Oracle 12C企業版64位 下載地址&#xff1a;http://www.oracle.com/technetwork/database/enterprise-edition/down…