一:引言
在前面我們談論到的算法都是在給定x的情況下直接對p(y|x;Θ)進行建模。例如,邏輯回歸利用hθ(x) = g(θTx)對p(y|x;Θ)建模。
現在考慮這樣一個分類問題,我們想根據一些特征來區別動物是大象(y=1)還是狗(y=0)。給定了這樣一個訓練集,邏輯回歸或感知機算法要做的就是去找到一個決策邊界,將大象和狗的樣本分開來。但是如果換個思路,首先根據大象的特征來學習出一個大象的模型,然后根據狗的特征學習出狗的模型,最后對於一個新的樣本,提取它的特征先放到大象的模型中求得是大象的概率,然后放到狗的模型中求得是狗的概率,最后我們比較兩個概率哪個大,即確定這個動物是哪種類型。也即求p(x|y)(也包括p(y)),y為輸出結果,x為特征。
上面介紹了那么多,現在我們來試着定義這兩種解決問題的方法:
判別學習算法(discriminative learning algorithm):直接學習p(y|x)或者是從輸入直接映射到輸出的方法
生成學習算法(generative learning algorithm):對p(x|y)(也包括p(y))進行建模。
為了深化理解生成學習算法,我們再看
y:輸出變量,取兩值,如果是大象取1,狗則取0
p(x|y = 0):對狗的特征進行建模
p(x|y = 1):對大象的特征建模
當我們對p(x|y)和p(y)完成建模后,運用貝葉斯公式,就可以求得在給定x的情況下y的概率,如下:
p(x) = p(x|y = 1)p(y = 1) + p(x|y =0)p(y = 0)
由於我們關心的是y離散結果中哪一個的概率更大,而不是要求得具體的概率,所以上面的公式我們可以表達為:
常見的生成模型有:隱馬爾可夫模型HMM、朴素貝葉斯模型、高斯混合模型GMM、LDA等
二:高斯判別分析(Gaussian Discriminant Analysis)
下面介紹第一個生成學習算法,GDA。在GDA中,假設p(x|y)是多項正態分布
2.1 多項正態分布(The multivariate normal distribution)
n維的多項正態分布也成為多項高斯分布。參數為均值向量μ∈Rn ,協方差矩陣∑∈Rnxn,記為其概率密度表示為:
|Σ|表示矩陣Σ的行列式(determinant)
協方差:Cov(Z) =E[(Z − E[Z])(Z − E[Z])T ]=E[ZZT ]− (E[Z])(E[Z])T =Σ。If X ∼ N (µ, Σ),則Cov(X) = Σ.
接下來我們結合圖像看一下多項高斯分布的例子。
說明:
左邊第一個圖,μ為一個2x1的向量,值為0,協方差矩陣∑=I(2x2的單位向量)此時的高斯分布稱為標准正態分布
第二個圖,μ不變,∑=0.6I
第三個圖,μ不變,∑=2I
2.2高斯判別分析模型(The Gaussian Discriminant Analysis model)
現在有一個分類問題,訓練集的特征值x是隨機連續值,那么我們可以利用高斯判別分析模型,假設p(x|y)滿足多值正態分布,即:
概率分布為:
模型參數為φ, Σ, µ0 and µ1 ,對數似然函數為:
注意這里的參數有兩個
,表示在不同的結果模型下,特征均值不同,但我們假設協方差相同。反映在圖上就是不同模型中心位置不同,但形狀相同。這樣就可以用直線來進行分隔判別。
求得所有的參數:
所以通過上面所述,畫出圖像如下圖:
直線兩邊的y值不同,但協方差矩陣相同,因此形狀相同。不同,因此位置不同。
2.3討論GDA和邏輯回歸(Discussion: GDA and logistic regression)
現在我們把p(y = 1|x; φ, µ0, µ1, Σ)看成是x的函數,則可以表達為:
θ 是參數φ, Σ, µ0, µ1的函數,這正是邏輯回歸的形式。
邏輯回歸和GDA在訓練相同的數據集的時候我們得到兩種不同的決策邊界,那么怎么樣來進行選擇模型呢:
上面提到如果p(x|y)是一個多維的高斯分布,那么p(y|x)可以推出一個logistic函數;反之則不正確,p(y|x)是一個logistic函數並不能推出p(x|y)服從高斯分布.這說明GDA比logistic回歸做了更強的模型假設.
如果p(x|y)真的服從或者趨近於服從高斯分布,則GDA比logistic回歸效率高.
當訓練樣本很大時,嚴格意義上來說並沒有比GDA更好的算法(不管預測的多么精確).
事實證明即使樣本數量很小,GDA相對logisic都是一個更好的算法.
但是,logistic回歸做了更弱的假設,相對於不正確的模型假設,具有更好的魯棒性(robust).許多不同的假設能夠推出logistic函數的形式. 比如說,如果那么p(y|x)是logistic. logstic回歸在這種類型的Poisson數據中性能很好. 但是如果我們使用GDA模型,把高斯分布應用於並不是高斯數據中,結果是不好預測的,GDA就不是很好了.
三:朴素貝葉斯(Naive Bayes)
在GDA中,特征向量x是連續的實數向量,那么現在談論一下當x是離散時的情況。
我們沿用對垃圾郵件進行分類的例子,我們要區分郵件是不是垃圾郵件。分類郵件是文本分類的一種應用
將一封郵件作為輸入特征向量,與現有的字典進行比較,如果在字典中第i個詞在郵件中出現,則xi =1,否則xi =0,所以現在我們假設輸入特征向量如下:
選定特征向量后,現在要對p(x|y)進行建模:
假設字典中有50000個詞,x ∈ {0, 1}50000 如果采用多項式建模, 將會有250000種結果,250000-1維的參數向量,這樣明顯參數過多。所以為了對p(x|y)建模,需要做一個強假設,假設x的特征是條件獨立的,這個假設稱為朴素貝葉斯假設(Naive Bayes (NB) assumption),這個算法就稱為朴素貝葉斯分類(Naive Bayes classifier).
解釋:
如果有一封垃圾郵件(y=1),在郵件中出現buy這個詞在2087這個位置它對39831這個位置是否出現price這個詞都沒有影響,也就是,我們可以這樣表達p(x2087|y) = p(x2087|y, x39831),這個和x2087 and x39831 相互獨立不同,如果相互獨立,則可以寫為p(x2087) = p(x2087|x39831),我們這里假設的是在給定y的情況下,x2087 and x39831 獨立。
現在我們回到問題中,在做出假設后,可以得到:
解釋
第一個等號用到的是概率的性質 鏈式法則
第二個等式用到的是朴素貝葉斯假設
朴素貝葉斯假設是約束性很強的假設,一般情況下 buy和price是有關系的,這里我們假設的是條件獨立 ,獨立和條件獨立不相同
模型參數:
φi|y=1 = p(xi= 1|y = 1)
φi|y=0 = p(xi = 1|y = 0)
φy = p(y = 1)
對於訓練集{(x(i) , y(i)); i =1, . . . , m},根據生成學習模型規則,聯合似然函數(joint likelihood)為:
得到最大似然估計值:
最后一個式子是表示y=1的樣本數占全部樣本數的比例,前兩個表示在y=1或0的樣本中,特征Xj=1的比例。
擬合好所有的參數后,如果我們現在要對一個新的樣本進行預測,特征為x,則有:
實際上只要比較分子就行了,分母對於y = 0和y = 1是一樣的,這時只要比較p(y = 0|x)與p(y = 1|x)哪個大就可以確定郵件是否是垃圾郵件。
3.1拉普拉斯平滑(Laplace smoothing)
朴素貝葉斯模型可以在大部分情況下工作良好。但是該模型有一個缺點:對數據稀疏問題敏感。
比如在郵件分類中,對於低年級的研究生,NIPS顯得太過於高大上,郵件中可能沒有出現過,現在新來了一個郵件"NIPS call for papers",假設NIPS這個詞在詞典中的位置為35000,然而NIPS這個詞從來沒有在訓練數據中出現過,這是第一次出現NIPS,於是算概率時:
由於NIPS從未在垃圾郵件和正常郵件中出現過,所以結果只能是0了。於是最后的后驗概率:
對於這樣的情況,我們可以采用拉普拉斯平滑,對於未出現的特征,我們賦予一個小的值而不是0。具體平滑方法為:
假設離散隨機變量取值為{1,2,···,k},原來的估計公式為:
使用拉普拉斯平滑后,新的估計公式為:
即每個k值出現次數加1,分母總的加k,類似於NLP中的平滑,具體參考宗成慶老師的《統計自然語言處理》一書。
對於上述的朴素貝葉斯模型,參數計算公式改為: