1. 程式人生 > >第八講:產生式模型:NaiveBayes, HMM(上)

第八講:產生式模型:NaiveBayes, HMM(上)

5 產生式模型

5.1 產生式模型與判別式模型區別

5.2 樸素貝葉斯

5.2.1 原理與模型

5.2.2 演算法

5.2.3 策略

5.2.4 高斯判別分析

5.3 隱馬爾科夫模型

5.3.1 模型

5.3.2 推理:概率計算


5 產生式模型

5.1 產生式模型與判別式模型區別

 

結束了上節課具有和廈大精神(自強不息、止於至善)一樣的boosting,這節課主要介紹了判別式模型(Discriminative Modeling,DM)和產生式模型(Generative Modeling,GM)的區別,樸素貝葉斯以及隱馬爾科夫模型。

 

首先,我們來了解一下什麼是產生式模型以及判別式模型。

 

 

✓ 判別式模型:在一個基本的機器學習問題中,通常有輸入,輸出兩部分,例如對於分類來說,判別模型尋求不同類別之間的最優分類面,估計的是條件概率分佈:

常見的有:

  • Logistic Regression

  • SVM

  • Traditional Neural Networks

  • Nearest Neighbor

 

✓ 產生式模型:產生式模型則是對後驗概率建模,試圖描述x與y的聯合分佈,估計的是聯合概率分佈:

常見的有:

  • Naive Bayes

  • Mixtures of Gaussians,HMMs

  • Markov Random Fields

 

產生vs判別:

產生是模型有其對應的判別式模型,這樣的組合叫做“產生式-判別式”對;

判別式模型不一定有其對應的產生式模型;

訓練樣本多的情況下,採用判別式;

訓練樣本少的情況下,選擇產生式;

產生式模型可以根據貝葉斯公式得到判別式模型,但反過來不行。

 

Andrew Ng在NIPS2001年有一篇專門比較判別模型和產生式模型的文章:On Discrimitive vs. Generative classifiers: A comparision of logistic regression and naive Bayes ,感興趣的同學也可以看一下~

5.2 樸素貝葉斯

5.2. 1原理與模型

 

前面幾講都是關於判別式模型的內容,從本講開始將會為大家介紹一些產生式模型,接下來的樸素貝葉斯和隱馬爾科夫模型都屬於產生式模型。

 

樸素貝葉斯法是基於貝葉斯定理與特徵條件獨立假設的分類方法。對於給定的訓練資料集,首先基於特徵條件獨立假設學習輸入/輸出的聯合概率分佈;然後基於此模型,對於給定的輸入x,利用貝葉斯定理求出後驗概率最大的輸出y。樸素貝葉斯法實現簡單,學習與預測的效率都很高,是一種常用的方法。

5.2.2 演算法

 

假設現在我們有了一些資料D,標籤為0或者1。

對於新來的資料x,若想預測它的標籤值,我們可以採用判別模型,例如logistic迴歸去找到一條決策邊界,來區分是0還是1,當然我們也可以用產生式模型,例如樸素貝葉斯,根據訓練集中label為1的樣本,我們可以建立label=1的模型,然後對於新來的樣本,我們可以讓它與label=1的模型進行匹配看看概率有多少,與label=0的模型進行匹配看概率多大,哪一個概率大即為預測標籤。這種做法的形式化寫法:

 

根據貝葉斯公式:

 

其中:

 

 

假設我們要解決的是二分類問題,各維度都是離散的值, 種可能。那我們要求解的引數有多少個呢?

 

以下推導基於這樣兩個假設:

 

 

假設 1,各個維度相互獨立,這是一個較強的假設,這是“Naive”的由來,由於一般特徵維度較大,這麼多特徵的聯合概率分佈建模非常吃力,於是就有了一個非常Naive的假設,即所有特徵之間是相互獨立的,根據獨立性的定義,聯合概率可以寫成每個特徵各自的條件概率的乘積:

假設 2,為推導簡便。

那麼具體的我們需要求解哪些引數呢?

模型引數被大大縮減。如何求解這些引數呢?

 

因為我們假設的是做二分類,可用伯努利分佈來刻畫:

 

則 

同理對於其餘引數,有:

即:

似然函式:

取對數:

應用極大似然估計求引數:

令 ln L 分別對各引數求偏導,並令偏導數為零,即:

得:

 

進一步的:

可以看到,各個引數的計算其實非常簡單,就是數數。下面我們通過一兩個簡單的例項來看看它到底是怎麼計算的。

 

例一:

 

由圖可知,一共有15個樣本,其中,

現在要問x1=2,x2=S的標籤是什麼?

求解: 

其餘引數計算方式同上,有:

因此,x1=2,x2=S的樣本標籤為-1。

 

例二:

 

由圖可知,一共有六個樣本,P為垃圾郵件的概率為4/6 ,P為正常郵件的概率為2/6 。

 

右邊的表格還列出了樣本中幾個單詞為垃圾郵件的概率以及正常郵件的概率。

 

有了上面的資訊,現在我們來判斷新郵件,“review us now”是正常郵件還是垃圾郵件?

 

review us是垃圾郵件的概率,

 

解釋如下:password沒有在這句出現,所以是(1-2/4),review出現在這個郵件中,所以是1/4,send也沒有出現在這句中,所以是(1-3/4),後面的也是如此。

 

相比之下,是正常郵件的概率高一點。

 

從計算來看,是正常郵件的情況大一點,但是仔細思考一下,review us就多了一個文字中未出現的now,就從垃圾郵件變成了正常郵件。而且由於樣本數量較少,我們明顯能看到如果郵件中提到“account”,為正常郵件的概率是0,任何包含“account”都是垃圾郵件了。

 

上面的情況就涉及到一個零概率問題。零概率問題就是在計算新例項的概率時,如果某個分量在訓練集中從沒有出現過,會導致整個例項的概率計算結果為0,這顯然是不合理的。為了解決這個問題,引出了拉普拉斯平滑:

樸素貝葉斯中針對屬性缺失問題,測試資料中某個可能維度的值丟失,可以不用管,不會受到影響。

5.2.3策略

 

樸素貝葉斯法將例項分到後驗概率最大的類中,這等價於期望風險最小化。假設選擇0-1損失函式:

 

式中f(X)是分類決策函式。這時,期望風險函式為

 

 為了使期望風險最小化,只需對X=x逐個極小化

 

由此得到:

這樣一來,根據期望風險最小化準則就得到了後驗概率最大化準則:

5.2.4 高斯判別分析

 

在樸素貝葉斯中,我們假設x是離散的,服從多項分佈(包括伯努利分佈),在高斯判別分析(Gaussian discriminant analysis,GDA)中,我們假設x是連續的,服從高斯分佈。該模型基於兩點假設,y服從伯努利分佈,特徵x是多元高斯分佈[2] 。寫出分佈概率密度為:

同樣,我們來比較的大小:

可以看到GDA實際上是一個線性模型,這是一個判別式模型。

5.3 隱馬爾科夫模型

5.3.1模型

 

隱馬爾科夫模型(hidden Markov model,HMM)是可用於標註問題的統計學習模型,描述由隱藏的馬爾可夫鏈隨機生成觀測序列的過程,屬於生成模型。隱馬爾科夫模型在語音識別、自然語言處理、生物資訊、模式識別等領域有著廣泛的應用。

(摘自李航統計學習方法)

 

定義:隱馬爾科夫模型是關於時序的概率模型,描述由一個隱藏的馬爾可夫鏈隨機生成不可觀測的狀態隨機序列,再由各個狀態生成一個觀測而產生觀測隨機序列的過程。隱藏的馬爾可夫鏈隨機生成的狀態的序列,稱為狀態序列;每個狀態生成一個觀測,而由此產生的觀測的隨機序列,稱為觀測序列。序列的每一個位置又可以看作是一個時刻。

 

上述定義可能有些抽象,強烈建議大家閱讀《數學之美》第五章之後,在來看本節內容,在書中,作者通過生動豐富的例子,非常自然的從馬爾科夫過程過渡到隱馬爾可夫過程,對於理解上有很大的幫助。

 

隱馬爾科夫模型由初始概率分佈狀態轉移概率分佈以及觀測概率分佈確定。隱馬爾科夫模型的形式定義如下:

 

設Q是所有可能的狀態的集合,V是所有可能的觀測的集合,

其中,N是可能的狀態數,M是可能的觀測數。

 

隱馬爾可夫模型可用三元符號表示,即λ=(A, B, Π)。其中:

 

隱馬爾科夫模型由初始狀態概率向量π、狀態轉移概率矩陣A和觀測概率矩陣B決定。A,B,π稱為隱馬爾科夫模型的三要素。

狀態轉移概率矩陣A與初始狀態概率向量π確定了隱藏的隱馬爾可夫鏈,生成不可觀測的狀態序列,觀測概率矩陣B確定瞭如何從狀態生成觀測,與狀態序列綜合確定瞭如何產生觀測序列。

隱馬爾科夫模型有三個基本問題:

 

(1)概率計算問題:給定模型λ=(A, B, Π)和觀測序列O =(o1,o2,…,oT),計算在模型λ下觀測序列O出現的概率P(O|λ)。

 

(2)學習問題:已知觀測序列O =(o1,o2,…,oT),估計模型λ=(A, B, Π)引數,使得在該模型下觀測序列概率P(O|λ)最大。即用極大似然估計的方法估計引數。

 

(3)預測問題,也稱為解碼問題。已知模型λ=(A, B, Π)和觀測序列O =(o1,o2,…,oT),求對給定觀測序列條件概率P(I|O)最大的狀態序列I=(i1,i2,...,iT)。即給定觀測序列,求最有可能的對應的狀態序列。

 

第一個問題對應的演算法是前向-後向演算法(Forward-Backward algorithm),第二個則是模型訓練問題,第三個問題可用維特比演算法解決,接下來,我們將逐一介紹。

5.3.2推理(概率計算)

概率計算問題

 

已知:模型λ=(A, B, Π)和觀測序列O =(o1,o2,…,oT)

求:P(O|λ)

方法一:直接計演算法

通過列舉所有可能的長度為T的狀態序列I = (i1,i2, ..., iT),求各個狀態序列I與觀測序列O = (o1, o2, ..., oT)的聯合概率P(O,I|λ),然後對所有可能的狀態序列求和,得到P(O|λ)。

但這個公式計算量很大,演算法的複雜度是,類似TNT炸藥一樣,直接就爆了。那麼有什麼解決的有效辦法嗎?

 

下面介紹計算觀測序列概率P(O|λ)的有效演算法:前向-後向演算法。(後向演算法下節課會講到)

 

上面的問題看似非常複雜,其實如果學會一步一步來做,問題也許就會迎刃而解。假設現在我們只有一個觀測:

 

■  一個觀測

 

表示在第一個時刻(t=1),狀態取值為的概率,有N種可能;

 

■  兩個觀測

表示在第二個時刻(t=2),狀態取值為的概率,有N種可能。

 

■  三個觀測

 

相信大家已經發現一些規律,那麼我們來總結一下:

 

有了上面的計算公式,我們能夠從相應的概率解釋直接計算,例如對t=1時刻:

 


演算法(觀測序列概率的前向演算法)

輸入:隱馬爾科夫模型λ,觀測序列O;

輸出:觀測序列概率P(O|λ)


 

隱馬爾可夫模型的其餘部分將會在下一講中繼續為大家講解,感謝閱讀~

 

ps:文中所有推導均可在課件中找到,回覆「課件」即可領取。

參考文獻

[1]https://zhuanlan.zhihu.com/p/23103686

[2]https://blog.csdn.net/Irving_zhang/article/details/60583862

[3] 李航.統計學習方法.清華大學出版社,北京(2012)

[4] 周志華.機器學習.清華大學出版社,北京(2016)

[5]https://blog.csdn.net/xueyingxue001/article/details/51435752

[6] Ng, Andrew Y., and Michael I. Jordan. "On discriminative vs. generative classifiers: A comparison of logistic regression and naive bayes." Advances in neural information processing systems. 2002.