機器學習算法之樸素貝葉斯(Naive Bayes)--第一篇

引言

先前曾經看了一篇文章,一個老外程序員寫了一些很牛的Shell腳本,包括晚下班自動給老婆發短信啊,自動衝Coffee啊,自動掃描一個DBA發來的郵件啊, 等等。於是我也想用自己所學來做一點有趣的事情。我的想法如下:

  1. 首先我寫個scrapy腳本來抓取某個網站上的笑話
  2. 之後寫個Shell腳本每天早上6點自動抓取最新的笑話
  3. 然後用樸素貝葉斯模型來判斷當前的笑話是否屬於成人笑話
  4. 如果是成人笑話,用腳本把它自動發給好兄弟的郵箱
  5. 如果不是成人笑話,用腳本把它自動發給女朋友的郵箱

在這個系列的文章中,你會學到:

  1. 樸素貝葉斯背後的數學原理
  2. 算法具體的工作過程(結合實例)
  3. scikit-learn快速實現算法

這個系列的文章還會涉及到scrapy,pandas,numpy的一些知識,遇到這些知識的時候我會具體解釋的。這個系列的文章我會主要詳細的介紹上面的第3步實現過程,其餘的我會將源碼放在github上供大家參考。下面,就讓我們享受這個奇妙之旅吧。

樸素貝葉斯概述

衆所周知,樸素貝葉斯是一種簡單但是非常強大的線性分類器。它在垃圾郵件分類,疾病診斷中都取得了很大的成功。它只所以稱爲樸素,是因爲它假設特徵之間是相互獨立的,但是在現實生活中,這種假設基本上是不成立的。那麼即使是在假設不成立的條件下,它依然表現的很好,尤其是在小規模樣本的情況下。但是,如果每個特徵之間有很強的關聯性和非線性的分類問題會導致樸素貝葉斯模型有很差的分類效果。

樸素貝葉斯背後的數學原理

後驗概率(Posterior Probabilities)

爲了更好地瞭解樸素貝葉斯分類器是怎麼工作的,瞭解貝葉斯法則是很必要的。它可以被簡單地描述成下面的公式:

=

我們可以用一個關於老天是否下雨的例子來解釋上面的公式。

P()=P()P()P()

我們可以看到,如果我們想要在給定現象下,預測某種結果的概率,我們必須知道:1、在給定這種結果下,出現這種現象的概率。2、出現這種結果的概率。3、出現這種現象的概率。

在實際應用中,我們的現象不可能只有一個,比如,在垃圾郵件分類中,甚至可能有幾千個詞的特徵向量。下面,我將引入一些數學上的記號來統一後面的表達:

  1. ωjj{1,2,3,,m}
  2. xiii{1,2,3,,n}

樸素貝葉斯的目標就是分別求得P(ωj|)j{1,2,3,,m},選出最大的概率。

下面我將分別解釋上面的三個概率。

條件概率(Conditional Probabilities)

隨機變量的獨立性意味着我告訴你一個變量的出現,並不影響你相信另一個出現的可能。最簡單的一個例子就是拋硬幣,也就是第一次的反正面並不會影響你再一次拋出現反正面的概率(也就是0.5)。

樸素貝葉斯模型中,特徵之間不僅僅是獨立的,而且是加條件的獨立的。比如說:我的特徵向量xn,那麼我可以把概率寫成下面的形式:

P(x|ωj)=P(x1|ωj)P(x2|ωj)P(x3|ωj)P(xn|ωj)=k=1nP(xk|ωj)

P(x|ωj)的概率我們可以理解成:在給定屬於某個類別的條件下,觀察到出現現象x的概率。在特徵向量中的每個特點的概率我們都可以通過極大似然估計(maximum-likelihood estimate)來求得,也就是簡單地求某個特徵在某個類別中的頻率,公式如下:

P(xi|ωj)=Nxi|ωjNωj(i=(1,,n))

  • Nxi|ωj:ωjxi
  • Nωjωj

現在,我要用一個簡單的分類垃圾郵件的例子來闡明上面的概念。比如我有4封郵件,其中2封爲垃圾郵件,特徵向量中有4個特徵。具體如下表:

樣本序號 love buy deal cat 是否爲垃圾郵件
1 1 0 0 1 不是
2 0 1 1 0
3 0 1 0 1
4 1 0 1 1 不是

現在我要求P(buy,deal|spam)這個概率,通過條件的獨立性和極大似然估計,我們可以求出這個概率:

P(buy,deal|spam)=P(buy|spam)P(deal|spam)=1+11+1+1+111+1+1+1=18

先驗概率(Prior Probabilities)

先驗概率道理其實很簡單,在上面的那個垃圾郵件的例子中,我們可以用極大似然估計來求得:24,通式如下:

p(ωj)=NωjNc

  • Nωjωj
  • Nc

通過上面後驗概率的公式,我們可知:如果先驗概率服從均勻分佈,那麼後驗概率將完全取決於條件概率和現象概率,然而現象概率是常量,所以後驗概率就完全取決於條件概率了。

注意:我認爲在某些分類應用中,先驗概率應該去諮詢應用領域的專家,你不能單憑樣本中出現的概率來求得先驗概率。比如:如果我的訓練集中,下雨天的樣本要比晴天的樣本多,你不能說現實生活中下雨天的概率要比晴天的時候大。因此,對於某些應用,先驗概率應該去諮詢應用領域的專家。

現象概率(Evidence Probabilities)

現象概率是獨立於類別的。比如上面那個垃圾郵件的例子,我想知道P(deal)這個現象發生的概率,我只需要找出我所有的樣本中出現deal這個特徵的概率,與屬於哪個類別沒有任何關係。

其實我們完全沒有必要算出這個概率,因爲我們要求屬於哪個類別的概率最大,而在這個過程中,它對於每次計算類別的概率中(也就是P(ωj|xi))都是常量,所以它不會影響到最終的決策。

加上平滑(Additive Smoothing)

還是上面那個郵件的例子,假設我們要求P(love|spam),我們會發現,在垃圾郵件中並沒有出現love這個詞,因此概率爲0,如果這個條件概率爲0,那麼整個後驗概率就爲0。爲了避免0概率的發生,我們可以加上平滑項。把上面條件概率的公式改爲下面的形式:

P(xi|ωj)=Nxi|ωj+αNωj+αn(i=(1,,n))

  • Nxi|ωj:ωjxi
  • Nωjωj
  • α附加的平滑項參數。α<1叫做Lidstone smoothing ;α=1叫做Laplace smoothing
  • n特徵數

總結

現在,我們已經擁有了樸素貝葉斯的數學背景知識和其算法的過程。在下篇文章中,我將主要介紹樸素貝葉斯在文本分類中的模型和技巧,爲我們的成人笑話分類打下良好的基礎。


Ref:  http://blog.csdn.net/xlinsist/article/details/51236454

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章