【机器学习】朴素贝叶斯(Naive Bayes)
在所有的機器學習分類算法中,樸素貝葉斯和其他絕大多數的分類算法都不同。對于大多數的分類算法,比如決策樹,KNN,邏輯回歸,支持向量機等,他們都是判別方法,也就是直接學習出特征輸出Y和特征X之間的關系,要么是決策函數,要么是條件分布。但是樸素貝葉斯卻是生成方法,也就是直接找出特征輸出Y和特征X的聯合分布,然后用得出。
樸素貝葉斯很直觀,計算量也不大,在很多領域有廣泛的應用,這里我們就對樸素貝葉斯算法原理做一個小結。
樸素貝葉斯相關的統計學知識
在了解樸素貝葉斯的算法之前,我們需要對相關必須的統計學知識做一個回顧。
貝葉斯學派很古老,但是從誕生到一百年前一直不是主流。主流是頻率學派。頻率學派的權威皮爾遜和費歇爾都對貝葉斯學派不屑一顧,但是貝葉斯學派硬是憑借在現代特定領域的出色應用表現為自己贏得了半壁江山。
貝葉斯學派的思想可以概括為先驗概率+數據=后驗概率。也就是說我們在實際問題中需要得到的后驗概率,可以通過先驗概率和數據一起綜合得到。數據大家好理解,被頻率學派攻擊的是先驗概率,一般來說先驗概率就是我們對于數據所在領域的歷史經驗,但是這個經驗常常難以量化或者模型化,于是貝葉斯學派大膽的假設先驗分布的模型,比如正態分布,beta分布等。這個假設一般沒有特定的依據,因此一直被頻率學派認為很荒謬。雖然難以從嚴密的數學邏輯里推出貝葉斯學派的邏輯,但是在很多實際應用中,貝葉斯理論很好用,比如垃圾郵件分類,文本分類。
我們先看看條件獨立公式,如果X和Y相互獨立,則有:
我們接著看看條件概率公式:
然后可以得到:
接著看看全概率公式:
其中
從上面的公式很容易得出貝葉斯公式:
樸素貝葉斯的模型
從統計學知識回到我們的數據分析。假如我們的分類模型樣本是:
即我們有m個樣本,每個樣本有n個特征,特征輸出有K個類別,定義為。
從樣本我們可以學習得到樸素貝葉斯的先驗分布,接著學習到條件概率分布,然后我們就可以用貝葉斯公式得到X和Y的聯合分布P(X,Y)了。聯合分布P(X,Y)定義為:
從上面的式子可以看出比較容易通過最大似然法求出,得到的就是類別在訓練集里面出現的頻數。但是很難求出,這是一個超級復雜的有n個維度的條件分布。樸素貝葉斯模型在這里做了一個大膽的假設,即X的n個維度之間相互獨立,這樣就可以得出:
從上式可以看出,這個很難的條件分布大大的簡化了,但是這也可能帶來預測的不準確性。你會說如果我的特征之間非常不獨立怎么辦?如果真是非常不獨立的話,那就盡量不要使用樸素貝葉斯模型了,考慮使用其他的分類方法比較好。但是一般情況下,樣本的特征之間獨立這個條件的確是弱成立的,尤其是數據量非常大的時候。雖然我們犧牲了準確性,但是得到的好處是模型的條件分布的計算大大簡化了,這就是貝葉斯模型的選擇。
最后回到我們要解決的問題,我們的問題是給定測試集的一個新樣本特征,我們如何判斷它屬于哪個類型?
既然是貝葉斯模型,當然是后驗概率最大化來判斷分類了。我們只要計算出所有的K個條件概率,然后找出最大的條件概率對應的類別,這就是樸素貝葉斯的預測了。
樸素貝葉斯的推斷過程
上面我們已經對樸素貝葉斯的模型也預測方法做了一個大概的解釋,這里我們對樸素貝葉斯的推斷過程做一個完整的詮釋過程。
我們預測的類別是使最大化的類別,數學表達式為:
由于對于所有的類別計算時,上式的分母是一樣的,都是,因此,我們的預測公式可以簡化為:
接著我們利用樸素貝葉斯的獨立性假設,就可以得到通常意義上的樸素貝葉斯推斷公式:
樸素貝葉斯的參數估計
在上一節中,我們知道只要求出和,我們通過比較就可以得到樸素貝葉斯的推斷結果。這一節我們就討論怎么通過訓練集計算這兩個概率。
對于,比較簡單,通過極大似然估計我們很容易得到為樣本類別出現的頻率,即樣本類別出現的次數除以樣本總數。
對于,這個取決于我們的先驗條件(訓練數據):
a)?如果我們的是離散的值,那么我們可以假設符合多項式分布,這樣得到是在樣本類別中出現的頻率。即:
其中為樣本類別出現的次數,而為類別為的樣本中,第維特征出現的次數。某些時候,可能某些類別在樣本中沒有出現,這樣可能導致為0,這樣會影響后驗的估計,為了解決這種情況,我們引入了拉普拉斯平滑,即此時有:
其中為一個大于0的常數,常常取為1。為第個特征的取值個數。
b)?如果我們的是非常稀疏的離散值,即各個特征出現概率很低,這時我們可以假設符合伯努利分布,即特征出現記為1,不出現記為0。即只要出現即可,我們不關注的次數。這樣得到是在樣本類別中,出現的頻率。此時有:
其中,取值為0和1。
c)?如果我們我們的是連續值,我們通常取的先驗概率為正態分布,即在樣本類別中,的值符合正態分布。這樣的概率分布是:
其中和是正態分布的期望和方差,可以通過極大似然估計求得。為在樣本類別中,所有的平均值。為在樣本類別中,所有的方差。對于一個連續的樣本值,帶入正態分布的公式,就可以求出概率分布了。
樸素貝葉斯算法過程
我們假設訓練集為m個樣本n個維度,如下:
共有K個特征輸出類別,分別為,每個特征輸出類別的樣本個數為,在第k個類別中,如果是離散特征,則特征各個類別取值為。其中?取值為,為特征不同的取值數。
輸出為實例的分類。
算法流程如下:
1) 如果沒有Y的先驗概率,則計算Y的K個先驗概率:,否則為輸入的先驗概率。
2) 分別計算第k個類別的第j維特征的第l個取值條件概率:
a) 如果是離散值:
可以取值為1,或者其他大于0的數字。
b) 如果是稀疏二項離散值:
此時?只有兩種取值。
c) 如果是連續值不需要計算各個?的取值概率,直接求正態分布的參數:
? ? ? ? ? ? ? ? ? ? ?需要求出和。?為在樣本類別中,所有的平均值。為在樣本類別中,所有的方差。
3)對于實例,分別計算:
4)確定實例的分類
從上面的計算可以看出,沒有復雜的求導和矩陣運算,因此效率很高。
?
關于樸素貝葉斯還有一些注意點,移步貝葉斯整理有詳解。
參考文章
樸素貝葉斯算法原理小結
總結
以上是生活随笔為你收集整理的【机器学习】朴素贝叶斯(Naive Bayes)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】贝叶斯整理
- 下一篇: 【机器学习】LR的分布式(并行化)实现