3--朴素貝葉斯
原理
朴素貝葉斯本質上就是通過貝葉斯公式來對得到類別概率,但區別於通常的貝葉斯公式,朴素貝葉斯有一個默認條件,就是特征之間條件獨立。
條件概率公式:
貝葉斯公式可以寫成:
如果A和B相對於C是條件獨立的,那么滿足\(P(A|C) = P(A|B,C)\)。 如果樣本的兩個特征\(x_1\)\(x_2\)相對於y條件獨立,那么可以得到\(p(x_1,x_2|y) = p(x_1|y)p(x_2|y)\)。
通過條件獨立公式,上述貝葉斯公式中,\(p(x|y_i)\)的計算則可以簡化成如下公式:
實現細節
對於離散類型數據, \(p(x_i|y)\)可以通過計算特征的數量得到概率。
唯一需要注意的就是拉普拉斯修正(Laplacian Correction),如果莫一個新的特征x從來沒有出現過,那么分母就有可能為0,為了避免這種情況,可以做如下操作:
而對於連續型數據,計算方法則不太相同,高斯貝葉斯認為數據服從高斯分布,所以默認為某一列特征服從高斯分布,然后通過高斯概率密度函數,就可以得到相應的概率。
假設某一列特征服從整體分布
其中\(\mu\)和\(\sigma\)為y類樣本在樣本x第i個屬性的均值和方差,那么其計算方法如下:
首先計算出標簽y在特征\(x_i\)上的均值和方差,然后就可以得到其概率的計算公式了:
當具體計算的時候,可以直接對區間進行積分,然后進行化簡,可以得到最終的概率值:
\(P(x_i<x<x_i+\epsilon) = \int_{x_i}^{x_i+\epsilon}f(x)dx \approx f(x_i)*\epsilon\)
這里就是使用高斯概率密度函數對概率進行估計的朴素貝葉斯計算方法,對於sklearn中的GaussionNB函數。
sklearn中的朴素貝葉斯方法
sklearn中的朴素貝葉斯有幾種方法:
類 | 描述 |
---|---|
naive_bayes.BernoullNB | 伯努利分布下的朴素貝葉斯 |
naive_bayes.GaussianNB | 高斯分布下的朴素貝葉斯 |
naive_bayes.MultinomialNB | 多項式分布下的朴素貝葉斯 |
naive_bayes.ComplementNB | 補集朴素貝葉斯 |
linear_model.BayesianRidge | 貝葉斯嶺回歸,在參數估計過程中使用貝葉斯回歸技術來包括正則化參數 |
sklearn中的朴素貝葉斯算法,就如上述所提到的,對於連續型變量,可以使用高斯正太分布進行概率估計(這里對應高斯朴素貝葉斯),當然可以使用其他不同的分布進行概率估計,比如使用伯努利分布估計的話,則對應下表中的伯努利朴素貝葉斯算法。也就是說,其差別主要在於使用不同的方法來估計概率。
使用示例:
from sklearn import naive_bayes as nb
from sklearn.preprocessing import LabelEncoder
#由於sklearn中的朴素貝葉斯默認不支持字符串形式的特征,需要將字符串編碼成數字特征,
所以這里可以使用LabelEncoder,例如下面所示,會自動將字符串從0到N進行編碼
X[:,1] = LabelEncoder().fit_transform(X[:,1]))
使用朴素貝葉斯:
model = nb.GaussianNB()
model.fit(X,y)