1. 程式人生 > >樸素貝葉斯分類演算法的R語言實現

樸素貝葉斯分類演算法的R語言實現

貝葉斯分類常用來預測隸屬關係,計算一個給定元組屬於某一類的概率

首先我們來看下貝葉斯基本公式:


P(B|A)的意思是在A事件的情況下,發生B事件的概率,可以理解為概率論中的條件概率,而貝葉斯公式的巨大作用就是對因果關係進行了交換,通過上面的公式就可以計算P(A|B)的概率,只要通過上述的轉換。

樸素貝葉斯分類的正式定義如下:

      1、設為一個待分類項,而每個a為x的一個特徵屬性。(在我們的例子中x={"rain","hot","high","strong"}裡面的4個因子為他的特徵向量)

      2、有類別集合。(我們的類別中playtennis的分類yes, no,C={yes, no})

      3、計算。(計算的任務就是計算在X事件的條件下,yes和no事件的發生概率,P(Yes|X), P(No|X))

      4、如果,則。(計算出上面的結果值,擁有最大概率的值的yi就是他的分類,這個很好理解,在X條件下,那個分類型別概率高就屬於哪個分類,在這裡比的就是P(Yes|X), P(No|X))

      關鍵就是如何計算第3步中的各個條件概率。我們可以這麼做:

      1. 找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集

      2. 統計得到在各類別下各個特徵屬性的條件概率估計。即


      3. 樸素貝葉斯假定各個特徵屬性是條件獨立的,因此又稱為簡單貝葉斯,則我們有如下推導:

      4. P(x)對於所有分類都是常數,因此可以省去,我們於是有以下結論:

      

     大體演算法就是這樣,但還沒有結束,還有以下深入研究的兩點內容:

     1. 計算時,若aj為連續屬性,那我們需要多做點工作,可以假設aj服從期望為u,標準差為r的高斯分佈;根據高斯分佈的特性,我們有

      

     2. 在訓練資料中有時會出現為零的情況,為了避免此零值使得為零,可以採用拉普拉斯校準法,其實很簡單,即每個組對增加一個相對足夠小的校準數,在我們的實現中採用的是0.01乘以訓練陣列的長度

    Github程式碼:https://github.com/bigdata-william/R_Algorithm/blob/master/native_bayes.R

    參考文件:http://blog.csdn.net/androidlushangderen/article/details/42680161 

                           《資料探勘概念與技術第三版》