Day9~10 第四章 樸素貝葉斯


1?樸素貝葉斯法的學(xué)習(xí)與分類

??樸素貝葉斯的思想是:對(duì)于給定的一個(gè)訓(xùn)練數(shù)據(jù)集,首先基于特征條件獨(dú)立假設(shè)學(xué)習(xí)輸入輸出的聯(lián)合概率分布;然后基于此模型,對(duì)給定的輸入 x,利用貝葉斯定理求出后驗(yàn)概率最大的輸出 y。由于樸素貝葉斯實(shí)際上是學(xué)習(xí)生成數(shù)據(jù)的機(jī)制,因此屬于生成模型

1.1?基本方法

??設(shè)輸入空間 \mathcal{X}\subseteq \mathbb{R}^n ,輸出空間為類標(biāo)記集合 \mathcal{Y}=\{c_1,c_2,\dots,c_K\}。輸入為特征向量 x\in\mathcal{X}, 輸出為類標(biāo)記 y\in\mathcal{Y}。X 是定義在輸入空間 \mathcal{X} 上的隨機(jī)向量,Y 是定義在輸出空間 \mathcal{Y} 上的隨機(jī)變量。P(X,Y)XY 的聯(lián)合概率分布。訓(xùn)練數(shù)據(jù)集T=\{(x_1,y_1),(x_2,y_2),\dots ,(x_N,y_N)\}P(X,Y) 獨(dú)立同分布生成。
??先驗(yàn)概率分布P(Y=c_k),\quad k = 1,2,\dots K??條件概率分布P(X=x|Y=c_k)由于樸素貝葉斯對(duì)條件概率分布做了條件相互獨(dú)立的假設(shè)。因此有P(X=x|Y=c_k) = \prod\limits_{j=1}^n P\big(X^{(j)} = x^{(j)}|Y=c_k\big)
??后驗(yàn)概率計(jì)算根據(jù)貝葉斯定理進(jìn)行 (具體過程可參考李航《統(tǒng)計(jì)學(xué)習(xí)方法(第二版)):y=\arg\max\limits_{c_k} P(Y=c_k)\prod\limits_{j} P\big(X^{(j)} = x^{(j)}|Y=c_k\big)

??對(duì)于條件相互獨(dú)立的假設(shè)太強(qiáng),有半樸素貝葉斯之類的算法通過考慮部分關(guān)聯(lián)性適度改進(jìn),例如為了計(jì)算量不至于太大,我們假定每個(gè)屬性只依賴另外的一個(gè)屬性。解決特征之間的相關(guān)性,我們還可以使用主成分分析(PCA)的方法,去除特征相關(guān)性,再進(jìn)行樸素貝葉斯計(jì)算。

1.2?后驗(yàn)概率最大化的含義

??樸素貝葉斯將實(shí)例分到后驗(yàn)概率最大的類中等價(jià)于經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化。選則 0-1 損失函數(shù):L(Y,f(X)) = \left\{\begin{align} 1,&\ \ Y\neq f(X)\\ 0,&\ \ Y=f(X)\\ \end{align}\right.其中 f(X) 是分類決策函數(shù)。結(jié)合聯(lián)合分布的條件期望,故經(jīng)驗(yàn)風(fēng)險(xiǎn)函數(shù)為R_{\text{exp}}(f)=E[L(Y,f(x))]=E_X\sum\limits_{k=1}^K [L(c_k,f(x))]P(c_k|X)為使經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化,只需對(duì) X=x 逐個(gè)極小化,由此可得:\begin{align}L(Y,f(X)) &= \arg\min\limits_{y\in\mathcal{Y}}\sum\limits_{k=1}^K [L(c_k,y)]P(c_k|X=x)\\ &=\arg\min\limits_{y\in\mathcal{Y}}\sum\limits_{k=1}^K P(y\neq c_k|X=x)\\ &=\arg\min\limits_{y\in\mathcal{Y}}\big(1- P(y= c_k|X=x)\big)\\ &=\arg\max\limits_{y\in\mathcal{Y}}P(y= c_k|X=x)\\ \end{align}這樣一來,根據(jù)期望風(fēng)險(xiǎn)最小化準(zhǔn)則就得到了后驗(yàn)概率最大化準(zhǔn)則:f(x)=\arg\max\limits_{c_k}P(c_k|X=x)即樸素貝葉斯采用的原理

1.3?對(duì)看到的一個(gè)有關(guān)樸素貝葉斯假設(shè)分析的思考

??看到一篇文章說樸素貝葉斯的假設(shè)有兩條:
??1、自變量之間獨(dú)立
??2、連續(xù)型自變量關(guān)于因變量服從正態(tài)分布
??關(guān)鍵在于第二條,這說明了樸素貝葉斯對(duì)自變量不服從正態(tài)分布的數(shù)據(jù)集擬合效果極差
??但是在我學(xué)習(xí)以及推導(dǎo)過程中并未發(fā)現(xiàn)該要求,于是我就嘗試復(fù)刻了他的分析過程,代碼是用數(shù)學(xué)軟件 matlab 編寫的:

(1)生成數(shù)據(jù)集并繪制散點(diǎn)圖

% 隨機(jī)生成一個(gè) [0,1] x [0,1] 上的 xy<0.25 類別為 1;yx>0.25 類別為 2 的數(shù)據(jù)集
x = (randi(101,500,1)-1)./100;
y = (randi(101,500,1)-1)./100;
z = zeros(500,1);

for i = 1:500
    if y(i)>0.2*sin(20*x(i))+0.5
        z(i) = 1;
    else
        z(i) = 2;
    end
end

% 繪制原數(shù)據(jù)散點(diǎn)圖 標(biāo)簽為1為紅色 標(biāo)簽為2為藍(lán)色
figure
hold on
ezplot('y=0.2*sin(20*x)+0.5');
title('{y}={0.2}{\times}{sin}({20}{\times}{x})+{0.5}')
set(gca,'Xlim',[-0.05,1.05]);
set(gca,'Ylim',[-0.05,1.05]);
gscatter(x,y,z,'br','o');
hold off
原始數(shù)據(jù)散點(diǎn)圖

(2)采用樸素貝葉斯法分類

nbGau = fitcnb([x,y], z);
nbGauResubErr = resubLoss(nbGau);

cp = cvpartition(z,'KFold',10);
nbGauCV = crossval(nbGau, 'CVPartition',cp);
nbGauCVErr = kfoldLoss(nbGauCV)

figure
hold on
ezplot('y=0.2*sin(20*x)+0.5');
title('{y}={0.2}{\times}{sin}({20}{\times}{x})+{0.5}')
set(gca,'Xlim',[-0.05,1.05]);
set(gca,'Ylim',[-0.05,1.05]);
labels = predict(nbGau, [x y]);
gscatter(x,y,labels,'br','o');
樸素貝葉斯分類結(jié)果

??可以看出和原文說的一樣分類效果確實(shí)不是很好,但是在編寫的過程中我已經(jīng)發(fā)現(xiàn)問題了:這里的樸素貝葉斯是采用的先驗(yàn)為高斯分布(正態(tài)分布)的樸素貝葉斯,這樣自然的對(duì)自變量不服從正態(tài)分布的數(shù)據(jù)集擬合效果會(huì)不好!
??那既然發(fā)現(xiàn)問題了,有沒有辦法解決呢?那當(dāng)然是有的!常見的樸素貝葉斯有以下幾種:
??1. GaussianNB
??先驗(yàn)為高斯分布(正態(tài)分布)的樸素貝葉斯,適用于樣本特征的分布大部分為連續(xù)性,其假定各個(gè)特征 x_i 在各個(gè)類別 y 下服從正態(tài)分布
??2. MutinomiaINB
??先驗(yàn)為多項(xiàng)式分布的樸素貝葉斯。描述各類樣本出現(xiàn)的次數(shù)或者出現(xiàn)次數(shù)的比例,常用于文本分類,特征表示的是次數(shù)。適用于樣本分布為多元離散值。
??3. BernuoliNB
??先驗(yàn)為伯努利分布的樸素貝葉斯。假設(shè)特征為先驗(yàn)概率為二元伯努利分布。適用于樣本特征是二元離散值或者稀疏的多元離散值。

??不難發(fā)現(xiàn),我們其實(shí)可以嘗試使用先驗(yàn)為多項(xiàng)式分布的 MutinomiaINB 來進(jìn)行學(xué)習(xí),代碼也只需設(shè)置 fitcnb 函數(shù)的先驗(yàn)分布參數(shù):

nbGau = fitcnb([x,y], z,'DistributionNames','mvmn');  %修改先驗(yàn)分布參數(shù)為 'mvmn' 
nbGauResubErr = resubLoss(nbGau);

cp = cvpartition(z,'KFold',10);
nbGauCV = crossval(nbGau, 'CVPartition',cp);
nbGauCVErr = kfoldLoss(nbGauCV)

figure
hold on
ezplot('y=0.2*sin(20*x)+0.5');
title('{y}={0.2}{\times}{sin}({20}{\times}{x})+{0.5}')
set(gca,'Xlim',[-0.05,1.05]);
set(gca,'Ylim',[-0.05,1.05]);
labels = predict(nbGau, [x y]);
gscatter(x,y,labels,'br','o');
3.jpg

??可以看到學(xué)習(xí)結(jié)果比之前明顯好了不少!這提醒我們,在使用樸素貝葉斯模型進(jìn)行學(xué)習(xí)的時(shí)候要考慮特征向量符合什么樣的先驗(yàn)分布,這樣才能具有更好的分類效果。這一點(diǎn)不僅僅可以運(yùn)用在樸素貝葉斯上,對(duì)于其他的模型也是同理,只有考慮好了特征的分布性質(zhì),才能采用更加適合的模型進(jìn)行學(xué)習(xí)!


2?樸素貝葉斯的參數(shù)估計(jì)以及算法

??在樸素貝葉斯法中,學(xué)習(xí)意味著估計(jì)先驗(yàn)概率 P(Y=c_k) 以及條件概率 P(X^{(j)}=x^{(j)}|Y=c_k)??梢詰?yīng)用極大似然估計(jì)法或者貝葉斯估計(jì)法估計(jì)相應(yīng)的概率。貝葉斯估計(jì)相較于極大似然估計(jì)的區(qū)別在于貝葉斯估計(jì)在隨機(jī)變量各個(gè)取值的頻數(shù)上賦予一個(gè)正數(shù) \lambda>0,當(dāng) \lambda = 0 時(shí)即為極大似然估計(jì)。
??下面給出樸素貝葉斯的學(xué)習(xí)與分類算法。
??算法 4.1 (樸素貝葉斯算法)
??輸入:訓(xùn)練數(shù)據(jù)集 T=\{ x_1,x_2,\dots, x_N\},其中 x_i = ( x_i^{( 1 )} , x_i^{(2)} , ? ? , x_i^{(k)})^T,i=1,2,\dots,N;x_i^{(j)} 是第 i 個(gè)樣本的第 j 個(gè)特征,x_i^{(j)}\in\{a_{j1},a_{j2},\dots,a_{jS_j}\},j=1,2,\dots,n,a_{jl} 是第 j 個(gè)特征可能取的第 l 個(gè)值,l=1,2,\dots,S_jy_i\in\{c_1,c_2,\dots,c_K\};實(shí)例 x
??輸出:對(duì)實(shí)例 x 的分類;
??(1) 計(jì)算先驗(yàn)概率以及條件概率P_{\color{red}{\lambda}}(Y=c_k)=\frac{\sum\limits_{i=1}^N I(y_i=c_k)\color{red}{+\lambda}}{N\color{red}{+K\lambda}},\quad k=1,2,\dots,K. P_{\color{red}{\lambda}}(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum\limits_{i=1}^N I(x^{(j)}_i=a_{jl}|y_i=c_k)\color{red}{+\lambda}}{\sum\limits_{i=1}^N I(y_i=c_k)\color{red}{+S_j\lambda}}, j=1,2,\dots,n;\quad l=1,2,\dots,S_j;\quad k=1,2,\dots,K.
??(2) 對(duì)于給定的實(shí)例 x=(x^{(1)},x^{(2)},\dots,x^{(n)})^T,計(jì)算P_{\color{red}{\lambda}}(Y=c_k)\prod\limits_{j=1}^n P_{\color{red}{\lambda}}(X^{(j)}=x^{(j)}|Y=c_k),\quad k=1,2,\dots,K
??(3) 確定實(shí)例 x 的類y=\arg\max\limits_{c_k} P_{\color{red}{\lambda}}(Y=c_k)\prod\limits_{j} P_{\color{red}{\lambda}}\big(X^{(j)} = x^{(j)}|Y=c_k\big)

??其中,去掉標(biāo)紅的符號(hào)后的算法即為采用極大似然估計(jì),保留標(biāo)紅符號(hào)后的算法則為采用貝葉斯估計(jì)。
??貝葉斯估計(jì)是為了解決極大似然估計(jì)中要估計(jì)的概率值為 0 的情況。常取 \lambda = 1,這時(shí)稱為拉普拉斯平滑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容