數(shù)據(jù)挖掘領(lǐng)域十大經(jīng)典算法之—樸素貝葉斯算法(附代碼)
簡介
NaïveBayes算法,又叫樸素貝葉斯算法,樸素:特征條件獨立;貝葉斯:基于貝葉斯定理。屬于監(jiān)督學(xué)習(xí)的生成模型,實現(xiàn)簡單,沒有迭代,并有堅實的數(shù)學(xué)理論(即貝葉斯定理)作為支撐。在大量樣本下會有較好的表現(xiàn),不適用于輸入向量的特征條件有關(guān)聯(lián)的場景。
基本思想
(1)病人分類的例子
某個醫(yī)院早上收了六個門診病人,如下表:

現(xiàn)在又來了第七個病人,是一個打噴嚏的建筑工人。請問他患上感冒的概率有多大?
根據(jù)貝葉斯定理:

因此,這個打噴嚏的建筑工人,有66%的概率是得了感冒。同理,可以計算這個病人患上過敏或腦震蕩的概率。比較這幾個概率,就可以知道他最可能得什么病。
這就是貝葉斯分類器的基本方法:在統(tǒng)計資料的基礎(chǔ)上,依據(jù)某些特征,計算各個類別的概率,從而實現(xiàn)分類。
(2)樸素貝葉斯分類器的公式
假設(shè)某個體有n項特征(Feature),分別為F1、F2、…、Fn?,F(xiàn)有m個類別(Category),分別為C1、C2、…、Cm。貝葉斯分類器就是計算出概率***的那個分類,也就是求下面這個算式的***值:

由于 P(F1F2…Fn) 對于所有的類別都是相同的,可以省略,問題就變成了求

的***值。
樸素貝葉斯分類器則是更進一步,假設(shè)所有特征都彼此獨立,因此

上式等號右邊的每一項,都可以從統(tǒng)計資料中得到,由此就可以計算出每個類別對應(yīng)的概率,從而找出***概率的那個類。
雖然”所有特征彼此獨立”這個假設(shè),在現(xiàn)實中不太可能成立,但是它可以大大簡化計算,而且有研究表明對分類結(jié)果的準(zhǔn)確性影響不大。
(3)拉普拉斯平滑(Laplace smoothing)
也就是參數(shù)為1時的貝葉斯估計,當(dāng)某個分量在總樣本某個分類中(觀察樣本庫/訓(xùn)練集)從沒出現(xiàn)過,會導(dǎo)致整個實例的計算結(jié)果為0。為了解決這個問題,使用拉普拉斯平滑/加1平滑進行處理。
它的思想非常簡單,就是對先驗概率的分子(劃分的計數(shù))加1,分母加上類別數(shù);對條件概率分子加1,分母加上對應(yīng)特征的可能取值數(shù)量。這樣在解決零概率問題的同時,也保證了概率和依然為1。
eg:假設(shè)在文本分類中,有3個類,C1、C2、C3,在指定的訓(xùn)練樣本中,某個詞語F1,在各個類中觀測計數(shù)分別為=0,990,10,即概率為P(F1/C1)=0,P(F1/C2)=0.99,P(F1/C3)=0.01,對這三個量使用拉普拉斯平滑的計算方法如下:
- 1/1003 = 0.001,991/1003=0.988,11/1003=0.011
實際應(yīng)用場景
- 文本分類
- 垃圾郵件過濾
- 病人分類
- 拼寫檢查
樸素貝葉斯模型
樸素貝葉斯常用的三個模型有:
- 高斯模型:處理特征是連續(xù)型變量的情況
- 多項式模型:最常見,要求特征是離散數(shù)據(jù)
- 伯努利模型:要求特征是離散的,且為布爾類型,即true和false,或者1和0
代碼實現(xiàn)
基于多項式模型的樸素貝葉斯算法(在github獲取)

測試數(shù)據(jù)集為MNIST數(shù)據(jù)集,獲取地址train.csv
運行結(jié)果
