1. 程式人生 > >生成學習演算法之樸素貝葉斯演算法

生成學習演算法之樸素貝葉斯演算法

2  樸素貝葉斯演算法

在GDA中,特徵向量是連續的實值向量。現在讓我們討論一種不同的學習演算法,在這個演算法中,是離散值。
對於我們的激勵的例子,考慮使用機器學習建立一個電子郵件的垃圾郵件過濾器。這裡,我們希望根據它們是未經請求的商業(垃圾)電子郵件還是非垃圾郵件進行分類。在學習了這樣做之後,我們然後可以讓我們的郵件閱讀器自動過濾掉垃圾資訊,並可能將它們放置在一個單獨的郵件資料夾中。電子郵件的分類是一個更廣泛的被稱作文字分類(text classification)問題的一個例子。
比如說我們有一個訓練集(一組被標記為垃圾郵件或非垃圾郵件的電子郵件)。通過指定用來表示電子郵件的特徵,我們將開始建立我們的垃圾郵件過濾器。
我們將通過一個特徵向量表示一封電子郵件,特徵向量的長度為詞典中單詞的數量。確切地說,如果一封電子郵件包括詞典中的第
個單詞,然後我們令;否則我們令
比如說,向量


用來表示一封包含單詞”a”和”buy”,但不包括”aardvark”,”aardworf”和”zygmurgy”的電子郵件。被編碼到特徵向量的那組單詞被稱作詞彙(vocabulary),所以的維數等於詞彙表的大小。
已經選擇好了我們的特徵向量,我們現在想建立一個判別模型。所以,我們必須建模。但是如果我們有,比如,50000個單詞的詞彙表,然後是一個50000維的0和1的向量),並且如果我們想用一個有個可能結果的多項式分佈對建模,然後我們最終會得到維的引數向量。這明顯有太多的引數。
為了建模,因此我們將做一個非常強的假設。我們將假設在給定時是條件獨立的。這個假設被稱作樸素貝葉斯假設(Naive Bayes(NB)assumption)
,由此產生的演算法被稱作樸素貝葉斯分類器(Naive Bayes classifier)。比如,如果意味著垃圾郵件;”buy”是第2087個單詞,”price”是第39831個單詞;然後我們正在假設的是,如果我告訴你(即一條特定的電子郵件是垃圾郵件),那麼的(是否”buy”出現在訊息中)知識將不會對你對的值(是否”price”出現)的看法有影響。更正式地,這可以寫作。(注意這與是獨立的說法是不同的,獨立將被寫作;相反地,我們只假設在給定時是條件獨立的。)
我們現在有:


第一個等式僅是由常見的概率性質推匯出來的,第二個等式使用了NB假設。我們要指出的是即使樸素貝葉斯假設是非常強的假設,但由此產生的演算法在很多問題上都表現的不錯。
我們的模型由
引數化。像往常一樣,給定一個訓練集,我們可以寫出資料的聯合似然:


關於最大化得到最大似然估計:


在上面的等式中,符號“”意思是“並”。引數有一個非常自然的解釋。比如,正好是單詞出現的垃圾郵件佔垃圾電子郵件()的分數。
擬合好了所有這些引數,為了對一個具有特徵的新樣例做出預測,我們然後僅僅計算
 
然後選擇具有較高後驗概率的類。
最後,我們要注意的是,儘管我們已經形成了主要用於特徵是二值問題的樸素貝葉斯演算法,但推廣至可以取值的情況是簡單的。這裡,我們僅僅把建模成多項式分佈,而不再是伯努利分佈。實際上,即使一些原始的輸入屬性值(比如,房子的居住面積,正如我們之前的例子)是連續的,但是往往可以離散它——就是,把它轉化成一小組的離散值——然後應用樸素貝葉斯。例如,如果我們使用某個特徵來表示居住面積(living area),我們可以離散這些連續值如下:


因此,對於一個居住面積為890平方英尺的房子,我們設定相應的特徵為3。然後我們可以應用樸素貝葉斯演算法。然後用一個多項式分佈給建模,正如之前描述的一樣。當原始的,連續的屬性值用一個多元正態分佈建模不好時,離散那些特徵,然後使用樸素貝葉斯(而不是GDA)往往會得到一個更好的分類器。

2.1  拉普拉斯平滑
樸素貝葉斯演算法,正如我們描述的,對於很多問題都工作得相當地好,但有一個簡單的改變可以使它工作的更好,尤其對於文字分類。讓我們簡單的討論一個使用當前形式演算法的問題,然後談論我們該如何修正這個問題。
考慮垃圾郵件/電子郵件的分類問題,我們假設,在完成了課程CS229且就這個專案做了出色的工作後,你決定大約在2003年6月提交你做的工作到NIPS會議來發表。(NIPS是頂級的機器學習會議之一,而且提交論文的截止時間通常在6月下旬或7月初。) 因為在你的電子郵件中最後討論了那個會議,所以你也開始得到含有單詞“nips”的訊息了。但是這是你的第一篇NIPS論文,直到這一次,你之前沒有見到過任何含有單詞“nips”的電子郵件;特別是“nips”不曾出現在你的垃圾/非垃圾電子郵件訓練集中。假定“nips”是詞典中的第35000個單詞,你的樸素貝葉斯垃圾郵件分類器因此選擇引數的最大似然估計為



也就是說,因為之前在垃圾郵件或非垃圾郵件的訓練例子中都沒有見過“nips”,所以它認為無論在那種郵件中見到這個單詞的概率都是0。因此,當試圖決定一個包含“nips”的資訊是否是垃圾郵件時,它計算類的後驗概率,得到


這是因為每一個項包含一個項被乘進去,因此不知道如何做預測。
更廣泛的說一下這個問題,因為在有限的訓練集中你沒有看到某個事件而估計這個事件的概率為0,從統計上這不是一個好主意。考慮一個從取值的服從多項式分佈的隨機變數的平均數估計問題(這裡不是很懂,我理解的是概率估計問題)。我們可以用來引數化我們的多項式分佈。給定m個獨立的觀測值,最大似然估計由


給定。正如我們之前看到的,如果我們使用這些最大似然估計,然後一些可能結果是0,這是一個問題。為了避免這個,我們可以使用拉普拉斯平滑(Laplace smoothing),它使用


來代替上面的估計。這裡,我們分子加以,分母加k。要指出的是我們仍然有,這是一個令人滿意的特徵,因為是對概率的估計,我們知道相加起來必須為1。並且,對於所有的,這解決了我們概率的估計值為0的問題。在一定(可以說是相當強)的條件下,可以發現,拉普拉斯平滑實際給出了的最佳估計量。
回到我們的樸素貝葉斯分類器,使用拉普拉斯平滑,我們因此得到如下的對引數的估計:





(在實踐中,我們是否對應用拉普拉斯平滑通常是沒有關係的,因為垃圾郵件和非垃圾郵件的每一種,我們通常會有一個合理的部分(即數量),所以將是一個合理的對的估計,而且距離0相當遠。)

想寫一寫機器學習的翻譯來鞏固一下自己的知識,同時給需要的朋友們提供參考,鑑於作者水平有限,翻譯不對或不恰當的地方,歡迎指正和建議。