關於機器學習中的樸素貝葉斯以及拉普拉斯平滑

看過我博文的同學可能知道機器學習之中,存在着判別學習以及生成學習,其主要區別我在另一篇文章中有詳細描述,今天我們要討論的是,在高斯判別分析之中,特徵向量x是連續的,實數域上的向量,那麼如果這個特徵向量x是離散的情況呢?這就引入了樸素貝葉斯的理論。

在這裏,借鑑Andrew Ng機器學習課程上面的例子,即對垃圾郵件進行分類,我們希望能夠有一種學習算法,能夠對郵件進行分類,自動區分郵件是否是垃圾郵件。

好的,那麼假設我們現在有一堆訓練郵件集合,這一堆郵件是否是垃圾郵件我們知道,我們想通過郵件生成特徵向量,然後判斷是否是垃圾郵件,我們通過不同的特徵向量來代表每一封郵件,這個特徵向量的長度取決於我們的字典中所含的單詞個數,然後只有相應的詞出現,我們便把那個位置置爲1,否則置爲0.

我們構建完特徵向量之後呢,我們需要對f(x|y)進行建模(體現生成學習算法的特點),由於一個特徵向量之中可能含有許多詞,那麼這個特徵向量的維度也會極其高,在此需要一個強而有力的假設來解決這個問題

我們假設,x在給定y的情況下是條件獨立的,這個假設被稱作樸素貝葉斯假設(NB assumption),由此假設產生的算法被稱爲樸素貝葉斯分類器,這個假設啥意思呢?

就是說,我告訴你一封郵件是垃圾郵件,這對於裏面出現了"購買"這件事並不會影響到裏面出現了"價格"這件事。利用這個假設,我們可以得到

for15

接着定義這麼幾個參數

for16

接着我們給定m個訓練集合(x^(i),y^(i))i=1,...,m;

我們可以寫出他們的聯合似然函數

for17

利用極大似然估計,我們便可以估計出三個參數的估計值

下面不加證明地給出三個參數的估計值(讀者可以自行證明)

for18

其中1{true}=1,1{false}=0,^代表邏輯與,其中x的下標j代表第j個單詞

有了這三個參數,我們便可以很好地使用貝葉斯公式來計算f(y|x)了

for19

到這裏我們成功對p(x|y)進行建模,然後利用貝葉斯公式計算出p(y=1|x),當然x一般是多個離散值的,我們同樣需要利用極大似然估計去三個參數,如果遇到x是連續的,我們也可以將連續的x離散化處理,如果我們使用多維正態分佈建模的話效果並沒有將其離散化然後使用樸素貝葉斯方法來的優(而不是使用GDA),使用樸素貝葉斯通常可以得到一個更好的分類器。

在這裏需要提及一個方法-----------拉普拉斯平滑(Laplace smoothing)

在上面所述的樸素貝葉斯方法之中,有一個小問題,引用上面所講的垃圾郵件的例子,有這麼一個單詞在你的字典之中,但是它從未出現,那我們利用極大似然估計計算出來的前兩個參數的估計值都是0,即不管是垃圾郵件還是正常郵件中這個單詞都沒出現過,好的,那麼我們利用貝葉斯公式計算p(y=1|x)的時候,分子因爲乘上了一個參數爲0的值變成0,分母也一樣變成0,那麼就變成0/0不可預知,爲了解決這個問題,引出了拉普拉斯平滑。

出於簡單,我們先修改下第三個參數

for20

具體操作方式爲加上對應的平均概率的分子和分母,如上是垃圾郵件的概率爲1/2,那麼就分子加分子,分母加分母

同樣的操作對於前兩個參數

for21

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