天天看點

高斯判别分析(GDA)和樸素貝葉斯(NB)

本文先介紹生成模型(generative model)和判别模型(discriminative model)的差別,然後重點介紹生成模型中的兩個例子:高斯判别分析(Gaussian discriminant analysis)和樸素貝葉斯方法(Naive Bayes)

生成模型和判别模型

監督學習一般學習的是一個決策函數:

y=f(x)

或者是條件機率分布: p(y|x)

判别模型直接用資料學習這個函數或分布,例如Linear Regression和Logistic Regression。

生成模型是用資料先學習聯合機率分布 p(x,y) ,然後根據貝葉斯公式求 p(y|x) : p(y|x)=p(x,y)p(x)=p(x|y)p(y)p(x)

預測資料x的時候,當 p(y|x) 最大時,此時的y即預測結果: argmaxyp(y|x)=argmaxyp(x|y)p(y)p(x)=argmaxyp(x|y)p(y)(因為y的取值不影響p(x)的大小,是以可以忽略p(x)的值)

這裡用了期望風險最小化準則(Empirical Minimization Principle),具體可以檢視《統計學習方法》的chapter4.1.2。

1.Gaussian Discriminant Analysis

在生成模型中,我們需要知道的就是 p(x|y) 和 p(y) 的分布( (p(x)=∑mi=1p(x|y=i)p(y=i) )。

如果我們觀察到樣本的X大緻服從多元正态分布,那麼這時候我們可以使用GDA模型來預測資料。

1、首先在GDA中假設:

yx|y=0x|y=1∼Bernoulli(ϕ)∼N(μ0,Σ)∼N(μ1,Σ)

也就是: p(y)p(x|y=0)p(x|y=1)=ϕy(1−ϕ)1−y=12πn/2|Σ|1/2exp(−12(x−μ0)TΣ−1(x−μ0))=12πn/2|Σ|1/2exp(−12(x−μ1)TΣ−1(x−μ1))

這裡的x是所有特征 x1,x2,⋅⋅,xn 組成的向量;n為x的維數; μ0,μ1 是正态分布的均值向量; Σ 是協方差矩陣,考慮到x特征的協方差不會受到y的種類的很大影響,還為了計算友善性,是以我們可以使用同個 Σ 。

2.極大似然估計4個參數: ϕ,μ0,μ1,Σ

對數化似然函數

ℓ=log∏i=1mp(x(i),y(i))=log∏i=1mp(x(i)|y(i))p(y(i))=∑i=1m[y(i)logϕ+(1−y(i))log(1−ϕ)−12(x−μy(i))TΣ−1(x−μy(i))+log12πn/2|Σ|1/2]

(1)對于 ϕ :

∇ϕℓ=∑i=1m(y(i)1ϕ−(1−y(i))11−ϕ)

令 ∇ϕℓ=0 ,得 0ϕ=∑i=0my(i)−∑i=0mϕ=1m∑i=1m1{y(i)=1}

(2)對于 μ0 :

∇μ0ℓ=∇μ0∑i=1m([−12(x(i)−μ0)TΣ−1(x(i)−μ0)]1{y(i)=0})=∑i=1m([12Σ−1(x(i)−μ0)]1{y(i)=0})

令 ∇μ0ℓ=0 ,得 0μ0=∑i=1m((x(i)−μ0)1{y(i)=0})=∑mi=11{y(i)=0}x(i)∑mi=11{y(i)=0}(直覺解釋是y=0類中x的平均值)

(3)同理得 μ1 的估計值為

μ0=∑mi=11{y(i)=1}x(i)∑mi=11{y(i)=1}(直覺解釋是y=1類中x的平均值)

(4)對于 Σ :

∇Σℓ=∇Σ∑i=1m(−12(x(i)−μy(i))TΣ−1(x(i)−μy(i))+log12πn/2|Σ|1/2)=∑i=1m((x(i)−μy(i))(x(i)−μy(i))TΣ−2−Σ−1)

令 ∇Σℓ=0 ,得 ∑i=1m(x(i)−μy(i))(x(i)−μy(i))T=mΣΣ=1m∑i=1m(x(i)−μy(i))(x(i)−μy(i))T

至此我們得到了參數 ϕ,μ0,μ1,Σ 的估計。于是,我們可以通過 argmaxyp(x|y)p(y) 來預測新資料。最終GDA模型可見下圖

高斯判别分析(GDA)和樸素貝葉斯(NB)

2.GDA and Logistic Regression

高斯判别和LR屬于兩種不同的模型,但卻有着很大的關系。我們可以将GDA的 p(y=1|x) 化為x的函數得到

p(y=1|x;ϕ,μ0,μ1,Σ)=11+exp(−θTx)

這裡的 θ是關于ϕ,μ0,μ1,Σ的函數 ,由此我們可以看到GDA是可以轉化為LR的。為什麼呢?

因為在GDA我們假設X是服從高斯分布,Y服從伯努利分布,而在LR中我們隻假設了Y是伯努利分布,是以強假設必然是可以推出弱假設的。事實上隻要X服從指數分布族,我們都可以推導出LR;相反,LR沒法推導出GDA,因為LR本身是不知道X的真實分布的。(回憶LR的推導,我們是通過指數分布族來找到X到Y的映射函數,然後再進行學習參數 θ ;也就是說,其實不管x是什麼分布,我們都可以通過指數分布族變換得到logistic function來進行映射)。

那麼什麼時候用GDA,什麼時候用LR呢?當我們知道X的分布時,GDA明顯是更好的選擇,因為它做了更強的假設,實際中,即使資料很少,GDA也會有很好的效果;然而,大部分時候我們都是不知道X的分布的,是以LR會有更好的健壯性。

3.Naive Bayes

樸素貝葉斯模型也是生成模型中的一種。

在GDA中,我們假設X是連續的,服從高斯分布;NB中我們假設X是離散的,服從多項分布(包括伯努利)。GDA的X可以用多元高斯分布表示,但是在NB中我們卻不能直接使用多項分布。我們用垃圾郵件分類器來闡述NB的思想。

在這個分類器中我們可以用單詞向量作為輸入特征,具體的,我們的單詞書中如果一共有50000個詞,那麼一封郵件的x向量可以是

x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢100⋅⋅1⋅⋅0⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥aaardvarkaardwolf⋅⋅buy⋅⋅zen

x是一個50000維的向量,在這封郵件中如果存在字典中的詞,那該詞所在的位置設定為1;否則為0。

如果要直接用多項分布對 p(x|y) 模組化, p(x|y) 共有 250000 個不同的值,那麼我們至少需要 250000−1 個參數使參數和為1,對如此多的參數進行估計是不現實的,是以我們做一個強假設來簡化機率模型。

3.1 模組化

1.假設

在NB中,我們假設x的每一維特征(也就是每一個詞)都是條件獨立的:即每個詞在郵件中都獨立出現,互不影響。而現實中有些詞是很可能同時出現的,比如nike和sport,是以這就是naive bayes中naive的由來。盡管如此,NB對于大部分問題還是有很好的效果。根據這個假設可以得到

p(x1,⋅⋅⋅,x50000|y)=p(x1|y)p(x2|y,x1)p(x3|y,x1,x2)⋅⋅⋅p(x50000|y,x1,⋅⋅⋅,x49999)=p(x1|y)p(x2|y)p(x3|y)⋅⋅⋅(x50000|y)=∏j=1np(xj|y)

第一個等式使用了條件機率鍊式法則,第二個等式利用了條件獨立假設。這時候模型就可以用 ϕj|y=1,ϕj|y=0,ϕy 參數來模組化了,其中 ϕj|y=1=p(xj=1|y=1),ϕj|y=0=p(xj=1|y=0),ϕy=p(y=1) 。

注意 xj 是輸入x中的第j個特征(第j個單詞)。

2.極大似然估計

對數化似然函數

ℓ=log∏i=1mp(x(i),y(i))=log∏i=1mp(x(i)|y(i))p(y(i))=log∏i=1m⎛⎝∏j=1np(x(i)j|y(i))⎞⎠p(y(i))=∑i=1m⎛⎝logp(y(i))+∑j=1nlogp(x(i)j|y(i))⎞⎠=∑i=1m⎡⎣y(i)logϕy+(1−y(i))log(1−ϕy)+∑j=1n(x(i)jlogϕj|y(i)+(1−x(i)j)log(1−ϕj|y(i)))⎤⎦

(1)對于 ϕj|y=0 ,

高斯判别分析(GDA)和樸素貝葉斯(NB)

這個估計的直覺解釋就是所有y=0的樣本中有單詞 xj 的郵件數量除以y=0樣本個數

(2)同理得

ϕj|y=1=∑mi=11{x(i)j=1∧y(i)=1}∑mi=11{y(i)=1}

這個估計的直覺解釋就是所有y=1的樣本中有單詞 xj 的郵件數量除以y=1樣本個數

(3)對于 ϕy

高斯判别分析(GDA)和樸素貝葉斯(NB)

3.預測

利用training_set,我們可以估計出 ϕi|y=1,ϕi|y=0,ϕy ,得到 p(x|y=1) 。根據貝葉斯公式

p(y=1|x)=p(x|y=1)p(y=1)p(x)

我們可以 argmaxyp(x|y)p(y) 來分類垃圾郵件。

3.2 Laplace smoothing

不過這樣模組化是有問題的,假設NIPS這個單詞是字典中的第23333個詞,那它對應的參數是 ϕ23333|y ,可是我們的訓練集中如果沒有一份郵件有這個單詞,那麼我們估計出來的 ϕ23333|y=0 ;這時新來的一份郵件有一個單詞是NIPS,那麼 p(y=1|x)=p(x|y=1)p(y=1)p(x)=00 ,這時極大似然估計明顯是不合理的一種估計。是以我們用貝葉斯估計來解決這個問題。

條件機率 p(x|y) 的貝葉斯估計是

p(xj=al|y=ck)=∑mi=11{x(i)j=al∧y(i)=ck}+λ∑mi=11{y(i)=ck}+lλ(xj∈a1,a2,⋅⋅⋅,al)

後驗機率 p(y) 的貝葉斯估計是 p(y=ck)=∑mi=11{y(i)=ck}+λm+kλ

當 λ=1 時,我們叫這種估參處理方法為laplace smoothing,郵件分類器中的參數估計自然就變成

ϕj|y=1=∑mi=11{x(i)j=1∧y(i)=1}+1∑mi=11{y(i)=0}+2ϕj|y=0=∑mi=11{x(i)j=1∧y(i)=0}+1∑mi=11{y(i)=0}+2ϕy=∑mi=11{y(i)=1}+1m+2

這樣就不會出現0的情況了,事實上這也是貝葉斯估計和極大似然估計的差别。

3.3 應用

郵件分類器中我們的輸入x僅僅是一個伯努利分布, xi∈{0,1} 。根據不同應用的特點,我們完全可以讓 xi∈{0,1,2⋅⋅⋅,k} ,然後用多項分布來模組化。

在有些情況下,我們的x不能很好被GDA,我們就可以嘗試離散化資料,比如在房價預測問題中,離散化處理房子面積資料,然後就可以使用NB來預測了。

高斯判别分析(GDA)和樸素貝葉斯(NB)

4.文本分類事件模型

在前面叙述的郵件分類模型中,我們假設x是二項分布的,顯然這種模型沒有考慮到單詞出現次數對郵件分類的影響程度。是以我們有了multinomial event model。還是和原來模型一樣,有一份字典含有50000個單詞,一份郵件以“The NIPS is ……”開頭,在multinomial event model中,這封郵件的x可以表示為

x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢3555523333133331⋅⋅⋅45555⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥TheNIPSisa⋅⋅⋅welcome

x的維數由郵件中的單詞數量決定。

這種事件模型的對數似然函數為

ℓ=log∏i=1mp(x(i),y(i))=log∏i=1mp(x(i)|y(i))p(y(i))=log∏i=1m⎛⎝∏j=1nip(x(i)j|y(i))⎞⎠p(y(i))

這裡的 ni 對于每個樣本都是不一樣的。

是以參數估計就是 ϕk|y=1=∑mi=1∑nij=11{x(i)j=k∧y(i)=1}+1∑mi=11{y(i)=0}ni+50000ϕk|y=0=∑mi=1∑nij=11{x(i)j=k∧y(i)=0}+1∑mi=11{y(i)=0}ni+50000ϕy=∑mi=11{y(i)=1}+1m+2

參考資料:

【1】cs229 by Andrew Ng from 網易公開課.

【2】《統計學習方法》李航

繼續閱讀