樸素貝葉斯理論進階(1)——cs229(4、5)筆記

樸素貝葉斯分類器是生成式模型的代表,同時樸素貝葉斯和邏輯迴歸都是線性分類器,兩者可以組成了一組生成-判別對。爲了更好的瞭解樸素貝葉斯,又倒回去看了Andrew ng的機器學習視頻第4講和第5講,並做了如下筆記。以下知識基本上都是視頻中的內容,沒有什麼自己的東西,如有對視頻理解不到位的地方,歡迎指正。

1.生成式方法簡介

分類算法要解決的問題是給定一個如下圖訓練集合,如果對它運行邏輯迴歸這樣的算法,它會觀察這組數據,並嘗試找到一條線能講圖中的“X”和“O”儘量分開,新的樣本過來,只需要把新樣本的特徵拿到這條直線的公式上去計算,看得到的值是在等式左邊還是右邊便可分類了。
這裏寫圖片描述
除了像邏輯迴歸這種直接計算這條的直線,另外一種方法是遍歷訓練集合,查看其中所有“X”樣本,基於這些樣本直接對“X”的特徵進行建模,然後再找到所有“O”的樣本,對“O”的特徵進行建模,當對新的樣本進行分類時,只需要拿特徵分別匹配“X”的模型和“O”的模型,看哪一個模型的匹配度更高,將新樣本定爲更高的那一類。
直接對分類模型建模,這是判別式學習方法;對各類型分別建模,這是生成式學習方法。

判別式方法:直接學習條件似然P(y|x);
生成式方法:對聯合似然P(x,y)進行建模,而p(x,y)又轉化爲p(x|y)p(y),實際上主要是對p(x|y)建模,給定所屬類的情況下,計算某種特徵的概率,p(y)計算相對簡單。
以上,x表示feature,y爲class。

2.多維高斯分佈

視頻講了兩種生成式學習方法,第一種是高斯判別分析(GDA),在這個模型中,假設p(x|y)服從多維高斯分佈。
通常正態分佈指單變量正態分佈,而多維正態分佈的u從單數轉成了這裏寫圖片描述,方差變成了協方差矩陣這裏寫圖片描述協方差,協方差的計算這裏寫圖片描述,分佈表示爲N(μ,∑)。其概率密度表示爲
這裏寫圖片描述

2維高斯分佈的密度圖如下:
這裏寫圖片描述
上面3個圖中,均值u爲0向量,協方差矩陣爲對角矩陣,最左邊圖的∑爲單位矩陣,它是標準2維高斯分佈;中間是∑對角線上的值同時變爲0.6;最右邊,∑對角線上的值同時變爲2.和單變量高斯分佈一樣,協方差越大,分佈散的越開,協方差越小,分佈越集中。
這裏寫圖片描述
這3個圖中,均值依然爲0向量,但協方差矩陣不是對角矩陣,他們的協方差矩陣分別是:
這裏寫圖片描述
隨着負對角線上的值越來越大,分佈的傾斜的角度也越來越大。
這裏寫圖片描述
以上3圖的協方差矩陣爲單位矩陣,但期望不再是0向量,期望向量如下:
這裏寫圖片描述

和單變量高斯分佈一樣,期望決定中心點的位置,協方差決定分佈的形狀。

3. 高斯判別分析

高斯判別分析是指x|y=i服從高斯分佈。
根據貝葉斯規則
這裏寫圖片描述
對於所有類型,p(x)是一樣的,會被似然函數忽略掉,y是二值的,自然服從伯努利分佈,x|y=i服從高斯分佈:
這裏寫圖片描述
對數似然函數:
這裏寫圖片描述
參數爲這裏寫圖片描述、∑。通過樣本統計可以計算出以上參數:
這裏寫圖片描述
兩個模型計算出來後,預測通過最大似然來預測新的樣本的類別:
這裏寫圖片描述
對於2分類來說,分別計算兩個類別的p(x|y)p(y),更大的一個爲該樣本的類別。

4.GDA和邏輯迴歸

當測試樣本的特徵從class=0的逐漸滑動到class=1中,根據GDA計算出的p(y=1|x)的滑動曲線是這樣的:
這裏寫圖片描述
通過GDA推導出來
這裏寫圖片描述
這就是邏輯迴歸y=1的概率函數。
也就是說,當x|y服從高斯分佈,那麼推導出來的y|x是服從邏輯迴歸的。但是,形式是邏輯迴歸的形式,參數值卻和直接邏輯迴歸學習到的參數不同。
在x|y服從高斯分佈的假設條件上,可以推出y|x的後驗分佈是一個邏輯迴歸函數,但p(y|x)是邏輯迴歸函數不能推出x|y服從高斯分佈。因爲,只要x|y服從指數分佈,都能推出p(y|x)是邏輯迴歸函數。
x|y服從高斯分佈的假設比y|x服從邏輯迴歸分佈的假設更強,前者可以推出後者,後者卻不能推出前者。當數據集x|y確實服從高斯分佈,即便是大概服從,那麼GDA會優於LR,因爲GDA可以更多的利用數據中的信息,但是,如果數據的分佈不那麼確定,那麼LR的表現會更好,因爲它更直接。如果假設數據服從高斯分佈,但實際上它服從泊松分佈,那GDA效果會不好,而LR卻沒有影響,數據依然可以推出LR。
事實證明,使用生成式學習方法的好處——它需要更少的數據就能達到較好的效果。數據不需要精準的服從高斯分佈,只要近似就可以。LR的假設更少,模型對假設上也更強壯,它的魯棒性更好,但爲了擬合模型,需要更多的數據。

5. 樸素貝葉斯

5.1 基本原理
樸素貝葉斯是另一種生成式模型,基本的理論在前一篇已經寫過了。
視頻中以垃圾郵件分類爲例,這是文本二分類的應用。
文本分類涉及到的最基本要素——詞。假設以一本詞典作爲文本的詞典,詞典包含5000個詞,首先,我們遍歷每一封郵件,看詞典中哪些詞在郵件中出現,出現則爲1,否則爲0.那麼每一封郵件的特徵集合是2000維的,其中郵件中出現過的詞值爲1.例如下面這個樣本:
這裏寫圖片描述
郵件被映射成了一個5000維的向量。如果按照GDA的方式,需要計算模型p(x|y),其中x是一個5000維的向量,對於二項分類,參數會有這裏寫圖片描述,看起來好可怕。
如果做樸素貝葉斯假設,即5000個詞出現在郵件中是相互獨立的,前n個詞對預測後一個詞完全沒有影響(無論是中文還是英文,這基本不可能成立)。那麼
這裏寫圖片描述
參數變爲10000+個,參數估計:
這裏寫圖片描述
第一個公式分子的含義是遍歷整個數據集中所有的垃圾郵件中,計算垃圾郵件中出現詞j的次數;分母是垃圾郵件的數量。

聯合似然函數:
這裏寫圖片描述

由於是二分類,可以當通過最大似然來預測,在ng的另一篇論文中也講到可以通過兩個類別的似然函數的比值的對數是否大於0來判定是否爲垃圾郵件。

樸素貝葉斯並沒有像GDA那樣用到模型假設,只是用了數據特性假設,假設數據各維間相互獨立。

5.2 拉普拉斯平滑
如上垃圾郵件分類問題。加入某一封新的郵件中出現了一個在以前的訓練樣本郵件中沒有出現過的詞,加入這個詞在詞典中的位置是3500,那麼
這裏寫圖片描述
這樣一來,預測是垃圾郵件的概率
這裏寫圖片描述
不是垃圾郵件的概率也是0/0。預測根本沒有辦法進行。
爲了化解這種尷尬,於是將每個詞在垃圾郵件中出現的次數上加一個正的常數,無論這個詞實際出現的次數爲多少,都會額外加上這個正的常數,通常這個常數取1.對於非垃圾郵件,處理是一樣的。
上例中的各參數就變成了
這裏寫圖片描述
這裏寫圖片描述
廣泛來說,假設數據有k個類別,給每一維特徵在類別i中出現的概率上加一個極小的正的常數,保證p(x=i|y=j)永遠爲正,那麼每維特徵在所有別類中加上的值爲k*i,這樣相加之後每一維特徵的這裏寫圖片描述 依然成立。

實際分類問題中,這裏寫圖片描述通常不容易爲0,如果它爲0了,那麼這一類別就沒有存在的意義了。因此,拉普拉斯平滑通常只需要對p(x|y)實施。

文本分類事件模型

上面的垃圾郵件分類問題只考慮詞典中的每一個詞是否在垃圾郵件中出現,出現則該維特徵爲1,否則,爲0,這種方式的樸素貝葉斯被稱爲多元伯努利事件模型。
而實際上某些敏感詞在垃圾郵件中出現的次數很重要,這就涉及另一種模型——多項事件模型。爲了描述這種模型,在前面提到的郵件數據集中用另一種不同的標記法,第j個詞在該郵件中的取值範圍不再是{0,1},而是,{1, …. ,|V|},其中|V|爲詞典的詞總量。一封郵件由向量這裏寫圖片描述 表示,其中n爲郵件的詞數量,每一封郵件的特徵向量維度不同。郵件“A NIPS…”,x1=1, x2=3500(按照前面的,A爲詞典中的第一個詞,NIPS爲第3500個詞。)。
多項事件模型中,假設一封郵件的生成過程是隨機的。也就是說郵件“A NIPS … ”中第一個詞A和第二個詞NIPS是完全獨立的,後面各詞也是完全獨立的。依然採用這裏寫圖片描述 判別郵件是否爲垃圾郵件,但是計算p(x|y)的算法不同了,前面的例子中,每一維特徵是服從伯努利分佈的,而多項式事件模型中,每維特徵是服從多項分佈的。
這裏加一點題外話,sklearn提供的NB模型中,有伯努利NB、多項NB、高斯NB,不同的NB應該就在於特徵服從的分佈吧。
在求參數時,並不會考慮詞出現的位置對參數沒有影響,而更注重的是詞在郵件中出現的次數,雖然特徵這裏寫圖片描述 表示的是郵件第一個詞到第n個詞在詞典中的位置,但實際計算中,第1個詞和第n個詞是毫無差別的。
詞典依然有5000個詞,每封郵件的詞長度爲這裏寫圖片描述,對於m封郵件的樣本集表示爲
這裏寫圖片描述
其中
這裏寫圖片描述
似然函數如下:
這裏寫圖片描述
最大化似然函數的各參數如下:
這裏寫圖片描述
從參數估計中可以看出,這裏寫圖片描述 的分子表示對詞k在樣本集中所有垃圾郵件中出現的總次數,參數個數和前面例子中的參數個數相同。
考慮拉普拉斯平滑,由於k有5000個取值,
這裏寫圖片描述

樸素貝葉斯處理文本看起來有點簡單粗暴,但是它的效果貌似挺好的,而且訓練速度很快。按照Andrew ng的說法,這種方式類似於一元語法,二元語法或者三元語法對文本分類可能會有改善,但改善是很微小的。

發佈了101 篇原創文章 · 獲贊 92 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章