一步步教你輕鬆學樸素貝葉斯模型演算法理論篇1
導讀:樸素貝葉斯模型是機器學習常用的模型演算法之一,其在文字分類方面簡單易行,且取得不錯的分類效果。所以很受歡迎,對於樸素貝葉斯的學習,本文首先介紹理論知識即樸素貝葉斯相關概念和公式推導,為了加深理解,採用一個維基百科上面性別分類例子進行形式化描述。然後通過程式設計實現樸素貝葉斯分類演算法,並在遮蔽社群言論、垃圾郵件、個人廣告中獲取區域傾向等幾個方面進行應用,包括建立資料集、資料預處理、詞集模型和詞袋模型、樸素貝葉斯模型訓練和優化等。然後結合復旦大學新聞語料進行樸素貝葉斯的應用。最後,大家熟悉其原理和實現之後,採用機器學習sklearn包進行實現和優化。由於篇幅較長,採用理論理解、案例實現、sklearn優化三個部分進行學習。(本文原創,轉載必須註明出處:
理論 | 樸素貝葉斯模型演算法研究與例項分析)
目錄
樸素貝葉斯理論
樸素貝葉斯概述
樸素貝葉斯是一種構建分類器的簡單方法。該分類器模型會給問題例項分配用特徵值表示的類標籤,類標籤取自有限集合。所有樸素貝葉斯分類器都假定樣本每個特徵與其他特徵都不相關。
特徵獨立理解的例子:如果一種水果其具有紅,圓,直徑大概3英寸等特徵,該水果可以被判定為是蘋果。儘管這些特徵相互依賴或者有些特徵由其他特徵決定,然而樸素貝葉斯分類器認為這些屬性在判定該水果是否為蘋果的概率分佈上獨立的。
儘管是帶著這些樸素思想和過於簡單化的假設,但樸素貝葉斯分類器在很多複雜的現實情形中仍能夠獲取相當好的效果。樸素貝葉斯分類器的一個優勢在於只需要根據少量的訓練資料估計出必要的引數(變數的均值和方差)。
樸素貝葉斯模型
樸素貝葉斯方法是基於貝葉斯定理的一組有監督學習演算法,即“簡單”地假設每對特徵之間相互獨立。 給定一個類別和一個從到 的相關的特徵向量,貝葉斯定理闡述了以下關係:
使用簡單(naive)的假設-每對特徵之間都相互獨立:
對於所有的 math: i ,這個關係式可以簡化為
我們可以使用最大後驗概率(Maximum A Posteriori, MAP) 來估計 和 ; 前者是訓練集中類別 y 的相對頻率。各種各樣的的樸素貝葉斯分類器的差異大部分來自於處理 分佈時的所做的假設不同。儘管其假設過於簡單,在很多實際情況下,樸素貝葉斯工作得很好,特別是文件分類和垃圾郵件過濾。相比於其他更復雜的方法,樸素貝葉斯學習器和分類器非常快。
樸素貝葉斯演算法思想
假設有一個數據集,它由兩類資料組成,資料分佈如下圖所示:
我們現在用 表示資料點 (x,y) 屬於類別 1(圖中用圓點表示的類別)的概率,用 表示資料點 (x,y) 屬於類別 2(圖中三角形表示的類別)的概率,那麼對於一個新資料點 (x,y),可以用下面的規則來判斷它的類別:
也就是說,我們會選擇高概率對應的類別。這就是貝葉斯決策理論的核心思想,即選擇具有最高概率的決策。
樸素貝葉斯工作原理
提取所有文件中的詞條並進行去重
獲取文件的所有類別
計算每個類別中的文件數目
對每篇訓練文件:
對每個類別:
如果詞條出現在文件中-->增加該詞條的計數值(for迴圈或者矩陣相加)
增加所有詞條的計數值(此類別下詞條總數)
對每個類別:
對每個詞條:
將該詞條的數目除以總詞條數目得到的條件概率(P(詞條|類別))
返回該文件屬於每個類別的條件概率(P(類別|文件的所有詞條))
樸素貝葉斯演算法流程
收集資料: 可以使用任何方法。
準備資料: 需要數值型或者布林型資料。
分析資料: 有大量特徵時,繪製特徵作用不大,此時使用直方圖效果更好。
訓練演算法: 計算不同的獨立特徵的條件概率。
測試演算法: 計算錯誤率。
使用演算法: 一個常見的樸素貝葉斯應用是文件分類。可以在任意的分類場景中使用樸素貝葉斯分類器,不一定非要是文字。
樸素貝葉斯優缺點
優點: 在資料較少的情況下仍然有效,可以處理多類別問題。
缺點: 對於輸入資料的準備方式較為敏感。
適用資料型別: 標稱型資料。
案例描述:形式化理解樸素貝葉斯性別分類
問題描述
通過一些測量的特徵,包括身高、體重、腳的尺寸,判定一個人是男性還是女性。
訓練資料
性別 | 身高(英尺) | 體重(磅) | 腳的尺寸(英寸) |
---|---|---|---|
男 | 6 | 180 | 12 |
男 | 5.92 | 190 | 11 |
男 | 5.58 | 170 | 12 |
男 | 5.92 | 165 | 10 |
女 | 5 | 100 | 6 |
女 | 5.5 | 150 | 8 |
女 | 5.42 | 130 | 7 |
女 | 5.75 | 150 | 9 |
假設訓練集樣本的特徵滿足高斯分佈,得到下表:
性別 | 均值(身高) | 方差(身高) | 均值(體重) | 方差(體重) | 均值(腳的尺寸) | 方差(腳的尺寸) |
---|---|---|---|---|---|---|
男性 | 5.855 | 3.5033e-02 | 176.25 | 1.2292e+02 | 11.25 | 9.1667e-01 |
女性 | 5.4175 | 9.7225e-02 | 132.5 | 5.5833e+02 | 7.5 | 1.6667e+00 |
我們認為兩種類別是等概率的,也就是P(male)= P(female) = 0.5。在沒有做辨識的情況下就做這樣的假設並不是一個好的點子。但我們通過資料集中兩類樣本出現的頻率來確定P(C),我們得到的結果也是一樣的。
測試資料
以下給出一個待分類是男性還是女性的樣本。
性別 | 身高(英尺) | 體重(磅) | 腳的尺寸(英尺) |
---|---|---|---|
sample | 6 | 130 | 8 |
我們希望得到的是男性還是女性哪類的後驗概率大。男性的後驗概率通過下面式子來求取
女性的後驗概率通過下面式子來求取
證據因子(通常是常數)用來對各類的後驗概率之和進行歸一化.
證據因子是一個常數(在正態分佈中通常是正數),所以可以忽略。接下來我們來判定這樣樣本的性別。
其中 是訓練集樣本的正態分佈引數. 注意,這裡的值大於1也是允許的 – 這裡是概率密度而不是概率,因為身高是一個連續的變數.
集樣本的正態分佈引數. 注意,這裡的值大於1也是允許的 – 這裡是概率密度而不是概率,因為身高是一個連續的變數.
模型預測結果
由於女性後驗概率的分子比較大,所以我們預計這個樣本是女性。
參考文獻
完整程式碼下載
原始碼請進【機器學習和自然語言QQ群:436303759】檔案下載: