1. 程式人生 > >樸素貝葉斯(Naive Bayesian)

樸素貝葉斯(Naive Bayesian)

tar 不可 https 獲得 現實 叠代 結構 步驟 無法

一、貝葉斯定理

機器學習所要實現的均是通過有限的訓練樣本盡可能的準確估計出後驗概率,也就是所說的結果情況。大題分為判別式模型和生成式模型。

1. 判別式模型:直接通過建模P(結果|特征)的方式來預測結果,典型代表如決策樹,BP神經網絡、支持向量機等。

2. 生成式模型:先對聯合概率分布P(特征,結果)進行建模,然後通過下面的公式得到P(結果|特征),貝葉斯就是通過這種方法來解決問題。

技術分享圖片

當然貝葉斯的本質公式並不是這個,為了機器學習理解方便,所以就這麽拼寫,一目了然。

其中P(result)作為類先驗概率,P(feature|result)是特征對於結果的類條件概率(似然),所以對於根據特征求結果的學習,就轉變成了利用訓練數據估計--先驗P(resuult)--P(feature|result)的過程。

P(result)表示結果在訓練樣本中所占的比例,通過統計各類樣本出現的頻率即可很好的帶入計算。

P(feature|result)可就不太一樣了,我們往往可能有很多個特征值,這樣就會導致,產生這一系列特征值的樣本幾乎沒有,換句話講:特征值的排列組合往往遠遠大於訓練樣本數目,所以單單通過統計是絕對不行的。同樣P(feature)也因為相同原因而無法計算。

二、類條件概率的變形(樸素貝葉斯)

樸素貝葉斯法對條件概率分布做了條件獨立性的假設,由於這是一個較強的假設,樸素貝葉斯也由此得名!這一假設使得樸素貝葉斯法變得簡單,但有時會犧牲一定的分類準確率。簡單來說,就是將類條件概率進行拆分,這裏采用拆分成連乘的形式:

技術分享圖片

同樣P(feature)因為是定值所以並不做考慮的範圍內。實際上,預測結果的判斷就是比較P(result)*P(feature|result)的大小。

但是當某個概率會特別小的時候,計算機無法判斷0和極小值的區別,這就會導致模型失敗,也就是下溢問題。上溢也是如此,但是這在概率中並不存在,因為數字往往並不會很大,因此通常情況為了避免問題的發生,會對每一個單獨的數字進行對數操作,將數字進行轉變,防止出現上溢或者下溢操作。當然正常來講,樸素貝葉斯並不需要這步操作,因為概率不不可能無限趨近於0。

對於類條件概率的求值有兩種情況,分別為離散型和連續性,所有的機器學習算法都離不開這兩個問題,往往離散型的數據比較容易求解。

1. 離散型,離散型只需要統計個數即可,但是有時為了防止概率0的出現,會對概率進行平滑處理,常用--拉普拉斯修正--來處理這類問題,公式如下所示:

技術分享圖片

其中D表示所有樣本的個數,Dresult,feature表示樣本中擁有該特征值且值為result的個數,N表示在該特征值上有多少種情況(類別)。用來保證P(feature|result)的在該特征上的和為1。

2. 連續型,連續型數據考慮概率密度函數,根據在i屬性上的均值和方差進行衡量,衡量公式為:

技術分享圖片

其中均值和方差如下所示:N(μresult,feature,σresult,feature),這裏的方差是樣本方差,分母是n-1,並不是n,至於原因,知乎解答。

三、半樸素貝葉斯

樸素貝葉斯中最重要的假設就是:屬性條件獨立性。在現實生活中,往往這個條件很難成立,例如你工資高可能你的消費水平就會適當提升,亦或是家境好,你的消費水平也會受到影響。

所以嘞,嘗試去對條件獨立性這個條件進行放松,由此產生半樸素貝葉斯的學習方法。

基本思想:適當考慮一部分屬性間的相互依賴信息,從而既不需要進行完全聯合概率計算,又不至於忽略了比較強的屬性依賴關系。

策略:ODE(One-Dependent Estimator)獨依賴估計——假設每個屬性在類別之外最多依賴一個其他屬性。

技術分享圖片

在半樸素貝葉斯分類器中,最主要的問題便是如何確定每個屬性的關聯屬性,換句話講,也就是父屬性。根據不同的確定方法,會產生不同的獨依賴分類器。

1. SPODE(Super-Parent ODE)超父獨依賴估計

假定所有的屬性都依賴於同一個屬性(例如都選擇屬性x1作為父屬性),這個屬性稱作“超父”。通過交叉驗證等模型來判斷選擇父屬性。缺點可能不止一點半點。

2. TAN(Tree Augmented naive Bayes)最大帶權生成樹

a. 計算任意兩個屬性之間的條件互信息值

技術分享圖片

b. 根據所有互信息值構建一個全連通圖,任意兩個屬性之間的權值設定為互信息值

c. 利用Prim算法或者Kurskal算法來得到最大帶權生成樹

Prim是從某點出發不斷找已走結點中到未知結點的最小距離並加入,Kurskal算法是遍歷所有邊,不斷的加入不構成環形結構的節點和邊。

Prim適合邊多點少的,Kurskal適合點多邊少的。

此外擴充下Dijkstra,他是一個求最短路徑的算法,如果說Prim是求N個村子如何修路的問題,那麽Dijkstra是計算N個村子如何從A村走到其他村莊的最短路徑。

d. 確定各自父類

3. AODE(Averaged One-Dependent Estimator)平均獨依賴估計

和SPODE不一樣的地方在於,AODE嘗試將每個屬性都作為超父來構建SPODE,然後進行集成作為最終結果。換句話講,AODE是一種基於集成學習機制、更為強大的獨依賴分類器。

具體公式如下所示:

技術分享圖片

從公式可以看出,和樸素貝葉斯公司類似,AODE的訓練過程也是統計概率,然後對符合條件的樣本進行計數的過程。公式的具體問題可以根據實際情況進行取舍的喲。

四、貝葉斯網絡

1.貝葉斯網絡計算

貝葉斯網絡也稱為信念網(belief network),畢竟貝葉斯網絡全靠置信度來進行判斷所屬類別嘛。

借住DAG(Directed Acyclic Graph)有向無環圖——來刻畫屬性之間的依賴關系,用CPT(Conditional Probability Table)條件概率表來描述屬性的聯合概率分布。

根據貝葉斯網絡可以得到全部的關聯關系,根據關聯關系,由頂置低的可以獲得聯合概率分布的結果,圖像(貝葉斯網絡)可以通過獨立關系來表示,獨立關系通過文字描述獲取,簡單來整理如下所示:

文字描述:feature3和feature4在給定feature1的取值時獨立,feature4和feature5在給定feature2的取值時獨立.

獨立關系(公式表達):feature3⊥feature4|feature1  feature4⊥feature5|feature2 (獨立結果不止這些,後續會說)

有向無環圖:

技術分享圖片

聯合概率分布公式:

技術分享圖片

判斷獨立性的方法,首先將有向無環圖中的V型結構(feature1和feature2共同決定feature4)的兩個父節點連線,並轉換成無向圖。如下圖所示:

技術分享圖片

如果特征1和特征2能被特征結合K分開,那麽說特征1和特征2是獨立的,例如feature2⊥feature3|feature1(上面所說的不止那兩個獨立情況)。

2. 學習貝葉斯網絡圖

之前說了那麽多都他喵的是廢話,怎麽搞出來網絡結構才是貝葉斯網絡的重中之重。

使用“評分搜索”就可以很好地解決問題,設定評分函數,根據此函數評估貝葉斯網絡和訓練數據的契合程度,基於評分函數尋找最優貝葉斯網絡。

a. 選擇評分函數

類似於損失函數,我們通常為了讓分類更加準確,來讓損失函數最小化,在這裏,我們選擇去讓評分函數作為極大似然估計。而無論是AIC(1)還是BIC(1/2logm),歸根到底都是求貝葉斯網絡的極大似然函數。

極大似然函數:

已知具有某種數據滿足某種概率分布,但是具體參數並不知情,通過若幹次試驗並通過結果推算出參數的大概值。極大似然估計就是建立在這種思想之上,已知某個參數能夠讓這個樣本出現的概率最大,所以幹脆把這個參數當做估計的真實值。具體步驟如下:

(1) 寫出似然函數; (2) 對似然函數取對數,並整理; (3) 求導數; (4) 解似然方程 。

從所有的網絡結構空間中決策出最優貝葉斯網絡是一個NP難問題,難以快速求解,大題解決方案有如下兩種:

a. 從某個網絡出發,每次增刪改一條邊,直到評分函數的值不在降低為止

b. 施加約束來節省搜索空間,例如將網絡限定為樹形結構,TAN可看做是貝葉斯網的特例

NP難問題:

推銷員旅行問題顯然是 NP 的。因為如果你任意給出一個行程安排,可以很容易算出旅行總開銷。但是,要想知道一條總路費小於 C 的行程是否存在,在最壞情況下,必須檢查所有可能的旅行安排! 這將是個天文數字。

3. 根據貝葉斯網絡判斷聯合概率

通過貝葉斯網中的聯合概率分布可以精確的計算後驗概率,但是當網絡節點較多、連接稠密的時候,難以進行判斷。所以需要借助“近似推斷”,降低精度的要求,來換取時間上的提升。通常采用——吉布斯采樣來完成。

吉布斯采樣:一種隨機采樣方法,隨機產生一個和證據變量(也就是我們所說的特征情況)一致的樣本作為初始點,然後從當前初始點出發去產生下一個樣本。隨機初始化待查詢變量,對帶查詢變量逐個進行采樣改變其值,采樣改變方法根據貝葉斯網絡來判定,進行T次,判斷有多少次符合我們所要的結果,這個結果便是估算出來的後驗概率。

通俗解釋:取樣就是以一定的概率分布,看發生什麽事件。舉一個例子。甲只能E:吃飯、學習、打球,時間T:上午、下午、晚上,天氣W:晴朗、刮風、下雨。現在要一個樣本,這個樣本可以是:打球+下午+晴朗。

問題是我們不知道p(E,T,W),或者說,不知道三件事的聯合分布joint distribution。當然,如果知道的話,就沒有必要用gibbs sampling了。但是,我們知道三件事的conditional distribution。也就是說,p(E|T,W),p(T|E,W),p(W|E,T)。現在要做的就是通過這三個已知的條件分布,再用gibbs sampling的方法,得到聯合分布。
具體方法。首先隨便初始化一個組合,i.e. 學習+晚上+刮風,然後依條件概率改變其中的一個變量。具體說,假設我們知道晚上+刮風,我們給E生成一個變量,比如,學習-》吃飯。我們再依條件概率改下一個變量,根據學習+刮風,把晚上變成上午。類似地,把刮風變成刮風(當然可以變成相同的變量)。這樣學習+晚上+刮風-》吃飯+上午+刮風。同樣的方法,得到一個序列,每個單元包含三個變量,也就是一個馬爾可夫鏈。然後跳過初始的一定數量的單元(比如100個),然後隔一定的數量取一個單元(比如隔20個取1個)。這樣sample到的單元,是逼近聯合分布的。

關於MCMC、馬爾可夫鏈之後在整理,現在先知道吉布斯采樣就可以了,嘖嘖。

五、EM算法

訓練樣本總會有不完整的時候,尤其是你自己去提取數據的時候,對於這種不存在觀測值情況下,就會造成訓練樣本不完整。

未觀測變量——隱變量,以下用A表示以觀測變量,B表示未觀測變量,θ表示模型參數,通過極大似然函數來求解問題:

1. 寫出似然函數 P(A,B|θ)

2. 對似然函數取對數並整理 LL(θ|A,B)=ln(P(A,B|θ))

3. B不存在所以對B計算期望LL(θ|A)=ln(P(A|θ))=ln∑BP(A,B|θ),

EM算法——期望最大化算法就是常用的估計參數隱變量的方法,采用叠代的方式,基本步驟如下:

1. E——θ值已知,根據訓練數據推斷出最優隱變量B的值

2. M——B已知,對參數θ進行極大似然估計

高斯混合聚類的使用的就是EM算法,等聚類的時候在啃,先把這個啃了。

樸素貝葉斯(Naive Bayesian)