樸素貝葉斯分類演算法的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
《資料探勘概念與技術第三版》