在所有的機(jī)器學(xué)習(xí)分類算法中卦绣,樸素貝葉斯和其他絕大多數(shù)的分類算法都不同。對(duì)于大多數(shù)的分類算法飞蚓,比如決策樹,KNN,邏輯回歸滤港,支持向量機(jī)等,他們都是判別方法玷坠,也就是直接學(xué)習(xí)出特征輸出Y和特征X之間的關(guān)系蜗搔,要么是決策函數(shù)$Y=f(X)$,要么是條件分布$P(Y|X)$劲藐。但是樸素貝葉斯卻是生成方法八堡,也就是直接找出特征輸出Y和特征X的聯(lián)合分布$P(X,Y)$,然后用$P(Y|X) = P(X,Y)/P(X)$得出。
樸素貝葉斯很直觀聘芜,計(jì)算量也不大兄渺,在很多領(lǐng)域有廣泛的應(yīng)用,這里我們就對(duì)樸素貝葉斯算法原理做一個(gè)小結(jié)汰现。
1. 樸素貝葉斯相關(guān)的統(tǒng)計(jì)學(xué)知識(shí)
在了解樸素貝葉斯的算法之前挂谍,我們需要對(duì)相關(guān)必須的統(tǒng)計(jì)學(xué)知識(shí)做一個(gè)回顧叔壤。
貝葉斯學(xué)派很古老,但是從誕生到一百年前一直不是主流口叙。主流是頻率學(xué)派炼绘。頻率學(xué)派的權(quán)威皮爾遜和費(fèi)歇爾都對(duì)貝葉斯學(xué)派不屑一顧,但是貝葉斯學(xué)派硬是憑借在現(xiàn)代特定領(lǐng)域的出色應(yīng)用表現(xiàn)為自己贏得了半壁江山妄田。
貝葉斯學(xué)派的思想可以概括為先驗(yàn)概率+數(shù)據(jù)=后驗(yàn)概率俺亮。也就是說我們?cè)趯?shí)際問題中需要得到的后驗(yàn)概率,可以通過先驗(yàn)概率和數(shù)據(jù)一起綜合得到疟呐。數(shù)據(jù)大家好理解脚曾,被頻率學(xué)派攻擊的是先驗(yàn)概率,一般來說先驗(yàn)概率就是我們對(duì)于數(shù)據(jù)所在領(lǐng)域的歷史經(jīng)驗(yàn)启具,但是這個(gè)經(jīng)驗(yàn)常常難以量化或者模型化本讥,于是貝葉斯學(xué)派大膽的假設(shè)先驗(yàn)分布的模型,比如正態(tài)分布鲁冯,beta分布等拷沸。這個(gè)假設(shè)一般沒有特定的依據(jù),因此一直被頻率學(xué)派認(rèn)為很荒謬晓褪。雖然難以從嚴(yán)密的數(shù)學(xué)邏輯里推出貝葉斯學(xué)派的邏輯堵漱,但是在很多實(shí)際應(yīng)用中,貝葉斯理論很好用涣仿,比如垃圾郵件分類勤庐,文本分類。
我們先看看條件獨(dú)立公式好港,如果X和Y相互獨(dú)立愉镰,則有:
$$P(X,Y) =P(X)P(Y)$$
我們接著看看條件概率公式:
$$P(Y|X) = P(X,Y)/P(X)$$
$$P(X|Y) = P(X,Y)/P(Y)$$
或者說:
$$ P(Y|X) = P(X|Y)P(Y)/P(X)$$
接著看看全概率公式
$$P(X) = \sum\limits_{k}P(X|Y =Y_k)P(Y_k) 其中\(zhòng)sum\limits_{k}P(Y_k)=1$$
從上面的公式很容易得出貝葉斯公式:
$$P(Y_k|X) = \frac{P(X|Y_k)P(Y_k)}{\sum\limits_{k}P(X|Y =Y_k)P(Y_k)}$$
2. 樸素貝葉斯的模型
從統(tǒng)計(jì)學(xué)知識(shí)回到我們的數(shù)據(jù)分析。假如我們的分類模型樣本是:$$(x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)}, y_1), (x_1^{(2)}, x_2^{(2)}, ...x_n^{(2)},y_2), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_n)$$
即我們有m個(gè)樣本钧汹,每個(gè)樣本有n個(gè)特征丈探,特征輸出有K個(gè)類別,定義為${C_1,C_2,...,C_K}$拔莱。
從樣本我們可以學(xué)習(xí)得到樸素貝葉斯的先驗(yàn)分布$P(Y=C_k)(k=1,2,...K)$,接著學(xué)習(xí)到條件概率分布$P(X=x|Y=C_k) = P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k)$,然后我們就可以用貝葉斯公式得到X和Y的聯(lián)合分布P(X,Y)了碗降。聯(lián)合分布P(X,Y)定義為:
$$ \begin{align} P(X,Y=C_k) &= P(Y=C_k)P(X=x|Y=C_k) \\&= P(Y=C_k)P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k) \end{align}$$
從上面的式子可以看出$ P(Y=C_k)$比較容易通過最大似然法求出,得到的$ P(Y=C_k)$就是類別$C_k$在訓(xùn)練集里面出現(xiàn)的頻數(shù)塘秦。但是$P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k)$很難求出,這是一個(gè)超級(jí)復(fù)雜的有n個(gè)維度的條件分布讼渊。樸素貝葉斯模型在這里做了一個(gè)大膽的假設(shè),即X的n個(gè)維度之間相互獨(dú)立尊剔,這樣就可以得出:
$$P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k) = P(X_1=x_1|Y=C_k)P(X_2=x_2|Y=C_k)...P(X_n=x_n|Y=C_k)$$
從上式可以看出爪幻,這個(gè)很難的條件分布大大的簡(jiǎn)化了,但是這也可能帶來預(yù)測(cè)的不準(zhǔn)確性。你會(huì)說如果我的特征之間非常不獨(dú)立怎么辦挨稿?如果真是非常不獨(dú)立的話仇轻,那就盡量不要使用樸素貝葉斯模型了,考慮使用其他的分類方法比較好奶甘。但是一般情況下篷店,樣本的特征之間獨(dú)立這個(gè)條件的確是弱成立的,尤其是數(shù)據(jù)量非常大的時(shí)候臭家。雖然我們犧牲了準(zhǔn)確性船庇,但是得到的好處是模型的條件分布的計(jì)算大大簡(jiǎn)化了,這就是貝葉斯模型的選擇侣监。
最后回到我們要解決的問題鸭轮,我們的問題是給定測(cè)試集的一個(gè)新樣本特征$(x_1^{(test)}, x_2^{(test)}, ...x_n^{(test)}$,我們?nèi)绾闻袛嗨鼘儆谀膫€(gè)類型橄霉?
既然是貝葉斯模型窃爷,當(dāng)然是后驗(yàn)概率最大化來判斷分類了。我們只要計(jì)算出所有的K個(gè)條件概率$P(Y=C_k|X=X^{(test)})$,然后找出最大的條件概率對(duì)應(yīng)的類別姓蜂,這就是樸素貝葉斯的預(yù)測(cè)了按厘。
3. 樸素貝葉斯的推斷過程
上節(jié)我們已經(jīng)對(duì)樸素貝葉斯的模型也預(yù)測(cè)方法做了一個(gè)大概的解釋,這里我們對(duì)樸素貝葉斯的推斷過程做一個(gè)完整的詮釋過程钱慢。
我們預(yù)測(cè)的類別$C_{result}$是使$P(Y=C_k|X=X^{(test)})$最大化的類別逮京,數(shù)學(xué)表達(dá)式為:
$$ \begin{align} C_{result} & = \underbrace{argmax}_{C_k}P(Y=C_k|X=X^{(test)}) \\& = \underbrace{argmax}_{C_k}P(X=X^{(test)}|Y=C_k)P(Y=C_k) \Bigg{/}P(X=X^{(test)}) \end{align}$$
由于對(duì)于所有的類別計(jì)算$P(Y=C_k|X=X^{(test)})$時(shí),上式的分母是一樣的束莫,都是$P(X=X^{(test)}$懒棉,因此,我們的預(yù)測(cè)公式可以簡(jiǎn)化為:
$$ C_{result} = \underbrace{argmax}_{C_k}P(X=X^{(test)}|Y=C_k)P(Y=C_k) $$
接著我們利用樸素貝葉斯的獨(dú)立性假設(shè)览绿,就可以得到通常意義上的樸素貝葉斯推斷公式:
$$ C_{result} = \underbrace{argmax}_{C_k}P(Y=C_k)\prod_{j=1}^{n}P(X_j=X_j^{(test)}|Y=C_k) $$
4. 樸素貝葉斯的參數(shù)估計(jì)
在上一節(jié)中策严,我們知道只要求出$P(Y=C_k)和P(X_j=X_j^{(test)}|Y=C_k)(j=1,2,...n)$,我們通過比較就可以得到樸素貝葉斯的推斷結(jié)果饿敲。這一節(jié)我們就討論怎么通過訓(xùn)練集計(jì)算這兩個(gè)概率妻导。
對(duì)于$P(Y=C_k)$,比較簡(jiǎn)單,通過極大似然估計(jì)我們很容易得到$P(Y=C_k)$為樣本類別$C_k$出現(xiàn)的頻率怀各,即樣本類別$C_k$出現(xiàn)的次數(shù)$m_k$除以樣本總數(shù)m倔韭。
對(duì)于$P(X_j=X_j^{(test)}|Y=C_k)(j=1,2,...n)$,這個(gè)取決于我們的先驗(yàn)條件:
a) 如果我們的$X_j$是離散的值,那么我們可以假設(shè)$X_j$符合多項(xiàng)式分布瓢对,這樣得到$P(X_j=X_j^{(test)}|Y=C_k)$ 是在樣本類別$C_k$中寿酌,$X_j^{(test)}$出現(xiàn)的頻率。即:
$$P(X_j=X_j^{(test)}|Y=C_k) = \frac{m_{kj^{test}}}{m_k}$$
其中$m_k$為樣本類別$C_k$出現(xiàn)的次數(shù)沥曹,而$m_{kj^{test}}$為類別為$C_k$的樣本中份名,第j維特征$X_j^{(test)}$出現(xiàn)的次數(shù)。
某些時(shí)候妓美,可能某些類別在樣本中沒有出現(xiàn)僵腺,這樣可能導(dǎo)致$P(X_j=X_j^{(test)}|Y=C_k)$為0,這樣會(huì)影響后驗(yàn)的估計(jì)壶栋,為了解決這種情況辰如,我們引入了拉普拉斯平滑,即此時(shí)有:
$$P(X_j=X_j^{(test)}|Y=C_k) = \frac{m_{kj^{test}} + \lambda}{m_k + n\lambda}$$
其中$\lambda$ 為一個(gè)大于0的常數(shù)贵试,常常取為1琉兜。
b)如果我們我們的$X_j$是非常稀疏的離散值,即各個(gè)特征出現(xiàn)概率很低毙玻,這時(shí)我們可以假設(shè)$X_j$符合伯努利分布豌蟋,即特征$X_j$出現(xiàn)記為1,不出現(xiàn)記為0桑滩。即只要$X_j$出現(xiàn)即可梧疲,我們不關(guān)注$X_j$的次數(shù)。這樣得到$P(X_j=X_j^{(test)}|Y=C_k)$ 是在樣本類別$C_k$中运准,$X_j^{(test)}$出現(xiàn)的頻率幌氮。此時(shí)有:
$$P(X_j=X_j^{(test)}|Y=C_k) = P(j|Y=C_k)X_j^{(test)} + (1 - P(j|Y=C_k)(1-X_j^{(test)})$$
其中,$X_j^{(test)}$取值為0和1胁澳。
c)如果我們我們的$X_j$是連續(xù)值该互,我們通常取$X_j$的先驗(yàn)概率為正態(tài)分布,即在樣本類別$C_k$中韭畸,$X_j$的值符合正態(tài)分布宇智。這樣$P(X_j=X_j^{(test)}|Y=C_k)$的概率分布是:
$$P(X_j=X_j^{(test)}|Y=C_k) = \frac{1}{\sqrt{2\pi\sigma_k^2}}exp\Bigg{(}-\frac{(X_j^{(test)} - \mu_k)^2}{2\sigma_k^2}\Bigg{)}$$
其中$\mu_k和\sigma_k^2$是正態(tài)分布的期望和方差,可以通過極大似然估計(jì)求得胰丁。$\mu_k$為在樣本類別$C_k$中普筹,所有$X_j$的平均值。$\sigma_k^2$為在樣本類別$C_k$中隘马,所有$X_j$的方差太防。對(duì)于一個(gè)連續(xù)的樣本值,帶入正態(tài)分布的公式酸员,就可以求出概率分布了蜒车。
5. 樸素貝葉斯算法過程
我們假設(shè)訓(xùn)練集為m個(gè)樣本n個(gè)維度,如下:
$$(x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0), (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)},y_1), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_n)$$
共有K個(gè)特征輸出類別幔嗦,分別為${C_1,C_2,...,C_K}$,每個(gè)特征輸出類別的樣本個(gè)數(shù)為${m_1,m_2,...,m_K}$,在第k個(gè)類別中酿愧,如果是離散特征,則特征$X_j$各個(gè)類別取值為$m_{jl}$邀泉。其中l(wèi)取值為$1,2,...S_j$嬉挡,$S_j$為特征j不同的取值數(shù)钝鸽。
輸出為實(shí)例$X^{(test)}$的分類。
算法流程如下:
1) 如果沒有Y的先驗(yàn)概率庞钢,則計(jì)算Y的K個(gè)先驗(yàn)概率:$P(Y=C_k) = m_k/m$拔恰,否則$P(Y=C_k)$為輸入的先驗(yàn)概率。
2) 分別計(jì)算第k個(gè)類別的第j維特征的第l個(gè)個(gè)取值條件概率:$P(X_j=x_{jl}|Y=C_k)$
a)如果是離散值:
$$P(X_j=x_{jl}|Y=C_k) = \frac{x_{jl} + \lambda}{m_k + n\lambda}$$
$\lambda$可以取值為1基括,或者其他大于0的數(shù)字颜懊。
b)如果是稀疏二項(xiàng)離散值:$$P(X_j=x_{jl}|Y=C_k) = P(j|Y=C_k)x_{jl} + (1 - P(j|Y=C_k)(1-x_{jl}) $$
此時(shí)$l$只有兩種取值。
c)如果是連續(xù)值不需要計(jì)算各個(gè)l的取值概率风皿,直接求正態(tài)分布的參數(shù):
$$P(X_j=x_j|Y=C_k) = \frac{1}{\sqrt{2\pi\sigma_k^2}}exp\Bigg{(}-\frac{(x_j - \mu_k)^2}{2\sigma_k^2}\Bigg{)}$$
需要求出$\mu_k和\sigma_k^2$河爹。 $\mu_k$為在樣本類別$C_k$中,所有$X_j$的平均值桐款。$\sigma_k^2$為在樣本類別$C_k$中咸这,所有$X_j$的方差。
3)對(duì)于實(shí)例$X^{(test)}$魔眨,分別計(jì)算:
$$P(Y=C_k)\prod_{j=1}^{n}P(X_j=x_j^{(test)}|Y=C_k) $$
4)確定實(shí)例$X^{(test)}$的分類$C_{result}$
$$C_{result} = \underbrace{argmax}_{C_k}P(Y=C_k)\prod_{j=1}^{n}P(X_j=X_j^{(test)}|Y=C_k) $$
從上面的計(jì)算可以看出炊苫,沒有復(fù)雜的求導(dǎo)和矩陣運(yùn)算,因此效率很高冰沙。
6. 樸素貝葉斯算法小結(jié)
樸素貝葉斯算法的主要原理基本已經(jīng)做了總結(jié)侨艾,這里對(duì)樸素貝葉斯的優(yōu)缺點(diǎn)做一個(gè)總結(jié)。
樸素貝葉斯的主要優(yōu)點(diǎn)有:
1)樸素貝葉斯模型發(fā)源于古典數(shù)學(xué)理論拓挥,有穩(wěn)定的分類效率唠梨。
2)對(duì)小規(guī)模的數(shù)據(jù)表現(xiàn)很好,能個(gè)處理多分類任務(wù)侥啤,適合增量式訓(xùn)練当叭,尤其是數(shù)據(jù)量超出內(nèi)存時(shí),我們可以一批批的去增量訓(xùn)練盖灸。
3)對(duì)缺失數(shù)據(jù)不太敏感蚁鳖,算法也比較簡(jiǎn)單,常用于文本分類赁炎。
樸素貝葉斯的主要缺點(diǎn)有:
1) 理論上醉箕,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實(shí)際上并非總是如此徙垫,這是因?yàn)闃闼刎惾~斯模型假設(shè)屬性之間相互獨(dú)立讥裤,這個(gè)假設(shè)在實(shí)際應(yīng)用中往往是不成立的,在屬性個(gè)數(shù)比較多或者屬性之間相關(guān)性較大時(shí)姻报,分類效果不好己英。而在屬性相關(guān)性較小時(shí),樸素貝葉斯性能最為良好吴旋。對(duì)于這一點(diǎn)损肛,有半樸素貝葉斯之類的算法通過考慮部分關(guān)聯(lián)性適度改進(jìn)厢破。
2)需要知道先驗(yàn)概率,且先驗(yàn)概率很多時(shí)候取決于假設(shè)治拿,假設(shè)的模型可以有很多種摩泪,因此在某些時(shí)候會(huì)由于假設(shè)的先驗(yàn)?zāi)P偷脑驅(qū)е骂A(yù)測(cè)效果不佳。
3)由于我們是通過先驗(yàn)和數(shù)據(jù)來決定后驗(yàn)的概率從而決定分類忍啤,所以分類決策存在一定的錯(cuò)誤率。
4)對(duì)輸入數(shù)據(jù)的表達(dá)形式很敏感仙辟。
以上就是樸素貝葉斯算法的一個(gè)總結(jié)同波,希望可以幫到朋友們。