1. 程式人生 > >系統學習機器學習之引數方法(三)

系統學習機器學習之引數方法(三)

1判別模型與生成模型

上篇報告中提到的迴歸模型是判別模型,也就是根據特徵值來求結果的概率。形式化表示為clip_image002[8],在引數clip_image004[8]確定的情況下,求解條件概率clip_image006[8]。通俗的解釋為在給定特徵後預測結果出現的概率。

比如說要確定一隻羊是山羊還是綿羊,用判別模型的方法是先從歷史資料中學習到模型,然後通過提取這隻羊的特徵來預測出這隻羊是山羊的概率,是綿羊的概率。換一種思路,我們可以根據山羊的特徵首先學習出一個山羊模型,然後根據綿羊的特徵學習出一個綿羊模型。然後從這隻羊中提取特徵,放到山羊模型中看概率是多少,再放到綿羊模型中看概率是多少,哪個大就是哪個。形式化表示為求clip_image008[12](也包括clip_image010[8],y是模型結果,x是特徵。

利用貝葉斯公式發現兩個模型的統一性:

clip_image011[8]

由於我們關注的是y的離散值結果中哪個概率大(比如山羊概率和綿羊概率哪個大),而並不是關心具體的概率,因此上式改寫為:

clip_image001[4]

其中clip_image003[4]稱為後驗概率,clip_image005[4]稱為先驗概率。

clip_image007[4],因此有時稱判別模型求的是條件概率,生成模型求的是聯合概率。

常見的判別模型有線性迴歸、對數迴歸、線性判別分析、支援向量機、boosting、條件隨機場、神經網路等。

常見的生產模型有隱馬爾科夫模型、樸素貝葉斯模型、高斯混合模型、LDA、Restricted Boltzmann Machine等。

這篇部落格較為詳細地介紹了兩個模型:

2高斯判別分析(Gaussian discriminant analysis)

1) 多值正態分佈

多變數正態分佈描述的是n維隨機變數的分佈情況,這裡的clip_image009變成了向量,clip_image011[10]也變成了矩陣clip_image013。寫作clip_image015[4]。假設有n個隨機變數X1,X2,…,Xn。clip_image009[1]的第i個分量是E(Xi),而clip_image017[4]

概率密度函式如下:

clip_image018[28]

其中|clip_image020[8]clip_image013[1]的行列式,clip_image013[2]是協方差矩陣,而且是對稱半正定的。

clip_image009[2]是二維的時候可以如下圖表示:

clip_image022

其中clip_image009[3]決定中心位置,clip_image013[3]決定投影橢圓的朝向和大小。

如下圖:

clip_image024

對應的clip_image013[4]都不同。

2) 模型分析與應用

如果輸入特徵x是連續型隨機變數,那麼可以使用高斯判別分析模型來確定p(x|y)。

模型如下:

clip_image025[6]

輸出結果服從伯努利分佈,在給定模型下特徵符合多值高斯分佈。通俗地講,在山羊模型下,它的鬍鬚長度,角大小,毛長度等連續型變數符合高斯分佈,他們組成的特徵向量符合多值高斯分佈。

這樣,可以給出概率密度函式:

clip_image026[8]

最大似然估計如下:

clip_image027[8]

注意這裡的引數有兩個clip_image009[4],表示在不同的結果模型下,特徵均值不同,但我們假設協方差相同。反映在圖上就是不同模型中心位置不同,但形狀相同。這樣就可以用直線來進行分隔判別。

求導後,得到引數估計公式:

clip_image028[4]

clip_image030[6]是訓練樣本中結果y=1佔有的比例。

clip_image032[4]是y=0的樣本中特徵均值。

clip_image034[6]是y=1的樣本中特徵均值。

clip_image013[5]是樣本特徵方差均值。

如前面所述,在圖上表示為:

clip_image035[8]

直線兩邊的y值不同,但協方差矩陣相同,因此形狀相同。clip_image009[5]不同,因此位置不同。

3) 高斯判別分析(GDA)與logistic迴歸的關係

將GDA用條件概率方式來表述的話,如下:

clip_image036[8]

y是x的函式,其中clip_image037[8]都是引數。

進一步推匯出

clip_image038[4]

這裡的clip_image040[4]clip_image041[8]的函式。

這個形式就是logistic迴歸的形式。

也就是說如果p(x|y)符合多元高斯分佈,那麼p(y|x)符合logistic迴歸模型。反之,不成立。為什麼反過來不成立呢?因為GDA有著更強的假設條件和約束。

如果認定訓練資料滿足多元高斯分佈,那麼GDA能夠在訓練集上是最好的模型。然而,我們往往事先不知道訓練資料滿足什麼樣的分佈,不能做很強的假設。Logistic迴歸的條件假設要弱於GDA,因此更多的時候採用logistic迴歸的方法。

例如,訓練資料滿足泊松分佈,clip_image042[4]

clip_image043[6],那麼p(y|x)也是logistic迴歸的。這個時候如果採用GDA,那麼效果會比較差,因為訓練資料特徵的分佈不是多元高斯分佈,而是泊松分佈。

這也是logistic迴歸用的更多的原因。

3樸素貝葉斯模型

在GDA中,我們要求特徵向量x是連續實數向量。如果x是離散值的話,可以考慮採用樸素貝葉斯的分類方法。

假如要分類垃圾郵件和正常郵件。分類郵件是文字分類的一種應用。

假設採用最簡單的特徵描述方法,首先找一部英語詞典,將裡面的單詞全部列出來。然後將每封郵件表示成一個向量,向量中每一維都是字典中的一個詞的0/1值,1表示該詞在郵件中出現,0表示未出現。

比如一封郵件中出現了“a”和“buy”,沒有出現“aardvark”、“aardwolf”和“zygmurgy”,那麼可以形式化表示為:

clip_image044[8]

假設字典中總共有5000個詞,那麼x是5000維的。這時候如果要建立多項式分佈模型(二項分佈的擴充套件)。

多項式分佈(multinomial distribution)

某隨機實驗如果有k個可能結局A1,A2,…,Ak,它們的概率分佈分別是p1,p2,…,pk,那麼在N次取樣的總結果中,A1出現n1次,A2出現n2次,…,Ak出現nk次的這種事件的出現概率P有下面公式:(Xi代表出現ni次)

clip_image045[6]

對應到上面的問題上來,把每封郵件當做一次隨機試驗,那麼結果的可能性有clip_image047[6]種。意味著pi有clip_image047[7]個,引數太多,不可能用來建模。

換種思路,我們要求的是p(y|x),根據生成模型定義我們可以求p(x|y)和p(y)。假設x中的特徵是條件獨立的。這個稱作樸素貝葉斯假設。如果一封郵件是垃圾郵件(y=1),且這封郵件出現詞“buy”與這封郵件是否出現“price”無關,那麼“buy”和“price”之間是條件獨立的。

形式化表示為,(如果給定Z的情況下,X和Y條件獨立):

clip_image049[6]

也可以表示為:

clip_image051[6]

回到問題中

clip_image052[8]

這個與NLP中的n元語法模型有點類似,這裡相當於unigram。

這裡我們發現樸素貝葉斯假設是約束性很強的假設,“buy”從通常上講與“price”是有關係,我們這裡假設的是條件獨立。(注意條件獨立和獨立是不一樣的)

建立形式化的模型表示:

clip_image054[8]


clip_image058[10]

那麼我們想要的是模型在訓練資料上概率積能夠最大,即最大似然估計如下:

clip_image059

注意這裡是聯合概率分佈積最大,說明樸素貝葉斯是生成模型。

求解得:

clip_image060[8]

最後一個式子是表示y=1的樣本數佔全部樣本數的比例,前兩個表示在y=1或0的樣本中,特徵Xj=1的比例。

然而我們要求的是

clip_image062

實際是求出分子即可,分母對y=1和y=0都一樣。

當然,樸素貝葉斯方法可以擴充套件到x和y都有多個離散值的情況。對於特徵是連續值的情況,我們也可以採用分段的方法來將連續值轉化為離散值。具體怎麼轉化能夠最優,我們可以採用資訊增益的度量方法來確定(參見Mitchell的《機器學習》決策樹那一章)。

比如房子大小可以如下劃分成離散值:

clip_image064

4拉普拉斯平滑

樸素貝葉斯方法有個致命的缺點就是對資料稀疏問題過於敏感。

比如前面提到的郵件分類,現在新來了一封郵件,郵件標題是“NIPS call for papers”。我們使用更大的網路詞典(詞的數目由5000變為35000)來分類,假設NIPS這個詞在字典中的位置是35000。然而NIPS這個詞沒有在訓練資料中出現過,這封郵件第一次出現了NIPS。那我們算概率的時候如下:

clip_image065[8]

由於NIPS在以前的不管是垃圾郵件還是正常郵件都沒出現過,那麼結果只能是0了。

顯然最終的條件概率也是0。

clip_image066[4]

原因就是我們的特徵概率條件獨立,使用的是相乘的方式來得到結果。

為了解決這個問題,我們打算給未出現特徵值,賦予一個“小”的值而不是0。

具體平滑方法如下:

假設離散型隨機變數z有{1,2,…,k}個值,我們用clip_image068[6]來表示每個值的概率。假設有m個訓練樣本中,z的觀察值是clip_image069[6]其中每一個觀察值對應k個值中的一個。那麼根據原來的估計方法可以得到

clip_image070[4]

說白了就是z=j出現的比例。

拉普拉斯平滑法將每個k值出現次數事先都加1,通俗講就是假設他們都出現過一次。

那麼修改後的表示式為:

clip_image071[4]

每個z=j的分子都加1,分母加k。可見clip_image072[4]

這個有點像NLP裡面的加一平滑法,當然還有n多平滑法了,這裡不再詳述。

回到郵件分類的問題,修改後的公式為:

clip_image073[4]

5文字分類的事件模型

回想一下我們剛剛使用的用於文字分類的樸素貝葉斯模型,這個模型稱作多值伯努利事件模型(multi-variate Bernoulli event model)。在這個模型中,我們首先隨機選定了郵件的型別(垃圾或者普通郵件,也就是p(y)),然後一個人翻閱詞典,從第一個詞到最後一個詞,隨機決定一個詞是否要在郵件中出現,出現標示為1,否則標示為0。然後將出現的片語成一封郵件。決定一個詞是否出現依照概率p(xi|y)。那麼這封郵件的概率可以標示為clip_image074[8]

讓我們換一個思路,這次我們不先從詞典入手,而是選擇從郵件入手。讓i表示郵件中的第i個詞,xi表示這個詞在字典中的位置,那麼xi取值範圍為{1,2,…|V|},|V|是字典中詞的數目。這樣一封郵件可以表示成clip_image075[8],n可以變化,因為每封郵件的詞的個數不同。然後我們對於每個xi隨機從|V|個值中取一個,這樣就形成了一封郵件。這相當於重複投擲|V|面的骰子,將觀察值記錄下來就形成了一封郵件。當然每個面的概率服從p(xi|y),而且每次試驗條件獨立。這樣我們得到的郵件概率是clip_image076。居然跟上面的一樣,那麼不同點在哪呢?注意第一個的n是字典中的全部的詞,下面這個n是郵件中的詞個數。上面xi表示一個詞是否出現,只有0和1兩個值,兩者概率和為1。下面的xi表示|V|中的一個值,|V|個p(xi|y)相加和為1。是多值二項分佈模型。上面的x向量都是0/1值,下面的x的向量都是字典中的位置。

形式化表示為:

m個訓練樣本表示為:clip_image077[6]

clip_image078[6]clip_image079[6]

表示第i個樣本中,共有ni個詞,每個詞在字典中的編號為clip_image080[6]

那麼我們仍然按照樸素貝葉斯的方法求得最大似然估計概率為

clip_image081[6]

解得,

clip_image082[6]

與以前的式子相比,分母多了個ni,分子由0/1變成了k。

舉個例子:

X1

X2

X3

Y

1

2

-

1

2

1

-

0

1

3

2

0

3

3

3

1

假如郵件中只有a,b,c這三詞,他們在詞典的位置分別是1,2,3,前兩封郵件都只有2個詞,後兩封有3個詞。

Y=1是垃圾郵件。

那麼,

clip_image084[6]


clip_image088[6]

假如新來一封郵件為b,c那麼特徵表示為{2,3}。

那麼

clip_image090[6]

clip_image092

那麼該郵件是垃圾郵件概率是0.6。

注意這個公式與樸素貝葉斯的不同在於這裡針對整體樣本求的clip_image094,而樸素貝葉斯里面針對每個特徵求的clip_image096,而且這裡的特徵值維度是參差不齊的。

這裡如果假如拉普拉斯平滑,得到公式為:

clip_image097[6]

表示每個k值至少發生過一次。

另外樸素貝葉斯雖然有時候不是最好的分類方法,但它簡單有效,而且速度快。