樸素貝葉斯

hit2015spring

歡迎關注我的博客:http://blog.csdn.NET/hit2015spring

貝葉斯與條件概率

學習一個分類器主要是對一個損失函數進行優化,使得損失函數最小,這時候得到的分類器對問題的判斷就會比較nice。用貝葉斯分類器,就是要建立一個基於概率發生的條件下進行判斷的一個基本方法。

貝葉斯分類的思想是基於概率統計的思想出發,即有一個訓練樣本集,這裏麪包含着屬性值(特徵值)X(X1,X2,,Xn) 對應的標籤值Y(Y1,Y2,,Yn) ,需要對新得到的未知標籤的屬性進行分類。這裏面運用到了貝葉斯條件概率:

A1,,An 是互不相容的事件,且P(Ai)>0(i=1,2,,n) 若對任意事件BBA1+A2+,+AnP(B)>0

P(Ai|B)=P(Ai)P(B|Ai)j+1nP(Aj)P(B|Aj)

把上述的公式理解就是:B 是一個事件發生具有的某一種原因(今年收成好有一些原因是今年雨水比較充沛,但是雨水充沛不一定莊稼收成就好),A 是某件事情,它的發生和上面的原因有一定的聯繫,就像莊稼收成好,一般,少。這些發生不發生和今年雨水充不充沛有一定的關係。

上式左邊表示:這件事的原因有了即(雨水比較充沛),想要求解今年莊稼收成怎麼樣。(如豐收的概率)
右邊分子:收成(如豐收)的情況下雨水充沛的概率,分母就是以往年份雨水充沛的概率,分母是一個歸一化的理解,當然這裏面是一個全概率公式。

由於以往年份雨水是否充沛和收成是否好,這些都是可以直接統計出來的,於是就可以得到這件事情的概率,我們稱爲先驗概率,我們要求解的今年的收成如何的概率,是根據先驗概率求解的,所以稱爲後驗概率。

當然我們的需求是對提取出來的特徵進行分類,這些特徵就能理解爲每個類別發生的原因,每個類別當然就是我們需要預測的某個事件的本身。貝葉斯分類的想法就是:我把提取得到的很多特徵,(當然這裏先假定所有的特徵都是獨立的,就是互不牽連,原因後面說)根據提取到的這些特徵,還有根據每一個類別裏面出現的特徵,來計算在當前這些特徵之下所有類別所佔有的概率。思想很簡單,選擇最大的概率所在的那個類別作爲我們所預測的結果。就是後驗概率最大的那個特徵作爲我們所預測的值。

接下來就是貝葉斯分類的一個過程:
設輸入空間XRn 是n維向量的集合,輸出空間是類標記集合Y={c1,c2,,ck} ,這裏面的如就是xX ,輸出爲類標記yY .X 是定義在輸入空間X 上面的隨機變量,Y 是定義在輸出空間上的隨機變量。P(X,Y)XY 的聯合概率分佈。

上面就是一個定義的過程,它是一個數學的表達,就是告訴我們,特徵的維數是n ,輸出的類別數是K ,P(X,Y) 是輸入和輸出的聯合概率分佈。

我們有一個訓練集:T=(x1,y1),(x2,y2),,(xn,yn) ,這裏面的特徵xi 是一個n 維向量,理解爲有n 個特徵,當然每一個特徵有Sj 個取值.。根據上面貝葉斯分類的思想,我們只要求得每一個類別發生的概率P(Ck) 和條件概率的分佈

P(X=x|Y=ck)=P(X(1)=x(1),X(2)=x(2),,X(n)=x(n)|Y=ck),k=1,2,,K

上面的式子是,在一個採樣樣本上面,它的特徵是n 維的,計算每一個類別下面的條件概率。

在上面的敘述過程中,特徵的維數是n ,就是上面說的莊稼收成受到影響的因素,這裏假設有n個,比如:降水,肥料,蟲害…….n個因素的影響。每個因素都有一些Sj,j=1,2,,n 個各自的屬性類別,比如降水:雨量充沛,少,一般。在上述條件概率計算的時候這裏面需要計算的參數個數就是指數型的有Kj=1nSj 個。所以這就要我們引入一個條件,就是假設這些特徵他們是互相獨立的,於是就能把上面條件概率的公式進行簡化處理——由於這個強限制性的條件,我們稱之爲樸素貝葉斯

於是上面條件概率公式成爲了:

P(X=x|Y=ck)=P(X(1)=x(1),X(2)=x(2),,X(n)=x(n)|Y=ck)=j=1nP(X(j)=x(j)|Y=ck)

這裏用連乘積代替了原來的聯合概率,這樣簡化了計算的過程,雖然這個操作會降低一些準確率,但是卻大大簡化了計算的過程。
注意上面的條件是假定各個條件獨立
於是樸素貝葉斯公式就可以寫成下面形式:

P(Y=ck|X=x)=P(X=x|Y=ck)P(Y=ck)kP(X=x|Y=ck)P(Y=ck)=P(Y=ck)jP(X(j)=x(j)|Y=ck)kP(Y=ck)jP(X(j)=x(j)|Y=ck)

上式就是樸素貝葉斯的基本公式,當然這是求所有類別在當前特徵下面的後驗概率,爲了使得我們預測到的類別準確性最大,就選擇後驗概率最大的那一個類別作爲預測得到的結果。,由於上面的式子中可以看到,右邊的式子分母是一樣的,所以只比較分子便可以得到結果。於是就是選擇:

y=argmaxckP(Y=ck)jP(X(j)=x(j)|Y=ck)

arg 表示取滿足後面式子中的變量的值,即取滿足maxP(Y=ck)jP(X(j)=x(j)|Y=ck) 這個式子的變量ck 的值。

貝葉斯的另外一個角度

當然我由前面我們分析過了,在對一個問題進行學習的過程中,我們用一個期望風險來評估這個模型的效果,這裏我們就拿期望風險來對上面經過直觀上理解,最終選擇最大後驗概率的模型進行解釋,以回到學習理論的本質,構造一個模型使得模型的期望風險最小。見SVM的理解與分析
我們這裏用一個0-1損失函數來對模型的建立進行一個評估。

0-1損失函數

上面的式子中f(X) 是分類決策函數,用這個損失函數來對我們的結果進行判斷的時候,模型最後得到的期望風險函數就是下面式子:

Rexp(f)=E[L(Y,f(X))]

由於我們是用後驗概率對每一個進行分類得到如下的式子:

期望的公式:i=1ni×

Rexp(f)=EXk=1K[L(ck,f(X))]P(ck|X)

當然我們爲了最小化期望風險,所以我們要對X=x 進行逐個的最小化,這樣就能達到總體的最小化。因爲所有樣本本身就是獨立同分布的,所以可以按照逐個最小推出總體最小。
所以就有

f(x)=argminyYk=1KL(ck,y)P(ck|X=x) =argminyYk=1KP(yck|X=x) =argminyY(1P(y=ck|X=x)) =argmaxyYP(y=ck|X=x)

所以上面的等式推導過程就是樸素貝葉斯所展現的取後驗概率最大的那個結果,可以使得學習得到的模型期望風險最小。

參數估計

在對貝葉斯分類器進行訓練的時候,其實就是對每一個的類別計算它的先驗概率P(c) 這裏用極大似然法來估計先驗概率。這裏舉一個極大似然的例子:

假如有一個罐子,裏面有黑白兩種顏色的球,數目多少不知,兩種顏色的比例也不知。我 們想知道罐中白球和黑球的比例,但我們不能把罐中的球全部拿出來數。現在我們可以每次任意從已經搖勻的罐中拿一個球出來,記錄球的顏色,然後把拿出來的球 再放回罐中。這個過程可以重複,我們可以用記錄的球的顏色來估計罐中黑白球的比例。假如在前面的一百次重複記錄中,有七十次是白球,請問罐中白球所佔的比例最有可能是多少?很多人馬上就有答案了:70% 。而其後的理論支撐是什麼呢?

我們假設罐中白球的比例是p ,那麼黑球的比例就是1p 。因爲每抽一個球出來,在記錄顏色之後,我們把抽出的球放回了罐中並搖勻,所以每次抽出來的球的顏 色服從同一獨立分佈。這裏我們把一次抽出來球的顏色稱爲一次抽樣。題目中在一百次抽樣中,七十次是白球的概率是P(Data|M) ,這裏Data 是所有的數據,M 是所給出的模型,表示每次抽出來的球是白色的概率爲p。如果第一抽樣的結果記爲x1 ,第二抽樣的結果記爲x2 那麼Data=(x1,x2,,x100) 。這樣,

P(Data|M)=P(x1,x2,,x100|M)=P(x1|M)P(x2|M)P(x100|M)=p70(1p)30.

那麼p 在取什麼值的時候,P(Data|M) 的值最大呢?將p70(1p)30 p$求導,並其等於零。

70p69(1p)30p7030(1p)29=0

解方程可以得到p=0.7
同樣的道理,在對訓練集的樣本參數進行估計的時候運用極大似然法,設訓練集裏面第c 類樣本的個數是Dc ,整個訓練集的個數是D

y=argmaxckP(Y=ck)jP(X(j)=x(j)|Y=ck)

由此可以估計出上面這個式子的P(Y=ck)=DcD

假設第C類中第j 個屬性Xj ,它的屬性值爲xkj ,統計出這個類別下,值爲xjk 的個數Dxkjc
上式中的連乘項表示爲:P(X(j)=x(j)|Y=ck)=DxkjcDc
於是極大似然估計下的貝葉斯分類器就完成了。

參數估計的另外一個方法:
當發生一種情況的時候:在訓練集裏面,某一個類別,在某一個屬性下面,它的一個屬性值並沒有出現在訓練集裏面,但是出現在了測試集裏面,於是就會產生某一個分類的概率直接變成0,這樣顯然會有失偏頗。

農作物收成的訓練集裏面:豐收和饑荒兩個類別,屬性有:雨量,光照 ,蟲害。在豐收的類別下面,雨量所代表的那個屬性,它的取值有降水超過400,降水200300 ,降水100200 ,降水50100 。但是沒有降水300400 的屬性值。當一個測試集中在降水那個屬性下取值恰好是300400 的時候,其他的值都很符合豐收這個類別的性質的時候,可是卻在豐收的類別下,後驗概率變成了0,這就不符合一些情況。於是就引入了一個新的估計方法。

貝葉斯估計

這個方法就是在極大似然估計的基礎上對條件概率值進行平滑處理,我們稱爲拉普拉斯修正,具體的算式如下:

P(Y=ck)=Dc+1D+c
上式c表示有c個類別

P(X(j)=x(j)|Y=ck)=Dxkjc+1Dc+k
上式的k表示在j的屬性下有k個屬性值類別。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章