作者:韓信子@ShowMeAI
教程地址:https://www.showmeai.tech/tutorials/34
本文地址:https://www.showmeai.tech/article-detail/189
聲明:版權所有,轉載請聯系平台與作者並注明出處
引言
在眾多機器學習分類算法中,本篇我們提到的朴素貝葉斯模型,和其他絕大多數分類算法都不同,也是很重要的模型之一。
在機器學習中如KNN、邏輯回歸、決策樹等模型都是判別方法,也就是直接學習出特征輸出\(Y\)和特征\(X\)之間的關系(決策函數\(Y= f(X)\)或者條件分布\(P(Y|X)\))。但朴素貝葉斯是生成方法,它直接找出特征輸出\(Y\)和特征\(X\)的聯合分布\(P(X,Y)\),進而通過\(P(Y \mid X)= \frac{P(X,Y)}{P(X)}\)計算得出結果判定。
朴素貝葉斯是一個非常直觀的模型,在很多領域有廣泛的應用,比如早期的文本分類,很多時候會用它作為baseline模型,本篇內容我們對朴素貝葉斯算法原理做展開介紹。
1.朴素貝葉斯算法核心思想
貝葉斯分類是一類分類算法的總稱,這類算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。而朴素貝葉斯(Naive Bayes)分類是貝葉斯分類中最簡單,也是常見的一種分類方法。
朴素貝葉斯算法的核心思想是通過考慮特征概率來預測分類,即對於給出的待分類樣本,求解在此樣本出現的條件下各個類別出現的概率,哪個最大,就認為此待分類樣本屬於哪個類別。
舉個例子:眼前有100個西瓜,好瓜和壞瓜個數差不多,現在要用這些西瓜來訓練一個「壞瓜識別器」,我們要怎么辦呢?
一般挑西瓜時通常要「敲一敲」,聽聽聲音,是清脆聲、濁響聲、還是沉悶聲。所以,我們先簡單點考慮這個問題,只用敲擊的聲音來辨別西瓜的好壞。根據經驗,敲擊聲「清脆」說明西瓜還不夠熟,敲擊聲「沉悶」說明西瓜成熟度好,更甜更好吃。
所以,壞西瓜的敲擊聲是「清脆」的概率更大,好西瓜的敲擊聲是「沉悶」的概率更大。當然這並不絕對——我們千挑萬選地「沉悶」瓜也可能並沒熟,這就是噪聲了。當然,在實際生活中,除了敲擊聲,我們還有其他可能特征來幫助判斷,例如色澤、跟蒂、品類等。
朴素貝葉斯把類似「敲擊聲」這樣的特征概率化,構成一個「西瓜的品質向量」以及對應的「好瓜/壞瓜標簽」,訓練出一個標准的「基於統計概率的好壞瓜模型」,這些模型都是各個特征概率構成的。
這樣,在面對未知品質的西瓜時,我們迅速獲取了特征,分別輸入「好瓜模型」和「壞瓜模型」,得到兩個概率值。如果「壞瓜模型」輸出的概率值大一些,那這個瓜很有可能就是個壞瓜。
2.貝葉斯公式與條件獨立假設
貝葉斯定理中很重要的概念是先驗概率、后驗概率和條件概率。(關於這部分依賴的數學知識,大家可以查看ShowMeAI的文章 圖解AI數學基礎 | 概率與統計,也可以下載我們的速查手冊 AI知識技能速查 | 數學基礎-概率統計知識)
1)先驗概率與后驗概率
先驗概率:事件發生前的預判概率。可以是基於歷史數據的統計,可以由背景常識得出,也可以是人的主觀觀點給出。一般都是單獨事件概率。
舉個例子:如果我們對西瓜的色澤、根蒂和紋理等特征一無所知,按照常理來說,西瓜是好瓜的概率是60%。那么這個概率P(好瓜)就被稱為先驗概率。
后驗概率:事件發生后求的反向條件概率。或者說,基於先驗概率求得的反向條件概率。概率形式與條件概率相同。
舉個例子:假如我們了解到判斷西瓜是否好瓜的一個指標是紋理。一般來說,紋理清晰的西瓜是好瓜的概率大一些,大概是75%。如果把紋理清晰當作一種結果,然后去推測好瓜的概率,那么這個概率P(好瓜|紋理清晰)就被稱為后驗概率。
條件概率:一個事件發生后另一個事件發生的概率。一般的形式為\(P(B|A)\)表示\(A\)發生的條件下\(B\)發生的概率。
2)貝葉斯公式
簡單來說,貝葉斯定理(Bayes Theorem,也稱貝葉斯公式)是基於假設的先驗概率、給定假設下觀察到不同數據的概率,提供了一種計算后驗概率的方法。在人工智能領域,有一些概率型模型會依托於貝葉斯定理,比如我們今天的主角「朴素貝葉斯模型」。
-
\(P(A)\)是先驗概率,一般都是人主觀給出的。貝葉斯中的先驗概率一般特指它。
-
\(P(B)\)是先驗概率,在貝葉斯的很多應用中不重要(因為只要最大后驗不求絕對值),需要時往往用全概率公式計算得到。
-
\(P(B \mid A)\)是條件概率,又叫似然概率,一般是通過歷史數據統計得到。
-
\(P(A \mid B)\)是后驗概率,一般是我們求解的目標。
3)條件獨立假設與朴素貝葉斯
基於貝葉斯定理的貝葉斯模型是一類簡單常用的分類算法。在「假設待分類項的各個屬性相互獨立」的情況下,構造出來的分類算法就稱為朴素的,即朴素貝葉斯算法。
所謂「朴素」,是假定所有輸入事件之間是相互獨立。進行這個假設是因為獨立事件間的概率計算更簡單。
朴素貝葉斯模型的基本思想是:對於給定的待分類項 \(X \left\{ a_1,a_2,a_3,⋯,a_n \right\}\),求解在此項出現的條件下各個類別\(y_i\)出現的概率,哪個\(P(y_i |X)\)最大,就把此待分類項歸屬於哪個類別。
朴素貝葉斯算法的定義為:設 \(X \left\{ a_1,a_2,a_3,⋯,a_n \right\}\)為一個待分類項,每個\(a_{i}\)為x的一個特征屬性,且特征屬性之間相互獨立。設\(C \left\{ y_1,y_2,y_3,⋯,y_n\right\}\)為一個類別集合,計算\(P\left(y_{1} \mid X\right), P\left(y_{2} \mid X\right), P\left(y_{3} \mid X\right), \ldots, P\left(y_{n} \mid X\right)\)。
則\(X \in y_{k}\)
要求出第四項中的后驗概率\(P\left(y_{k} \mid X\right)\),就需要分別求出在第三項中的各個條件概率,其步驟是:
-
找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集
-
統計得到在各類別下各個特征屬性的條件概率估計。即
- \(P\left(a_{1} \mid y_{1}\right), P\left(a_{2} \mid y_{1}\right), \cdots, P\left(a_{n} \mid y_{1}\right)\)
- \(P\left(a_{1} \mid y_{2}\right), P\left(a_{2} \mid y_{2}\right), \cdots, P\left(a_{n} \mid y_{2}\right)\)
- ···
- \(P\left(a_{1} \mid y_{n}\right), P\left(a_{2} \mid y_{n}\right), \cdots, P\left(a_{n} \mid y_{n}\right)\)
在朴素貝葉斯算法中,待分類項的每個特征屬性都是條件獨立的,由貝葉斯公式
因為分母相當於在數據庫中\(X\)存在的概率,所以對於任何一個待分類項來說\(P\left(X \right)\)都是常數固定的。再求后驗概率\(P\left(y_{i} \mid X\right)\)的時候只用考慮分子即可。
因為各特征值是獨立的所以有:
可以推出:
對於\(P\left(y_{i}\right)\)是指在訓練樣本中\(y_{i}\)出現的概率,可以近似的求解為:
對於先驗概率\(P\left ( a_{j} \mid y_{i} \right )\),是指在類別\(y_{i}\)中,特征元素\(a_{j}\)出現的概率,可以求解為:
總結一下,朴素貝葉斯模型的分類過程如下流程圖所示:
3.伯努利與多項式朴素貝葉斯
1)多項式vs伯努利朴素貝葉斯
大家在一些資料中,會看到「多項式朴素貝葉斯」和「伯努利朴素貝葉斯」這樣的細分名稱,我們在這里基於文本分類來給大家解釋一下:
在文本分類的場景下使用朴素貝葉斯,那對應的特征\(a_j\)就是單詞,對應的類別標簽就是\(y\),這里有一個問題:每個單詞會出現很多次,我們對於頻次有哪些處理方法呢?
-
如果直接以單詞的頻次參與統計計算,那就是多項式朴素貝葉斯的形態。
-
如果以是否出現(0和1)參與統計計算,就是伯努利朴素貝葉斯的形態。
(1)多項式朴素貝葉斯
以文本分類為例,多項式模型如下。在多項式模型中,設某文檔\(d=\left(t_{1}, t_{2}, \ldots, t_{k}\right)\),\(t_{k}\)是該文檔中出現過的單詞,允許重復,則:
先驗概率
類條件概率
-
\(V\)是訓練樣本的單詞表(即抽取單詞,單詞出現多次,只算一個),\(\left | V \right |\)則表示訓練樣本包含多少種單詞。
-
\(P\left ( t_{k} \mid c \right )\)可以看作是單詞\(t_{k}\)在證明\(d\)屬於類\(c\)上提供了多大的證據,而\(P \left ( c \right )\)則可以認為是類別\(c\)在整體上占多大比例(有多大可能性)。
(2)伯努利朴素貝葉斯
對應的,在伯努利朴素貝葉斯里,我們假設各個特征在各個類別下是服從n重伯努利分布(二項分布)的,因為伯努利試驗僅有兩個結果,因此,算法會首先對特征值進行二值化處理(假設二值化的結果為1與0)。
對應的\(P \left ( c \right )\)和\(P\left ( t_{k} \mid c \right )\)計算方式如下(注意到分子分母的變化):
2)朴素貝葉斯與連續值特征
我們發現在之前的概率統計方式,都是基於離散值的。如果遇到連續型變量特征,怎么辦呢?
以人的身高,物體的長度為例。一種處理方式是:把它轉換成離散型的值。比如:
- 如果身高在160cm以下,特征值為1;
- 在160cm和170cm之間,特征值為2;
- 在170cm之上,特征值為3。
當然有不同的轉換方法,比如還可以:
- 將身高轉換為3個特征,分別是f1、f2、f3;
- 如果身高是160cm以下,這三個特征的值分別是1、0、0;
- 若身高在170cm之上,這三個特征的值分別是0、0、1。
但是,以上的划分方式,都比較粗糙,划分的規則也是人為擬定的,且在同一區間內的樣本(比如第1套變換規則下,身高150和155)難以區分,我們有高斯朴素貝葉斯模型可以解決這個問題。
如果特征\(x_{i}\)是連續變量,如何去估計似然度\(P\left ( x_{i}\mid y_{k} \right )\)呢?高斯模型是這樣做的:我們假設在\(y_{i}\)的條件下,\(x\)服從高斯分布(正態分布)。根據正態分布的概率密度函數即可計算出\(P\left ( x \mid y_{i} \right )\),公式如下:
回到上述例子,如果身高是我們判定人性別(男/女)的特征之一,我們可以假設男性和女性的身高服從正態分布,通過樣本計算出身高均值和方差,對應上圖中公式就得到正態分布的密度函數。有了密度函數,遇到新的身高值就可以直接代入,算出密度函數的值。
4.平滑處理
1)為什么需要平滑處理
使用朴素貝葉斯,有時候會面臨零概率問題。零概率問題,指的是在計算實例的概率時,如果某個量\(x\),在觀察樣本庫(訓練集)中沒有出現過,會導致整個實例的概率結果是0。
在文本分類的問題中,當「一個詞語沒有在訓練樣本中出現」時,這個詞基於公式統計計算得到的條件概率為0,使用連乘計算文本出現概率時也為0。這是不合理的,不能因為一個事件沒有觀察到就武斷的認為該事件的概率是0。
2)拉普拉斯平滑及依據
為了解決零概率的問題,法國數學家拉普拉斯最早提出用加1的方法估計沒有出現過的現象的概率,所以加法平滑也叫做拉普拉斯平滑。
假定訓練樣本很大時,每個分量x的計數加1造成的估計概率變化可以忽略不計,但可以方便有效的避免零概率問題。
對應到文本分類的場景中,如果使用多項式朴素貝葉斯,假定特征\(x_{i}\)表示某個詞在樣本中出現的次數(當然用TF-IDF表示也可以)。拉普拉斯平滑處理后的條件概率計算公式為:
-
\(N_{yi}\)表示類\(y\)的所有樣本中特征\(x_{i}\)的特征值之和。
-
\(N_{y}\)表示類\(y\)的所有樣本中全部特征的特征值之和。
-
\(\alpha\)表示平滑值(\(\alpha \in \left [ 0, 1 \right ]\),主要為了防止訓練樣本中某個特征沒出現而導致\(N_{yi} =0\),從而導致條件概率\(P\left(x_{i} \mid y\right) = 0\)的情況,如果不加入平滑值,則計算聯合概率時由於某一項為0導致后驗概率為0的異常情況出現。
-
\(n\)表示特征總數。
更多監督學習的算法模型總結可以查看ShowMeAI的文章 AI知識技能速查 | 機器學習-監督學習。
機器學習【算法】系列教程
- 圖解機器學習 | 機器學習基礎知識
- 圖解機器學習 | 模型評估方法與准則
- 圖解機器學習 | KNN算法及其應用
- 圖解機器學習 | 邏輯回歸算法詳解
- 圖解機器學習 | 朴素貝葉斯算法詳解
- 圖解機器學習 | 決策樹模型詳解
- 圖解機器學習 | 隨機森林分類模型詳解
- 圖解機器學習 | 回歸樹模型詳解
- 圖解機器學習 | GBDT模型詳解
- 圖解機器學習 | XGBoost模型最全解析
- 圖解機器學習 | LightGBM模型詳解
- 圖解機器學習 | 支持向量機模型詳解
- 圖解機器學習 | 聚類算法詳解
- 圖解機器學習 | PCA降維算法詳解
機器學習【實戰】系列教程
- 機器學習實戰 | Python機器學習算法應用實踐
- 機器學習實戰 | SKLearn入門與簡單應用案例
- 機器學習實戰 | SKLearn最全應用指南
- 機器學習實戰 | XGBoost建模應用詳解
- 機器學習實戰 | LightGBM建模應用詳解
- 機器學習實戰 | Python機器學習綜合項目-電商銷量預估
- 機器學習實戰 | Python機器學習綜合項目-電商銷量預估<進階方案>
- 機器學習實戰 | 機器學習特征工程最全解讀
- 機器學習實戰 | 自動化特征工程工具Featuretools應用
- 機器學習實戰 | AutoML自動化機器學習建模
ShowMeAI系列教程推薦
- 大廠技術實現方案系列
- 圖解Python編程:從入門到精通系列教程
- 圖解數據分析:從入門到精通系列教程
- 圖解AI數學基礎:從入門到精通系列教程
- 圖解大數據技術:從入門到精通系列教程
- 圖解機器學習算法:從入門到精通系列教程
- 機器學習實戰:手把手教你玩轉機器學習系列
- 深度學習教程:吳恩達專項課程 · 全套筆記解讀
- 自然語言處理教程:斯坦福CS224n課程 · 課程帶學與全套筆記解讀
- 深度學習與計算機視覺教程:斯坦福CS231n · 全套筆記解讀