貝葉斯分類器詳解 從零開始 從理論到實踐

BlackStar_L發表於2020-12-23

一、貝葉斯相關概念

可以說,機器學習的模型是來源於統計學知識,而最具統計學代表性的演算法便是樸素貝葉斯分類演算法。這套演算法的基石便是貝葉斯定理,這套定理不僅僅名揚於機器學習,更滲透進A.I.的方方面面,比如:語音技術的處理(針對人類語言的多義性),本質上是找到概率最大的文字序列。
在這裡插入圖片描述

1.1、頻率學派和貝葉斯學派

在概率學中有兩大學派,頻率學派(Frequentist)和貝葉斯學派(Bayesian)。它們對“概率”有不同的理解,“概率”本身表示事情發生的可能性,前者認為這種“可能性”是客觀存在與這個世界的,而後者認為是存在於我們的主觀想法裡的。

兩種學派都有自己的道理,都很難說服對方,但機器學習更偏向於貝葉斯學派。


1.1.1、頻率學派

(1)特點

頻率學派偏向於客觀性,從自然的角度出發,試圖為事件本身建模。

頻率學派只相信客觀能測量的東西,認為概率是頻率在無限次重複實驗時的極限值。

例如:
拋硬幣,拋 N N N 次( N N N 是一個大數),記錄下來正面向上的次數為 n n n,因此,硬幣正面向上的概率為 n / N n/N n/N

(2)定義

古典概型對概率的定義:實驗 A A A 在獨立重複實驗中,發生的頻率趨於極限 p p p,該常數 p p p 為事件 A A A 發生的概率,記為 P ( A ) = p P(A)=p P(A)=p

包含兩個核心點:

  • 事件 A A A 發生的概率是重複多次進行同一實驗得到的
  • 事件 A A A 發生的概率是常數

(3)侷限性

對評估不可重複實驗事件發生的概率有很大的侷限性。如:隕石撞擊地球、地震等等。


1.1.2、貝葉斯學派

(1)特點
貝葉斯學派偏向於主觀性,認為概率只不過是我們我們思想中對事情發生的可能性的一種猜測,從觀察者的角度出發,根據自己的經驗,使用自己的一套方法做出推斷,因為觀察者自身知識能力有限,推斷的結果不一定正確,但隨著自身對事物認知的提高,不斷修正自己的認知,那套方法也有所改變和提升。

例如:
通過觀察者自己的認知,認為硬幣是均勻的,正面朝上和反面朝上的概率應該各佔一半,所以研究的樣本特徵為硬幣均勻,正面朝上的概率為50%,這就是先驗概率。然而經過一些實驗發現,正面朝上只有20%,觀察者開始懷疑硬幣並不是均勻的,或者有空氣流動干擾等等,因為沒有完整的資訊作為論證,只能採用似真推斷(plausible reasoning),對各種可能的結果賦予一個合理性(plausibility),於是原來的樣本特徵“硬幣均勻”更新為“硬幣不均勻”、“空氣流動”等等新特徵,於是,通過觀察者知識狀態在新的觀測後不斷髮生更新,最後得出正面朝上的概率結果也不斷地變化。

先驗概率的基礎上,結合各種不同的實驗結果(似然度或條件概率)去修正先驗概率,這樣得出來的結果便是後驗概率

(2)定義
貝葉斯學派對概率的定義:事件 A A A 發生的概率是當前資料集 D D D 下的概率,即條件概率 P ( A ∣ D ) P(A|D) P(AD);當觀測資料集更新為 D 1 D_1 D1時,則事件 A A A 發生的概率為P(A|D1),不同的資料集預測事件A發生的概率不同。

貝葉斯學派評估事件A發生的概率會引用先驗概率後驗概率兩個概念來得出結果。

包含三個核心點:

  • 事件 A A A 發生的概率是變化的,並非常數
  • 事件 A A A 發生的概率是特定資料集下的條件概率
  • 事件 A A A 發生的概率是後驗概率,且事件 A A A 發生的先驗概率已給定

後驗比例 = 先驗比例 x 可能性比例

(3)侷限性

設定合理反映事件 A A A 發生的先驗概率比較難,不同先驗概率所獲得的結果不同。


1.2、概率論基礎知識

(1)先驗概率
先驗概率(prior probability),根據以往的經驗和分析得到的概率。

比如:拋一枚硬幣正面朝上的概率為50%

(2)條件概率
A 、 B A、B AB是兩個事件,且 p ( A ) > 0 p(A)>0 p(A)>0,稱

P ( B ∣ A ) = P ( A B ) P ( A ) P(B|A)=\frac{P(AB)}{P(A)} P(BA)=P(A)P(AB)

為在事件 A A A 發生的條件下事件 B B B 發生的概率。 P ( B ∣ A ) P(B|A) P(BA)條件概率 P ( A ) P(A) P(A) P ( B ) P(B) P(B)先驗概率

P ( A B ) P(AB) P(AB) A A A B B B 同時發生的概率,即聯合概率,還可以表示為 P ( A , B ) P(A, B) P(A,B)

(3)乘法定理
A 、 B A、B AB是兩個事件,且 p ( A ) > 0 p(A)>0 p(A)>0,若 A A A B B B 相關,求同時發生的概率

P ( A B ) = P ( A ) P ( B ∣ A ) P(AB) = P(A)P(B|A) P(AB)=P(A)P(BA)
A B AB AB 同時發生的概率 = A A A發生的概率 x 在 A A A發生的條件下 B B B發生的概率
或者
P ( A B ) = P ( B ) P ( A ∣ B ) P(AB) = P(B)P(A|B) P(AB)=P(B)P(AB)
A B AB AB 同時發生的概率 = B B B發生的概率 x 在 B B B發生的條件下 A A A發生的概率

A A A B B B 不相關,則:

P ( A B ) = P ( A ) P ( B ) P(AB) = P(A)P(B) P(AB)=P(A)P(B)

(4)全概率公式:
事件 A A A B B B 相關,事件 B B B 發生的所有可能結果 B 1 , B 2... , B n B1,B2 ...,Bn B1B2...Bn 相互獨立,求事件 A A A 發生的概率為:

P ( A ) = P ( A ∣ B 1 ) P ( B 1 ) + P ( A ∣ B 2 ) P ( B 2 ) + . . . + P ( A ∣ B n ) P ( B n ) = ∑ i = 1 n P ( A ) P ( A ∣ B ) \begin{aligned}P(A)&=P(A|B_1)P(B_1) +P(A|B_2)P(B_2) + ... + P(A|B_n)P(B_n) \\&=\displaystyle\sum_{i=1}^n{P(A)P(A|B)}\end{aligned} P(A)=P(AB1)P(B1)+P(AB2)P(B2)+...+P(ABn)P(Bn)=i=1nP(A)P(AB)

(5)後驗概率
後驗概率為一種條件概率,但是限定了目標事件為隱變數取值,而其中的條件為觀測結果。一般的條件概率,條件和事件都可以是任意的。

公式與條件概率類似,比如:某天開車出門時,已經堵車了,求前方發生了交通事故的概率:

P ( 交 通 事 故 ∣ 堵 車 ) = P ( 交 通 事 故 ) P ( 堵 車 ∣ 交 通 事 故 ) P ( 堵 車 ) P(交通事故|堵車) = \frac{P(交通事故)P(堵車|交通事故)}{P(堵車)} P()=P()P()P()


1.3、貝葉斯定理

貝葉斯定理(原理):

P ( A , B ) = P ( B , A ) P(A, B) = P(B, A) P(A,B)=P(B,A)
⇒ P ( A ∣ B ) P ( B ) = P ( B ∣ A ) P ( A ) \Rightarrow P(A|B)P(B)=P(B|A)P(A) P(AB)P(B)=P(BA)P(A)
⇒ P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) \Rightarrow P(A | B) = \frac{P(A)P(B | A)}{P(B)} P(AB)=P(B)P(A)P(BA)

  • P ( A ∣ B ) P(A|B) P(AB) 在事件B發生的條件下,A發生的概率。表示後驗概率
  • P ( B ∣ A ) P(B|A) P(BA) 在事件A發生的條件下,B發生的概率。表示條件概率
  • P ( A ) P(A) P(A) 為事件A發生的概率。表示先驗概率

推廣到機器學習的分類問題中:

假設某樣本中的特徵向量 x \pmb x xxx 與樣本所屬型別 y y y 具有因果關係。則利用貝葉斯公式,分類器要做的是:在已知樣本的特徵向量為 x \pmb x xxx的條件下反推樣本所屬的類別:

P ( y ∣ x ) = P ( x ∣ y ) P ( y ) P ( x ) \begin{aligned} P(y|\pmb x)=\frac{P(\pmb x|y)P(y)}{P(\pmb x)} \end{aligned} P(yxxx)=P(xxx)P(xxxy)P(y)

需要知道:

  • 特徵向量 x x x的概率分佈 P ( x ) P(\pmb x) P(xxx)
  • 每一類出現的概率 P ( y ) P(y) P(y),即先驗概率
  • 每一類樣本的條件概率 P ( x ∣ y ) P(\pmb x|y) P(xxxy),也稱似然(likelihood)

就可以計算出樣本屬於每一類的概率 P ( y ∣ x ) P(y|\pmb x) P(yxxx),即後驗概率。

分類問題只需要預測類別,比較樣本屬於每一類的概率大小,找出該值最大的那一類即可,因此可以忽略 P ( x ) P(\pmb x) P(xxx),因為它對所有類都是相同的,簡化後分類器的判別函式為:

a r g max ⁡ y P ( x ∣ y ) P ( y ) \begin{aligned} arg \max_{y} P(\pmb x|y) P(y) \end{aligned} argymaxP(xxxy)P(y)

意思是 P ( x ∣ y ) P ( y ) P(\pmb x|y) P(y) P(xxxy)P(y)達到最大值時, y y y的值為多少,屬於哪一個分類。



二、概率的分佈

概率分佈可被分為離散概率分佈連續概率分佈,分別有很多種不同情況。


2.1、離散概率分佈

離散概率分佈分為4種型別:

  • 伯努利分佈
  • 分類分佈
  • 二項分佈
  • 多項分佈

這四種分佈之間的區別可以簡單記為:

型別區別
伯努利分佈拋一次硬幣
分類分佈拋一次色子
二項分佈拋多次硬幣
多項分佈拋多次色子

其中最基本的是伯努利分佈,由此引出伯努利實驗(Bernoulli Trial)。它是隻有兩種可能實驗結果的單次隨機實驗,其重點是“結果只有兩種”,而且“只能實驗一次”。


2.1.1、伯努利分佈(Bernoulli Distribution)

又名兩點分佈或0-1分佈。

若伯努利實驗成功,則伯努利隨機變數為1,否則為0。其中,成功概率為 p p p,則失敗概率為 q = 1 − p q=1-p q=1p 0 < p < 1 0<p<1 0<p<1

典型例子:
拋一次硬幣的概率分佈,硬幣正面向上的概率為 p p p,硬幣反面向上的概率為 q q q。伯努利隨機變數 X X X 取值只能為0或1,它的概率質量函式(描述離散型資料的概率分佈)為:

X X X~ B e r n o u l l i ( p ) Bernoulli(p) Bernoulli(p)

f ( x ; p ) = p x q 1 − x = p I { x = 1 } q I { x = 0 } f(x;p)=p^xq^{1-x}=p^{I\{x=1\}}q^{I\{x=0\}} f(x;p)=pxq1x=pI{x=1}qI{x=0}


2.1.2、分類分佈(Categorical Distribution)

分類分佈是實驗結果種類大於2的伯努利分佈。

典型例子:
拋色子,不同與拋硬幣,色子的6個面對應6個不同的點數,每一面向上的概率分別為 p 1 , p 2 , p 3 , p 4 , p 5 , p 6 p_1,p_2,p_3,p_4,p_5,p_6 p1,p2,p3,p4,p5,p6(不一定每一面向上的概率為 1 / 6 1/6 1/6)。

分類隨機變數 X X X 可以取值為:1,2,…,K,其中取k值得概率為 p k p_k pk,它的概率質量函式是:

X X X~ C a t e g o r i c a l ( p ) Categorical(p) Categorical(p)

f ( x ; p ) = p 1 I { x = 1 } p 2 I { x = 2 } . . . p k I { x = k } = ∏ k = 1 K p k I { x = k } \begin{aligned} f(x;p)=p_1^{I\{x=1\}}p_2^{I\{x=2\}}...p_{k}^{I\{x=k\}}= \prod_{k=1}^{K}p_k^{I\{x=k\}} \end{aligned} f(x;p)=p1I{x=1}p2I{x=2}...pkI{x=k}=k=1KpkI{x=k}


2.1.3、二項分佈(Binomial Distribution)

二項分佈是 n n n 個獨立的伯努利實驗。當 n = 1 n=1 n=1 時,二項分佈就是伯努利分佈。

二項隨機變數 X X X描述 n n n 次伯努利實驗成功了 x x x 次,因此 x x x 可以取值為0,1,…,n。它的概率質量函式是:

X X X~ B e r n o u l l i ( p , n ) Bernoulli(p,n) Bernoulli(p,n)

f ( x ; p , n ) = x ! n ! ( n − x ) ! p x ( 1 − p ) n − x f(x;p,n)=\frac{x!}{n!(n-x)!}p^x(1-p)^{n-x} f(x;p,n)=n!(nx)!x!px(1p)nx


2.1.4 多項分佈(Multinomial Distribution)

多項分佈時 n n n 次分類實驗。當 n = 1 n=1 n=1 時,多項分佈為分類分佈。

多項隨機變數 X X X, 描述n次分類實驗有 K K K 個結局,而第 k k k 個結局(概率為 p k p_k pk)出現了 n k n_k nk次。它的概率質量函式是:

X X X~ M u l t i n o m i a l ( p , n ) Multinomial(p,n) Multinomial(p,n)

f ( n 1 , n 2 , . . . , n k ∣ p , n ) = n ! n 1 ! n 2 ! . . . n k ! p 1 n 1 p 2 n 2 . . . p k n k = n ! ∏ k = 1 K p k n k n k ! \begin{aligned} f(n_1,n_2,...,n_k|p,n)=\frac{n!}{n_1!n_2!...n_k!}{p_1^{n_1}p_2^{n_2}...p_k^{n_k}}= n!\prod_{k=1}^{K}\frac{p_k^{n_k}}{n_k!} \end{aligned} f(n1,n2,...,nkp,n)=n1!n2!...nk!n!p1n1p2n2...pknk=n!k=1Knk!pknk
其中, ∑ k = 1 K n k = n \begin{aligned} \sum^K_{k=1}{n_k}=n \end{aligned} k=1Knk=n


2.2、連續概率分佈

連續概率分佈分為2種型別:

  • 正態分佈
  • 貝塔分佈

2.2.1、正態分佈(Normal Distribution)

正態分佈也稱“常態分佈”或“高斯分佈”。

一維正態分佈有兩個引數 μ \mu μ σ 2 \sigma^2 σ2,一維正態隨機變數 X X X 可取任何實數 x x x,它的概率密度函式為:

X X X~ N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)

f ( x ∣ μ , σ 2 ) = 1 2 π σ 2 exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) f(x|\mu,\sigma^2)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp(-\frac{(x-\mu)^2}{2\sigma^2}) f(xμ,σ2)=2πσ2 1exp(2σ2(xμ)2)

n n n 維正態分佈有向量引數 μ \mu μ 和矩陣引數 ϵ \epsilon ϵ n n n 維正態隨機變數 X X X 可取任何實數向量 x x x,它的概率密度函式為

X X X~ N n ( μ , ϵ ) N_n(\mu,\epsilon) Nn(μ,ϵ)

f ( x ∣ μ , ϵ ) = 1 ( 2 π ) n ∣ ϵ ∣ exp ⁡ ( − 1 2 ( x − μ ) T ϵ − 1 ( x − μ ) ) f(x|\mu,\epsilon)=\frac{1}{\sqrt{(2\pi)^n|\epsilon|}}\exp(-\frac{1}{2}{(x-\mu)^T}{\epsilon^{-1}(x-\mu)}) f(xμ,ϵ)=(2π)nϵ 1exp(21(xμ)Tϵ1(xμ))


2.2.2、貝塔分佈(Beta Distribution)

貝塔分佈是描述概率的連續概率分佈,它有兩個形狀引數 α \alpha α β \beta β。貝塔隨機變數 X X X 取值為 x x x,其中 0 ≤ x ≤ 1 0\leq x\leq1 0x1,它的概率密度函式為:

X X X~ B e t a ( α , β ) Beta(\alpha,\beta) Beta(α,β)

f ( x ; α , β ) = x α − 1 ( 1 − x ) β − 1 B ( α , β ) f(x;\alpha,\beta)=\frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha,\beta)} f(x;α,β)=B(α,β)xα1(1x)β1,
B ( α , β ) = τ ( α ) τ ( β ) τ ( α + β ) B(\alpha,\beta)=\frac{\tau(\alpha)\tau(\beta)}{\tau(\alpha+\beta)} B(α,β)=τ(α+β)τ(α)τ(β)


三、貝葉斯分類

樸素貝葉斯(Native Bayes)是貝葉斯中非常重要一個分類,其成功的一個重要條件是屬性條件獨立性假設,由於這種假設在絕大多數情況下顯得太強,現實任務中這個假設往往難以成立,人們嘗試在不過與增加模型複雜度的前提下,將獨立性假設進行各種弱化,由此衍生出來很多新模型,比較經典有半樸素貝葉斯(Semi-Native Bayes)模型和貝葉斯網路(Bayesian Network)模型這兩種。


3.1、貝葉斯決策理論

貝葉斯決策論(Bayesian decision theory)是概率框架下實施決策的基本方法。對分類任務來說,在所有相關概率都已知的理想情形下,貝葉斯決策論考慮如何基於這些概率和誤判損失來選擇最優的類別標記。

假設有 N N N種可能的類別標記,記為 y = { c 1 , c 2 , . . . , c N } y=\{c_1,c_2,...,c_N\} y={c1,c2,...,cN},則基於後驗概率 P ( c i ∣ x ) P(c_i|x) P(cix) 可獲得樣本 x x x 分類為 c i c_i ci 所產生的期望損失函式(也稱條件風險)為:
R ( c i ∣ x ) = ∑ j = 1 N λ i j P ( c j ∣ x ) R(c_i|x)=\sum_{j=1}^N\lambda_{ij}P(c_j|x) R(cix)=j=1NλijP(cjx)
其中, λ i j \lambda_{ij} λij 是將一個真實標記為 c j c_j cj,但被標記為 c i c_i ci 的樣本所產生的的損失。

構建貝葉斯分類器的任務是尋找一個判定準則 h : x → y h:x\rightarrow y h:xy,將總體風險最小化
R ( h ) = E x [ R ( h ( x ) ∣ x ) ] R(h)=E_x[R(h(x)|x)] R(h)=Ex[R(h(x)x)]
顯然,對每一個樣本 x x x,若 h h h 能最小化條件風險 R ( h ( x ) ∣ x ) R(h(x)|x) R(h(x)x),則總體風險 R ( h ) R(h) R(h)也將被最小化。這就產生了貝葉斯判定準則:為最小化總體風險,只需在每個樣本上選擇哪個能使條件風險 R ( c ∣ x ) R(c|x) R(cx) 最小的類別標記,即:
h ∗ ( x ) = arg min ⁡ c ∈ y R ( c ∣ x ) h^*(x)=\argmin_{c\in y}R(c|x) h(x)=cyargminR(cx)
此時, h ∗ h^* h被稱為貝葉斯最優分類器,與之對應的總體風險 R ( h ∗ ) R(h^*) R(h) 也被稱為貝葉斯風險。 1 − R ( h ∗ ) 1-R(h^*) 1R(h)反映了分類器所能達到的最好效能。

具體來說,若目標是最小化目標分類錯誤率,則誤判損失 λ y \lambda_y λy 可寫為:
λ y = { 0 , i = j 1 , 其 他 \lambda_y=\left\{ \begin{aligned} 0&, &i=j\\ 1&, &其他 \end{aligned} \right. λy={01,,i=j
此時的條件風險 R ( c ∣ x ) = 1 − P ( c ∣ x ) R(c|x)=1-P(c|x) R(cx)=1P(cx),於是,最小化分類錯誤率的貝葉斯最優分類器為:
h ∗ ( x ) = arg max ⁡ c ∈ y P ( c ∣ x ) h^*(x)=\argmax_{c\in y}P(c|x) h(x)=cyargmaxP(cx)
即對每一個樣本 x x x,選擇能使後驗概率 P ( c ∣ x ) P(c|x) P(cx) 達到最大的類別標記。

通常情況下 P ( c ∣ x ) P(c|x) P(cx) 很難直接獲得,根據貝葉斯定理:
P ( c ∣ x ) = P ( x , c ) P ( x ) = P ( c ) P ( x ∣ c ) P ( x ) P(c|x)=\frac{P(x,c)}{P(x)}=\frac{P(c)P(x|c)}{P(x)} P(cx)=P(x)P(x,c)=P(x)P(c)P(xc)

對上一個公式進行簡化得:
h ∗ ( x ) = arg max ⁡ c ∈ y P ( c ∣ x ) = arg max ⁡ c ∈ y P ( c ) P ( x ∣ c ) P ( x ) = arg max ⁡ c ∈ y P ( c ) P ( x ∣ c ) h^*(x)=\argmax_{c\in y}P(c|x)=\argmax_{c\in y}\frac{P(c)P(x|c)}{P(x)}=\argmax_{c\in y}P(c)P(x|c) h(x)=cyargmaxP(cx)=cyargmaxP(x)P(c)P(xc)=cyargmaxP(c)P(xc)

其中 P ( c ) P(c) P(c)是先驗概率; P ( x ∣ c ) P(x|c) P(xc) 是樣本 x x x 相對於類標記 c c c 的類條件概率,或稱似然(likelihood);對於給定的樣本 x x x P ( x ) P(x) P(x)與類標記無關,即最大值取決於分子則可以去掉分母,所以估計 P ( c ∣ x ) P(c|x) P(cx) 的問題轉化為如何基於訓練資料來估計先驗概率 P ( x ) P(x) P(x) P ( x ∣ c ) P(x|c) P(xc)


3.2、引數估計

通過貝葉斯定理可知,後驗概率=先驗概率x條件概率(即,似然likelihood),那麼,需要通過一定的手段方法去得到這三種不同型別的概率。

先驗概率 P ( c ) P(c) P(c) 表示的是各類樣本在樣本空間內所佔比例,根據大數定律,當樣本集合包含充足的獨立同分布樣本時,可以通過各類樣本出現的頻率來對 P ( c ) P(c) P(c) 進行估計,即頻率=概率。

而對於條件概率 P ( x ∣ c ) P(x|c) P(xc) 估計來說,涉及關於 x x x 所有屬性的聯合概率,如果直接根據樣本出現的頻率來估計則會遇到很多困難。

下面介紹兩種估計法,他們的作用是:

方法作用
極大似然估計求條件概率(似然)
極大後驗估計求後驗概率

3.2.1、極大似然估計(Maximum Likelihood Estimation)

對於條件概率的估計,通常使用以下兩種方法進行估計:

  • 類似於先驗概率,通過統計頻率的方式來計算似然 P ( x ∣ c ) P(x|c) P(xc)。但這種方法涉及到計算各個不同屬性的聯合概率,當屬性值很多且樣本量很大時,估計會很麻煩。
  • 使用極大似然法來進行估計,極大似然估計(ML估計),也稱最大似然估計。極大似然法首先要假定條件概率 P ( x ∣ c ) P(x|c) P(xc) 服從某個分佈,然後基於樣本資料對概率分佈的引數進行估計。但是這種方法的準確性嚴重依賴於假設的分佈,如果假設的分佈符合潛在的真實資料分佈,則效果不錯;否則熊愛國會很糟糕。在現實應用中,這種假設通常需要一定的經驗。

對於極大似然估計,記類別 c c c的條件概率為 P ( x ∣ c ) P(x|c) P(xc),假設對於訓練集中的 N N N 個樣本 X ~ = ( x 1 + x 2 + . . . + x N ) T \widetilde X=(x_1+x_2+...+x_N)^T X =(x1+x2+...+xN)T 可以被引數向量 θ \theta θ 唯一確定,那麼利用訓練集來估計引數,並將 P ( x i ∣ c ) P(x_i|c) P(xic) 記為 P ( x i ∣ c ; θ ) P(x_i|c; \theta) P(xic;θ)。因此對於引數 θ \theta θ 進行極大似然估計,就是在 θ \theta θ 的取值範圍內尋找一組合適的引數使得 P ( x ∣ c ) P(x|c) P(xc) 最大,也就是尋找一組能夠使得資料(x,c)出現的可能性最大的值,即:
θ ^ = arg max ⁡ θ P ( X ~ ∣ θ ) = arg max ⁡ θ ∑ i = 1 N P ( x i ∣ θ ; c ) \widehat{\theta}=\argmax_{\theta}P(\widetilde{X}|\theta)=\argmax_{\theta}\sum^N_{i=1}P(x_i|\theta;c) θ =θargmaxP(X θ)=θargmaxi=1NP(xiθ;c)
由於直接求極大值雖然可行,但是不太方便,所以通常的做法是將似然函式取對數之後再進行極大值的求解,即:
θ ^ = arg max ⁡ θ ∑ i = 1 N log ⁡ P ( x i ∣ θ ; c ) \widehat{\theta}=\argmax_{\theta}\sum^N_{i=1}\log P(x_i|\theta;c) θ =θargmaxi=1NlogP(xiθ;c)

應用例項:
有一個箱子有黑球和白球,數量和比例不知。已知抽一百次,有70次是黑球,30次是白球,估計箱子中球的顏色比例?
根據題目知道是二項分佈,則:假設抽中黑球的概率為 θ \theta θ,每次抽的顏色結果為 X ~ = { x 1 , x 2 , . . . x N } \widetilde{X}=\{x_1,x_2,...x_N\} X ={x1,x2,...xN} c c c表示黑球類別事件,於是,在該模型下的抽取結果,可得似然函式:
P ( X ~ ∣ c ) = P ( x 1 ∣ c ) P ( x 2 ∣ c ) . . . P ( x N ∣ c ) = θ 70 ( 1 − θ ) 30 \begin{aligned} P(\widetilde{X}|c)&=P(x_1|c)P(x_2|c)...P(x_N|c) \\ &=\theta^{70}(1-\theta)^{30} \end{aligned} P(X c)=P(x1c)P(x2c)...P(xNc)=θ70(1θ)30
根據上面的公式,取對數,求極大值得:
log ⁡ P ( X ~ ∣ c ) = 70 log ⁡ θ × 30 log ⁡ ( 1 − θ ) ∂ log ⁡ P ( X ~ ∣ c ) ∂ θ = 70 θ − 30 1 − θ \begin{aligned} \log P(\widetilde{X}|c)&=70\log{\theta} \times{30\log{(1-\theta)}}\\ \frac{\partial\log{P(\widetilde{X}|c)}}{\partial{\theta}}&=\frac{70}{\theta}-\frac{30}{1-\theta} \end{aligned} logP(X c)θlogP(X c)=70logθ×30log(1θ)=θ701θ30
因為:
∂ log ⁡ P ( X ~ ∣ c ) ∂ θ = 0 \begin{aligned} \frac{\partial\log{P(\widetilde{X}|c)}}{\partial{\theta}}&=0 \end{aligned} θlogP(X c)=0
則:
70 θ − 30 1 − θ = 0 \begin{aligned} \frac{70}{\theta}-\frac{30}{1-\theta}=0 \end{aligned} θ701θ30=0
所以:
θ = 70 % \begin{aligned} \theta=70\% \end{aligned} θ=70%
即取出黑球的概率為70%,取出白球的概率為30%

極大似然估計視待估計引數為一個未知但固定的量,不考慮觀察者的影響,即不考慮先驗知識的影響,是傳統的頻率學派做法。


3.2.2、極大後驗估計(Maximum A Posteriori Estimation)

極大後驗估計更貼合貝葉斯學派思想的做法,也有不少人稱其為“貝葉斯估計”。

後驗概率 P ( c ∣ X ~ ) P(c|\widetilde X) P(cX ),可以理解為引數 θ \theta θ 在訓練集 X ~ \widetilde X X 下所謂“真實出現的概率”,能夠利用引數的先驗概率 P ( θ ) P(\theta) P(θ)、樣本的先驗概率 P ( X ~ ) P(\widetilde{X}) P(X ) 和條件概率 P ( X ~ ∣ c ) = ∏ i = 1 N P ( x i ∣ θ ) P(\widetilde{X}|c)=\prod_{i=1}^NP(x_i|\theta) P(X c)=i=1NP(xiθ)通過貝葉斯匯出。

MAP估計的核心思想,就是將待估引數 θ \theta θ 看成隨機變數,從而引入了極大似然估計裡沒有引入的、引數 θ \theta θ 的先驗分佈。MAP估計 θ ^ M A P \widehat{\theta}_{MAP} θ MAP 的定義為:
θ ^ M A P = arg max ⁡ θ P ( θ ∣ X ~ ) = arg max ⁡ θ P ( θ ) ∏ i = 0 N P ( x i ∣ θ ) \widehat{\theta}_{MAP}=\argmax_\theta P(\theta|\widetilde X)=\argmax_\theta P(\theta) \prod_{i=0}^{N}P(x_i|\theta) θ MAP=θargmaxP(θX )=θargmaxP(θ)i=0NP(xiθ)
同樣為了計算簡捷,通常對上式取對數:
θ ^ M A P = arg max ⁡ θ log ⁡ P ( θ ∣ X ~ ) = arg max ⁡ θ P ( θ ) [ log ⁡ P ( θ ) + ∑ i = 1 N log ⁡ P ( x i ∣ θ ) ] \widehat{\theta}_{MAP}=\argmax_\theta \log P(\theta|\widetilde X)=\argmax_\theta P(\theta) [\log{P(\theta)}+\sum_{i=1}^{N}\log P(x_i|\theta)] θ MAP=θargmaxlogP(θX )=θargmaxP(θ)[logP(θ)+i=1NlogP(xiθ)]

從形式上看,極大後驗概率估計只比極大似然估計多了 log ⁡ P ( θ ) \log P(\theta) logP(θ) 這一項,不過他們背後的思想卻相當不同。

然而,有意思的是,樸素貝葉斯演算法在估計引數時,選了極大似然估計法,但是在做決策時則選擇了MAP。

和極大似然估計相比,MAP的一個顯著優勢在於它可以引入所謂的“先驗知識”,這正是貝葉斯學派的精髓。然而這個優勢也伴隨著劣勢,它要求我們對模型引數有相對較好的認知,否則會相當大的影響到結果的合理性。

既然先驗分佈如此重要,那麼是否有比較合理的、先驗分佈的選取方法呢?事實上,如何確定先驗分佈這個問題,正是貝葉斯統計中最困難、最具有爭議卻又必須解決的問題。雖然這個問題有很多現代的研究成果,但是遺憾的是,尚未能有一個圓滿的理論和普適的方法。這裡擬介紹“協調性假說”這個比較直觀、容易理解的理論。

  • 我們選擇的引數 θ \theta θ 的先驗分佈,應該與由它和訓練集確定的後驗分佈屬於同一型別。

此時先驗分佈又叫共軛先驗分佈。這裡面所謂的“同一型別”其實又是難有恰當定義的概念,但是可以直觀的理解為:概率性質相似的所有分佈歸為“同一型別”。比如所有的正態分佈都是“同一型別”的。


3.3、樸素貝葉斯


3.3.1、模型的計算

樸素貝葉斯分類器(native Bayes classifier)採用了“屬性條件獨立性假設”(attribute conditional independence assumption):對已知類別,假設所有屬性相互獨立,即每個屬性(特徵變數)獨立地對分類結果(決策變數)發生影響。

基於屬性條件獨立假設,貝葉斯公式可以重寫為:

P ( c ∣ x ) = P ( x ) P ( x ∣ c ) P ( x ) = P ( c ) P ( x ) ∏ i = 1 n P ( x i ∣ c ) \begin{aligned} P(c|x)=\frac{P(x)P(x|c)}{P(x)}=\frac{P(c)}{P(x)}\prod_{i=1}^nP(x_i|c) \end{aligned} P(cx)=P(x)P(x)P(xc)=P(x)P(c)i=1nP(xic)
其中 n n n 為屬性數目, x i x_i xi x x x 在第 i i i 個屬性上的取值,如:天氣=晴。

由於對所有類別來說, P ( x ) P(x) P(x) 相同,因此貝葉斯判定準則有:
h n b ( x ) = arg max ⁡ c ∈ y P ( c ) ∏ i = 1 n P ( x i ∣ c ) \begin{aligned} h_{nb}(x)=\argmax_{c\in y}P(c)\prod_{i=1}^nP(x_i|c) \end{aligned} hnb(x)=cyargmaxP(c)i=1nP(xic)
這就是樸素貝葉斯分類器表示式,其訓練過程是基於訓練集 D D D 來估計類先驗概率 P ( c ) P(c) P(c),併為每個屬性估計條件概率 P ( x i ∣ c ) P(x_i|c) P(xic)

(1)先驗概率的計算
在訓練集 D D D 中,第 c c c 類樣本組成的集合為 D c D_c Dc,若有充足的獨立同分布樣本,則可以容易地估計先驗概率 P ( c ) = ∣ D c ∣ ∣ D ∣ P(c)=\frac{|D_c|}{|D|} P(c)=DDc

(2)條件概率的計算

  • 對離散屬性而言,令 D c , x i D_{c,x_i} Dc,xi 表示 D c D_c Dc 在第 i i i 個屬性上取值為 x i x_i xi 的樣本組成的集合,則條件概率 P ( x i ) ∣ c P(x_i)|c P(xi)c 可估計為: P ( x i ∣ c ) = ∣ D c , x i ∣ ∣ D c ∣ P(x_i|c)=\frac{|D_{c,x_i}|}{|D_c|} P(xic)=DcDc,xi

  • 對連續屬性,通常先將屬性特徵 x i x_i xi 離散化,然後計算屬於類 c c c 的訓練樣本落在 x i x_i xi 對應離散區間比例估計 P ( x i ∣ c ) P(x_i|c) P(xic)。也可假設 P ( x i ∣ c ) P(x_i|c) P(xic) 的概率分佈,即似然函式(Likelihood Function),如正態分佈,可考慮概率密度函式,假定 P ( c i ∣ c ) P(c_i|c) P(cic)~ N ( μ c , i , σ c , i 2 ) N(\mu_{c,i}, \sigma^2_{c,i}) N(μc,i,σc,i2),其中 μ c , i \mu_{c,i} μc,i σ c , i 2 \sigma_{c,i}^2 σc,i2分別是第 c c c 類樣本在第 i i i 個屬性上取值的均值和方差,則有: P ( c i ∣ c ) = 1 2 π σ c , i exp ⁡ ( − ( x i − μ c , i ) 2 2 σ c , i 2 ) P(c_i|c)=\frac{1}{\sqrt{2\pi}\sigma_{c,i}}\exp(-\frac{(x_i-\mu_{c,i})^2}{2\sigma^2_{c,i}}) P(cic)=2π σc,i1exp(2σc,i2(xiμc,i)2)

  • 而在 P ( x i ∣ c ) = 0 P(x_i|c)=0 P(xic)=0 的時候,該概率與其他概率相乘的時候會把其他概率覆蓋,因此需要引入 L a p l a c e Laplace Laplace 修正。做法是對所有類別下的劃分計數都加一,從而避免了等於零的情況出現,並且在訓練集較大時,修正對先驗的影響也會降低到可以忽略不計。


3.3.2、模型的應用流程

樸素貝葉斯是一種有監督的分類演算法,輸入同樣為樣本特徵值向量,以及對應的類標籤,輸出則為具有高分類功能的模型,能夠根據輸入的特徵值預測分類結果。

輸入輸出
向量X-樣本的多種特徵資訊值,向量Y-對應的結果數值預測模型,為線性函式。用法:輸入待預測的向量X,輸出預測結果向量Y

主要分為三個階段:

  1. 分類器準備階段。這一階段主要是對問題進行特徵提取,建立問題的特徵向量,並對其進行一定的劃分,形成訓練樣本,這些工作主要由人工完成,完成質量對整個分類器的質量有著決定性的影響。
  2. 分類器訓練階段。根據上述分析中的公式,計算每個類別在訓練樣本中的出現頻率,以及每個特徵對每個類別的條件概率,最終獲得分類器。
  3. 分類器應用階段。該階段會將待分配項輸入分類器中,利用上述的公式自動進行分類。比較不同類別的後驗概率,哪個概率值最大就作為預測值輸出。

3.3.3、模型的特點

特點說明
模型結構簡單,演算法易於實現由於特徵變數間的相互獨立
演算法有穩定的分類效率不同特點的資料集其分類效能差別不大
資料集上的優勢小規模資料集上表現優秀,分類過程時空開銷小
演算法適合增量式訓練在資料量較大時,可以人為劃分後,分批增量訓練
運用領域常用於垃圾郵件分類,以及其他文字分類,比如該新聞是屬於時事、體育還是娛樂等
缺點1對樣本的特徵維度作了“彼此獨立”的假設,只有在獨立性假定成立或在特徵變數相關性較小的情況下才能獲得近似最優的分類效果,這限制了樸素貝葉斯分類的使用
缺點2需要先知道先驗概率,而它很多時候不能準確知道,往往使用假設值代替,這也會導致分類誤差的增大

3.3.4、模型的使用案例

如下西瓜資料集3.0(西瓜書P84)

編號色澤根蒂敲聲紋理臍部觸感密度含糖率好瓜
1青綠蜷縮濁響清晰凹陷硬滑0.6970.460
2烏黑蜷縮沉悶清晰凹陷硬滑0.7740.376
3烏黑蜷縮濁響清晰凹陷硬滑0.6340.264
4青綠蜷縮沉悶清晰凹陷硬滑0.6080.318
5淺白蜷縮濁響清晰凹陷硬滑0.5560.215
6青綠稍蜷濁響清晰稍凹軟粘0.4030.237
7烏黑稍蜷濁響稍糊稍凹軟粘0.4810.149
8烏黑稍蜷濁響清晰稍凹硬滑0.4370.211
9烏黑稍蜷沉悶稍糊稍凹硬滑0.6660.091
10青綠硬挺清脆清晰平坦軟粘0.2430.267
11淺白硬挺清脆模糊平坦硬滑0.2450.057
12淺白蜷縮濁響模糊平坦軟粘0.3430.099
13青綠稍蜷濁響稍糊凹陷硬滑0.6390.161
14淺白稍蜷沉悶稍糊凹陷硬滑0.6570.198
15烏黑稍蜷濁響清晰稍凹軟粘0.3600.370
16淺白蜷縮濁響模糊平坦硬滑0.5930.042
17青綠蜷縮沉悶稍糊稍凹硬滑0.7190.103

使用該資料集訓練一個樸素貝葉斯分類器,對下列“測1”進行分類:(西瓜書P151)

編號色澤根蒂敲聲紋理臍部觸感密度含糖率好瓜
測1青綠蜷縮濁響清晰凹陷硬滑0.6970.460?

(1)計算類先驗概率
根據最後一列屬性標籤來估計先驗概率 P ( c ) P(c) P(c),顯然有:
P ( 好 瓜 = 是 ) = 8 17 ≈ 0.471 P ( 好 瓜 = 否 ) = 9 17 ≈ 0.529 \begin{aligned} P(好瓜=是)=\frac{8}{17}\approx0.471\\ P(好瓜=否)=\frac{9}{17}\approx0.529 \end{aligned} P(=)=1780.471P(=)=1790.529

(2)計算條件概率
對於離散型屬性:

屬性數量
色澤3{青綠、烏黑、淺白}
根蒂3{蜷縮、稍蜷、硬挺}
敲聲3{濁響、沉悶、清脆}
紋理3{清晰、稍糊、模糊}
臍部3{凹陷、稍凹、平坦}
觸感2{硬滑、軟粘}

根據其他列屬性來估計條件概率 P ( x i ∣ c ) P(x_i|c) P(xic):
離散型屬性(直接計算該特徵值在該特徵中所佔比例)
P 青 綠 ∣ 是 = P ( 色 澤 = 青 綠 ∣ 好 瓜 = 是 ) = 3 8 = 0.375 P 青 綠 ∣ 否 = P ( 色 澤 = 青 綠 ∣ 好 瓜 = 否 ) = 3 9 ≈ 0.333 P 蜷 縮 ∣ 是 = P ( 根 蒂 = 蜷 縮 ∣ 好 瓜 = 是 ) = 5 8 = 0.625 P 蜷 縮 ∣ 否 = P ( 根 蒂 = 蜷 縮 ∣ 好 瓜 = 否 ) = 3 9 ≈ 0.333 P 濁 響 ∣ 是 = P ( 敲 聲 = 濁 響 ∣ 好 瓜 = 是 ) = 6 8 = 0.750 P 濁 響 ∣ 否 = P ( 敲 聲 = 濁 響 ∣ 好 瓜 = 否 ) = 4 9 ≈ 0.444 P 清 晰 ∣ 是 = P ( 紋 理 = 清 晰 ∣ 好 瓜 = 是 ) = 7 8 = 0.875 P 清 晰 ∣ 否 = P ( 紋 理 = 清 晰 ∣ 好 瓜 = 否 ) = 2 9 ≈ 0.222 P 凹 陷 ∣ 是 = P ( 臍 部 = 凹 陷 ∣ 好 瓜 = 是 ) = 6 8 = 0.750 P 凹 陷 ∣ 否 = P ( 臍 部 = 凹 陷 ∣ 好 瓜 = 否 ) = 2 9 ≈ 0.222 P 硬 滑 ∣ 是 = P ( 觸 感 = 硬 滑 ∣ 好 瓜 = 是 ) = 6 8 = 0.750 P 硬 滑 ∣ 否 = P ( 觸 感 = 硬 滑 ∣ 好 瓜 = 否 ) = 6 9 ≈ 0.667 \begin{aligned} P_{青綠|是}=P(色澤=青綠|好瓜=是)=\frac{3}{8}=0.375\\ P_{青綠|否}=P(色澤=青綠|好瓜=否)=\frac{3}{9}\approx0.333\\ P_{蜷縮|是}=P(根蒂=蜷縮|好瓜=是)=\frac{5}{8}=0.625\\ P_{蜷縮|否}=P(根蒂=蜷縮|好瓜=否)=\frac{3}{9}\approx0.333\\ P_{濁響|是}=P(敲聲=濁響|好瓜=是)=\frac{6}{8}=0.750\\ P_{濁響|否}=P(敲聲=濁響|好瓜=否)=\frac{4}{9}\approx0.444\\ P_{清晰|是}=P(紋理=清晰|好瓜=是)=\frac{7}{8}=0.875\\ P_{清晰|否}=P(紋理=清晰|好瓜=否)=\frac{2}{9}\approx0.222\\ P_{凹陷|是}=P(臍部=凹陷|好瓜=是)=\frac{6}{8}=0.750\\ P_{凹陷|否}=P(臍部=凹陷|好瓜=否)=\frac{2}{9}\approx0.222\\ P_{硬滑|是}=P(觸感=硬滑|好瓜=是)=\frac{6}{8}=0.750\\ P_{硬滑|否}=P(觸感=硬滑|好瓜=否)=\frac{6}{9}\approx0.667\\ \end{aligned} P=P(==)=83=0.375P=P(==)=930.333P=P(==)=85=0.625P=P(==)=930.333P=P(==)=86=0.750P=P(==)=940.444P=P(==)=87=0.875P=P(==)=920.222P=P(==)=86=0.750P=P(==)=920.222P=P(==)=86=0.750P=P(==)=960.667

連續型屬性:
(1)密度|是:

均值:
μ c , i = 0.697 + 0.774 + 0.634 + 0.608 + 0.556 + 0.403 + 0.481 + 0.437 8 = 0.57375 ≈ 0.574 \mu_{c,i}=\frac{0.697+0.774+0.634+0.608+0.556+0.403+0.481+0.437}{8}=0.57375\approx0.574 μc,i=80.697+0.774+0.634+0.608+0.556+0.403+0.481+0.437=0.573750.574

方差:
σ c , i 2 = ( 0.697 − 0.574 ) 2 + ( 0.774 − 0.574 ) 2 + ( 0.634 − 0.574 ) 2 + ( 0.608 − 0.574 ) 2 + ( 0.556 − 0.574 ) 2 + ( 0.403 − 0.574 ) 2 + ( 0.481 − 0.574 ) 2 + ( 0.437 − 0.574 ) 2 8 = 0.015129 + 0.04 + 0.0036 + 0.001156 + 0.000324 + 0.029241 + 0.008649 + 0.018769 8 = 0.116868 8 = 0.0146085 ≈ 0.12 1 2 \sigma^2_{c,i}=\frac{(0.697-0.574)^2+(0.774-0.574)^2+(0.634-0.574)^2+(0.608-0.574)^2+(0.556-0.574)^2+(0.403-0.574)^2+(0.481-0.574)^2+(0.437-0.574)^2}{8}=\frac{0.015129+0.04+0.0036+0.001156+0.000324+0.029241+0.008649+0.018769}{8}=\frac{0.116868}{8}=0.0146085\approx0.121^2 σc,i2=8(0.6970.574)2+(0.7740.574)2+(0.6340.574)2+(0.6080.574)2+(0.5560.574)2+(0.4030.574)2+(0.4810.574)2+(0.4370.574)2=80.015129+0.04+0.0036+0.001156+0.000324+0.029241+0.008649+0.018769=80.116868=0.01460850.1212
σ = 0.121 \sigma=0.121 σ=0.121

P 密 度 : 0.697 ∣ 是 = P ( 密 度 = 0.697 ∣ 好 瓜 = 是 ) = 1 2 π × 0.121 exp ⁡ ( − ( 0.697 − 0.574 ) 2 2 × 0.12 1 2 ) ≈ 1.967 \begin{aligned} P_{密度:0.697|是}=P(密度=0.697|好瓜=是)=\frac{1}{\sqrt{2\pi}\times{0.121}}\exp(-\frac{(0.697-0.574)^2}{2\times{0.121^2}})\approx1.967 \end{aligned} P:0.697=P(=0.697=)=2π ×0.1211exp(2×0.1212(0.6970.574)2)1.967

(2)密度|否

均值:
μ c , i = 0.666 + 0.243 + 0.245 + 0.343 + 0.639 + 0.657 + 0.360 + 0.593 + 0.719 9 = 0.4961111111 ≈ 0.496 \mu_{c,i}=\frac{0.666+0.243+0.245+0.343+0.639+0.657+0.360+0.593+0.719}{9}=0.4961111111\approx0.496 μc,i=90.666+0.243+0.245+0.343+0.639+0.657+0.360+0.593+0.719=0.49611111110.496

方差:
σ c , i 2 = ( 0.666 − 0.496 ) 2 + ( 0.243 − 0.496 ) 2 + ( 0.245 − 0.496 ) 2 + ( 0.343 − 0.496 ) 2 + ( 0.639 − 0.496 ) 2 + ( 0.657 − 0.496 ) 2 + ( 0.360 − 0.496 ) 2 + ( 0.593 − 0.496 ) 2 + ( 0.719 − 0.496 ) 2 9 = 0.0289 + 0.064009 + 0.063001 + 0.023409 + 0.020449 + 0.025921 + 0.018496 + 0.009409 + 0.049729 9 = 0.303323 9 ≈ 0.034 = 0.18 4 2 \sigma^2_{c,i}=\frac{(0.666-0.496)^2+(0.243-0.496)^2+(0.245-0.496)^2+(0.343-0.496)^2+(0.639-0.496)^2+(0.657-0.496)^2+(0.360-0.496)^2+(0.593-0.496)^2+(0.719-0.496)^2}{9}=\frac{0.0289+0.064009+0.063001+0.023409+0.020449+0.025921+0.018496+0.009409+0.049729}{9}=\frac{0.303323}{9}\approx0.034=0.184^2 σc,i2=9(0.6660.496)2+(0.2430.496)2+(0.2450.496)2+(0.3430.496)2+(0.6390.496)2+(0.6570.496)2+(0.3600.496)2+(0.5930.496)2+(0.7190.496)2=90.0289+0.064009+0.063001+0.023409+0.020449+0.025921+0.018496+0.009409+0.049729=90.3033230.034=0.1842
σ = 0.184 \sigma=0.184 σ=0.184

P 密 度 : 0.697 ∣ 否 = P ( 密 度 = 0.697 ∣ 好 瓜 = 否 ) = 1 2 π × 0.184 exp ⁡ ( − ( 0.697 − 0.496 ) 2 2 × 0.18 4 2 ) ≈ 1.193 \begin{aligned} P_{密度:0.697|否}=P(密度=0.697|好瓜=否)=\frac{1}{\sqrt{2\pi}\times{0.184}}\exp(-\frac{(0.697-0.496)^2}{2\times{0.184^2}})\approx1.193 \end{aligned} P:0.697=P(=0.697=)=2π ×0.1841exp(2×0.1842(0.6970.496)2)1.193

(3)含糖率|是

均值:
μ c , i = 0.460 + 0.376 + 0.264 + 0.318 + 0.215 + 0.237 + 0.149 + 0.211 8 = 2.23 8 = 0.27875 ≈ 0.279 \mu_{c,i}=\frac{0.460+0.376+0.264+0.318+0.215+0.237+0.149+0.211}{8}=\frac{2.23}{8}=0.27875\approx0.279 μc,i=80.460+0.376+0.264+0.318+0.215+0.237+0.149+0.211=82.23=0.278750.279

方差:
σ c , i 2 = ( 0.460 − 0.279 ) 2 + ( 0.376 − 0.279 ) 2 + ( 0.264 − 0.279 ) 2 + ( 0.318 − 0.279 ) 2 + ( 0.215 − 0.279 ) 2 + ( 0.237 − 0.279 ) 2 + ( 0.149 − 0.279 ) 2 + ( 0.211 − 0.279 ) 2 8 = 0.032761 + 0.009409 + 0.000225 + 0.001521 + 0.004096 + 0.001764 + 0.0169 + 0.004624 8 = 0.0713 8 = 0.0089125 ≈ 0.09 4 2 \sigma^2_{c,i}=\frac{(0.460-0.279)^2+(0.376-0.279)^2+(0.264-0.279)^2+(0.318-0.279)^2+(0.215-0.279)^2+(0.237-0.279)^2+(0.149-0.279)^2+(0.211-0.279)^2}{8}=\frac{0.032761+0.009409+0.000225+0.001521+0.004096+0.001764+0.0169+0.004624}{8}=\frac{0.0713}{8}=0.0089125\approx0.094^2 σc,i2=8(0.4600.279)2+(0.3760.279)2+(0.2640.279)2+(0.3180.279)2+(0.2150.279)2+(0.2370.279)2+(0.1490.279)2+(0.2110.279)2=80.032761+0.009409+0.000225+0.001521+0.004096+0.001764+0.0169+0.004624=80.0713=0.00891250.0942
σ = 0.094 \sigma=0.094 σ=0.094

P 含 糖 : 0.460 ∣ 是 = P ( 密 度 = 0.460 ∣ 好 瓜 = 是 ) = 1 2 π × 0.094 exp ⁡ ( − ( 0.460 − 0.279 ) 2 2 × 0.09 4 2 ) ≈ 0.665 \begin{aligned} P_{含糖:0.460|是}=P(密度=0.460|好瓜=是)=\frac{1}{\sqrt{2\pi}\times{0.094}}\exp(-\frac{(0.460-0.279)^2}{2\times{0.094^2}})\approx0.665 \end{aligned} P:0.460=P(=0.460=)=2π ×0.0941exp(2×0.0942(0.4600.279)2)0.665

(4)含糖率|否

均值:
μ c , i = 0.091 + 0.267 + 0.057 + 0.099 + 0.161 + 0.198 + 0.370 + 0.042 + 0.103 9 = 1.388 9 = 0.1542222 ≈ 0.154 \mu_{c,i}=\frac{0.091+0.267+0.057+0.099+0.161+0.198+0.370+0.042+0.103}{9}=\frac{1.388}{9}=0.1542222\approx0.154 μc,i=90.091+0.267+0.057+0.099+0.161+0.198+0.370+0.042+0.103=91.388=0.15422220.154

方差:
σ c , i 2 = ( 0.091 − 0.154 ) 2 + ( 0.267 − 0.154 ) 2 + ( 0.057 − 0.154 ) 2 + ( 0.099 − 0.154 ) 2 + ( 0.161 − 0.154 ) 2 + ( 0.198 − 0.154 ) 2 + ( 0.370 − 0.154 ) 2 + ( 0.042 − 0.154 ) 2 + ( 0.103 − 0.154 ) 2 9 = 0.003969 + 0.012769 + 0.009409 + 0.003025 + 0.000049 + 0.001936 + 0.046656 + 0.012544 + 0.002601 9 = 0.092958 9 ≈ 0.10 2 2 \sigma^2_{c,i}=\frac{(0.091-0.154)^2+(0.267-0.154)^2+(0.057-0.154)^2+(0.099-0.154)^2+(0.161-0.154)^2+(0.198-0.154)^2+(0.370-0.154)^2+(0.042-0.154)^2+(0.103-0.154)^2}{9}=\frac{0.003969+0.012769+0.009409+0.003025+0.000049+0.001936+0.046656+0.012544+0.002601}{9}=\frac{0.092958}{9}\approx0.102^2 σc,i2=9(0.0910.154)2+(0.2670.154)2+(0.0570.154)2+(0.0990.154)2+(0.1610.154)2+(0.1980.154)2+(0.3700.154)2+(0.0420.154)2+(0.1030.154)2=90.003969+0.012769+0.009409+0.003025+0.000049+0.001936+0.046656+0.012544+0.002601=90.0929580.1022
σ = 0.102 \sigma=0.102 σ=0.102

P 含 糖 : 0.460 ∣ 否 = P ( 含 糖 = 0.460 ∣ 好 瓜 = 否 ) = 1 2 π × 0.102 exp ⁡ ( − ( 0.460 − 0.154 ) 2 2 × 0.10 2 2 ) ≈ 0.043 \begin{aligned} P_{含糖:0.460|否}=P(含糖=0.460|好瓜=否)=\frac{1}{\sqrt{2\pi}\times{0.102}}\exp(-\frac{(0.460-0.154)^2}{2\times{0.102^2}})\approx0.043 \end{aligned} P:0.460=P(=0.460=)=2π ×0.1021exp(2×0.1022(0.4600.154)2)0.043

於是有:
P ( 好 瓜 = 是 ) × P ( 青 綠 ∣ 是 ) × P ( 蜷 縮 ∣ 是 ) × P ( 濁 響 ∣ 是 ) × P ( 清 晰 ∣ 是 ) × P ( 凹 陷 ∣ 是 ) × P ( 硬 滑 ∣ 是 ) × P ( 密 度 : 0.697 ∣ 是 ) × P ( 含 糖 : 0.460 ∣ 是 ) = 0.471 × 0.375 × 0.625 × 0.750 × 0.875 × 0.750 × 0.750 × 1.967 × 0.665 ≈ 0.053 P(好瓜=是)\times P(青綠|是)\times P(蜷縮|是)\times P(濁響|是) \times P(清晰|是)\times P(凹陷|是)\times P(硬滑|是)\times P(密度:0.697|是)\times P(含糖:0.460|是)=0.471\times0.375\times0.625\times 0.750\times 0.875\times 0.750\times 0.750\times 1.967\times 0.665 \approx0.053 P(=)×P()×P()×P()×P()×P()×P()×P(:0.697)×P(:0.460)=0.471×0.375×0.625×0.750×0.875×0.750×0.750×1.967×0.6650.053

P ( 好 瓜 = 否 ) × P ( 青 綠 ∣ 否 ) × P ( 蜷 縮 ∣ 否 ) × P ( 濁 響 ∣ 否 ) × P ( 清 晰 ∣ 否 ) × P ( 凹 陷 ∣ 否 ) × P ( 硬 滑 ∣ 否 ) × P ( 密 度 : 0.697 ∣ 否 ) × P ( 含 糖 : 0.460 ∣ 否 ) = 0.529 × 0.333 × 0.333 × 0.444 × 0.222 × 0.222 × 0.667 × 1.193 × 0.043 ≈ 4.39 × 1 0 − 5 P(好瓜=否)\times P(青綠|否)\times P(蜷縮|否)\times P(濁響|否) \times P(清晰|否)\times P(凹陷|否)\times P(硬滑|否)\times P(密度:0.697|否)\times P(含糖:0.460|否)=0.529\times 0.333\times0.333\times0.444\times 0.222\times 0.222\times 0.667\times 1.193\times 0.043\approx4.39\times 10^{-5} P(=)×P()×P()×P()×P()×P()×P()×P(:0.697)×P(:0.460)=0.529×0.333×0.333×0.444×0.222×0.222×0.667×1.193×0.0434.39×105

由於 0.053 > 4.39 × 1 0 − 5 0.053\gt 4.39\times 10^{-5} 0.053>4.39×105,因此樸素貝葉斯分類器將測試樣本“測1”判別為“好瓜”。


Laplace拉普拉斯修正

若測試集某一個屬性值在訓練集中沒有與之對應的類,如“敲聲=清脆”屬性,沒有“好瓜=是”的分類,則會出現該屬性下條件概率為0的情況:
P ( 清 脆 ∣ 是 ) = P ( 敲 聲 = 清 脆 ∣ 好 瓜 = 是 ) = 0 8 = 0 P(清脆|是)=P(敲聲=清脆|好瓜=是)=\frac{0}{8}=0 P()=P(==)=80=0

隨後無論是其他屬性的條件概率值為多少,由於連乘其結果都會為0,即最小(概率無負數),會被分為“好瓜=否”,這樣顯然不太合理。

為了避免其他屬性攜帶的資訊被訓練集中未出現的屬性值“抹去”,在估計概率值時,通常要進行“平滑”(smoothing),常用“拉普拉斯修正”(Laplacian correction)。具體來說,令 N N N 表示訓練集 D D D 中可能的類別數, N i N_i Ni 表示第 i i i 個屬性可能的取值,則前面先驗概率和條件概率可以被修正為:

P ^ ( c ) = ∣ D c ∣ + 1 ∣ D ∣ + N \widehat P(c)=\frac{|D_c|+1}{|D|+N} P (c)=D+NDc+1

P ^ ( x i ∣ c ) = ∣ D c i x i ∣ + 1 ∣ D c ∣ + N i \widehat P(x_i|c)=\frac{|D_{c_ix_i}|+1}{|D_{c}|+N_i} P (xic)=Dc+NiDcixi+1

於是本例子中,先驗概率可估計為:
P ^ ( 好 瓜 = 是 ) = 8 + 1 17 + 2 ≈ 0.474 \widehat P(好瓜=是)=\frac{8+1}{17+2}\approx0.474 P (=)=17+28+10.474
P ^ ( 好 瓜 = 否 ) = 9 + 1 17 + 2 ≈ 0.526 \widehat P(好瓜=否)=\frac{9+1}{17+2}\approx0.526 P (=)=17+29+10.526

類似的,條件概率可估計為:
P ^ 青 綠 ∣ 是 = P ^ ( 色 澤 = 青 綠 ∣ 好 瓜 = 是 ) = 3 + 1 8 + 3 ≈ 0.364 \widehat P_{青綠|是}=\widehat P(色澤=青綠|好瓜=是)=\frac{3+1}{8+3}\approx 0.364 P =P (==)=8+33+10.364
P ^ 青 綠 ∣ 否 = P ^ ( 色 澤 = 青 綠 ∣ 好 瓜 = 否 ) = 3 + 1 9 + 3 ≈ 0.333 \widehat P_{青綠|否}=\widehat P(色澤=青綠|好瓜=否)=\frac{3+1}{9+3}\approx 0.333 P =P (==)=9+33+10.333

其餘的類似,並且上面提到的概率 P 清 脆 ∣ 是 P_{清脆|是} P 可估計為:
P ^ 清 脆 ∣ 是 = P ^ ( 敲 聲 = 清 脆 ∣ 好 瓜 = 是 ) = 0 + 1 8 + 3 ≈ 0.091 \widehat P_{清脆|是}=\widehat P(敲聲=清脆|好瓜=是)=\frac{0+1}{8+3}\approx 0.091 P =P (==)=8+30+10.091

拉普拉斯修正實質上假設了屬性值與類別均勻分佈,這是在樸素貝葉斯學過程中額外引入的的關於資料的先驗。顯然拉普拉斯修正避免了因訓練樣本不充分而導致概率估計值為0的問題,並且在訓練值變大時,修正過程所引入的先驗(prior)的影響也會逐漸變得可忽略,使得估值趨向於實際概率值。

在現實任務中,樸素貝葉斯分類器有多種使用方法。例如:

  • 若任務對預測速度要求較高,則對給定訓練集,可將樸素貝葉斯分類器設計的所有概率估值事先計算好儲存起來,這樣在進行預測時只需“查表”即可進行判別。
  • 若任務資料更替頻繁,則可採用“懶惰學習”(lazy learning)(如KNN為代表)方式,先不進行任何訓練,待收到預測請求時,再根據當前資料集進行概率估值。
  • 若資料不斷增加,則可在現有估值基礎上,僅對新增樣本的屬性值所涉及的概率估值進行計數修正即可實現增量學習。

3.3.5、在Python中使用樸素貝葉斯分類演算法

原理回顧:
貝葉斯分類器是基於下面的公式工作的:
P ( y ∣ x 1 , x 2 , . . . , x j ) = P ( x 1 , . . . x j ∣ y ) P ( y ) P ( x 1 , x 2 , . . . x j ) P(y|x_1,x_2,...,x_j)=\frac{P(x_1,...x_j|y)P(y)}{P(x_1,x_2,...x_j)} P(yx1,x2,...,xj)=P(x1,x2,...xj)P(x1,...xjy)P(y)
其中:
P ( y ∣ x 1 , x 2 , . . . , x j ) P(y|x_1,x_2,...,x_j) P(yx1,x2,...,xj) - 後驗概率 。一個觀察值在其 j j j 個特徵是 x 1 , x 2 , . . . , x j x_1,x_2,...,x_j x1,x2,...,xj 的情況下,它的分類是類別 y y y 的概率。
P ( x 1 , x 2 , . . . , x j ∣ y ) P(x_1,x_2,...,x_j|y) P(x1,x2,...,xjy) - 似然概率 。給定觀測值的分類 y y y,其特徵是 x 1 , x 2 , . . . , x j x_1,x_2,...,x_j x1,x2,...,xj 的概率。
P ( y ) P(y) P(y) - 先驗概率 。檢視數居前對於分類 y y y 出現概率的猜測。
P ( x 1 , x 2 , . . . , x j ) P(x_1,x_2,...,x_j) P(x1,x2,...,xj) - 邊緣概率 。 j j j 個特徵同時出現的概率。

模型的介紹:
安裝 scikit-learn:

python -m pip install scikit-learn

注意numpy需要1.19.3版本,否則為1.19.4新版會報錯(2020年測),此時:

python -m pip install numpy==1.19.3

在Scikit-Learn中,基於貝葉斯這一大類的演算法模型的相關庫都在sklearn.native_bayes包之中。根據似然度計算方法不同,樸素貝葉斯分成幾個具體的演算法分支:

演算法運用使用場景
伯努利樸素貝葉斯(BernoulliNB)特徵變數是布林變數,符合0/1分佈,在文件分類中特徵是單詞否出現文字分類
多項式樸素貝葉斯(MultinomialNB)特徵變數是離散變數,符合多項分佈,在文件分類中,特徵變數體現在一個單詞出現的次數,或者是單詞的TF-IDF值等文字分類,使用詞袋或者TF-IDF方法
高斯貝葉斯(GaussianNB)特徵變數是連續變數,符合高斯分佈,比如人的身高,物體的長度文字分類

多項式模型樸素貝葉斯伯努利模型樸素貝葉斯常用在文字分類問題中,高斯分佈的樸素貝葉斯主要用於連續變數中,且假設連續變數是服從正太分佈的。


3.3.5.1 伯努利樸素貝葉斯

說明:
目標資料特徵概率分佈:多重伯努利分佈,即有多個特徵,但每個特徵都假設是一個二元(Bernoulli, boolean)變數。

這類演算法要求樣本以二元值特徵向量表示;如果樣本含有其他型別的資料,一個BernoulliNB例項會將其二值化(取決於binarize引數)。

伯努利樸素貝葉斯的決策規則基於:
在這裡插入圖片描述

與多項分佈樸素貝葉斯的規則不同 伯努利樸素貝葉斯明確地懲罰類 y 中沒有出現作為預測因子的特徵 i ,而多項分佈分佈樸素貝葉斯只是簡單地忽略沒出現的特徵。

在文字分類的例子中,詞頻向量(word occurrence vectors)(而非詞數向量(word count vectors))可能用於訓練和用於這個分類器。 BernoulliNB 可能在一些資料集上可能表現得更好,特別是那些更短的文件。 如果時間允許,建議對伯努利和多項式兩個模型都進行評估。

例子:

# 載入庫
import numpy as np
from sklearn.naive_bayes import BernoulliNB

# 建立三個二元特徵,100個樣本
features = np.random.randint(2, size=(100, 3))

# 建立一個二元目標向量
target = np.random.randint(2, size=(100, 1)).ravel()

# 給定每個分類的先驗概率,建立一個伯努利樸素貝葉斯物件
classifer = BernoulliNB(class_prior=[0.25, 0.5])

# 訓練模型
model = classifer.fit(features, target)

模型與方法:
模型:
BernoulliNB(*, alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)

引數說明
alpha平滑因子,預設為1。alpha=0,不做平滑;alpha=1,Laplace平滑,避免0概率出現;0<alpha<1,Lidston平滑,alpha越小,迭代次數越高,精度越高。
binarize樣本特徵二值化的閾值,預設是0。如果不輸入,則模型會認為所有特徵都已經是二值化形式了;如果輸入具體的值,則模型會把大於該值的部分歸為一類,小於的歸為另一類。
fit_prior是否去學習類的先驗概率,預設是True
class_prior_prior列表型別。各個類別的先驗概率,如果沒有指定,則模型會根據資料自動學習, 每個類別的先驗概率相同,等於類標記總個數N分之一。

方法:

方法說明
fit(X,Y)在資料集(X,Y)上擬合模型
get_params()獲取模型引數
predict(X)對資料集X進行預測
predict_log_proba(X)對資料集X預測,得到每個類別的概率對數值
predict_proba(X)對資料集X預測,得到每個類別的概率
score(X,Y)得到模型在資料集(X,Y)的得分情況

3.3.5.2 多項式樸素貝葉斯

說明:
MultinomialNB 實現了服從多項分佈資料的樸素貝葉斯演算法,也是用於文字分類(這個領域中資料往往以詞向量表示,儘管在實踐中 tf-idf 向量在預測時表現良好)的兩大經典樸素貝葉斯演算法之一。 分佈引數由每類 y y y θ y = ( θ y 1 , . . . , θ y n ) \theta_y=(\theta{y_1},...,\theta{y_n}) θy=(θy1,...,θyn) 向量決定,式中 n n n 是特徵的數量(對於文字分類,是詞彙量的大小), θ y i \theta_{y_i} θyi 是樣本中屬於類 y y y 中特徵 i i i 概率 P ( x i ∣ y ) P(x_i|y) P(xiy),引數 θ \theta θ 使用平滑過的最大似然估計法來估計,即相對頻率計數:
θ ^ = N y i + α N y + α n \widehat{\theta}=\frac{N_{y_i}+\alpha}{N_y+\alpha n} θ =Ny+αnNyi+α

式中 N y i = ∑ x ∈ T x i N_{y_i}=\sum_{x\in T}x_i Nyi=xTxi 表示特徵 i i i 出現在 y y y 類的訓練集 T T T 中, N y = ∑ i = 1 n N y i N_{y}=\sum^n_{i=1}N_{y_i} Ny=i=1nNyi 表示類 y y y 所有特徵總量。

先驗平滑因子 α ≥ 0 \alpha\geq0 α0 應用於在學習樣本中沒有出現的特徵,以防在將來的計算中出現0概率輸出,把 α = 1 \alpha=1 α=1 稱為拉普拉斯平滑(Lapalce smoothing),而 α < 0 \alpha\lt0 α<0 被稱為利德斯通平滑(Lidstone smoothing)。

例子:
建立一個玩具文字資料集,含有3個觀察值(3句話),然後把文字子字串轉換為詞袋特徵矩陣和一個目標向量,再使用MultinomialNB來訓練一個模型,並給定兩個分類(支援巴西隊和支援德國隊)的先驗概率。

# 載入庫
import numpy as np
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer

# 建立文字
text_data = np.array(['I love Brazil. Brazil!', 'Brazil is best', 'Germany beats both'])

# 建立詞袋
count = CountVectorizer()
bag_of_words = count.fit_transform(text_data)

# 建立特徵矩陣
features = bag_of_words.toarray()

# 建立目標向量
target = np.array([0, 0, 1])

# 給定每個分類的先驗概率,建立一個多項式樸素貝葉斯物件
classifer = MultinomialNB(class_prior=[0.25, 0.5])

# 訓練模型
model = classifer.fit(features, target)

# 建立一個觀察值
new_observation = [[0, 0, 0, 1, 0, 1, 0]]

# 預測觀察值的分類
model.predict(new_observation)
# array([0])

模型與方法(同上):
模型:
MultinomialNB(*, alpha=1.0, fit_prior=True, class_prior=None)

引數說明
alpha平滑因子,預設為1。alpha=0,不做平滑;alpha=1,Laplace平滑,避免0概率出現;0<alpha<1,Lidston平滑,alpha越小,迭代次數越高,精度越高。
binarize樣本特徵二值化的閾值,預設是0。如果不輸入,則模型會認為所有特徵都已經是二值化形式了;如果輸入具體的值,則模型會把大於該值的部分歸為一類,小於的歸為另一類。
fit_prior是否去學習類的先驗概率,預設是True
class_prior_prior列表型別。各個類別的先驗概率,如果沒有指定,則模型會根據資料自動學習, 每個類別的先驗概率相同,等於類標記總個數N分之一。

方法:

方法說明
fit(X,Y)在資料集(X,Y)上擬合模型
get_params()獲取模型引數
predict(X)對資料集X進行預測
predict_log_proba(X)對資料集X預測,得到每個類別的概率對數值
predict_proba(X)對資料集X預測,得到每個類別的概率
score(X,Y)得到模型在資料集(X,Y)的得分情況

3.3.5.3 高斯樸素貝葉斯

說明:
GaussianNB 實現了運用於分類的高斯樸素貝葉斯演算法。特徵的可能性(即概率)假設為高斯分佈:
在這裡插入圖片描述
引數 σ y \sigma_y σy μ y \mu_y μy 使用最大似然估計法。

舉例:

# 載入庫
from sklearn import datasets
from sklearn.naive_bayes import GaussianNB

# 載入資料
iris = datasets.load_iris()
features = iris.data
target = iris.target

# 建立高斯樸素貝葉斯物件
classifer = GaussianNB()

# 訓練模型
model = classifer.fit(features, target)

# 預測模型
y_pred = model.predict(iris.data)

print("Number of mislabeled points out of a total %d points : %d" % (features.shape[0], (target != y_pred).sum()))
# Number of mislabeled points out of a total 150 points : 6

模型和方法:
模型:
GaussianNB(*, priors=None, var_smoothing=1e-09)

引數說明
priors先驗概率大小,如果沒有給定,模型則根據樣本資料自己計算(利用極大似然法)

方法:

方法說明
fit(X,Y)在資料集(X,Y)上擬合模型
get_params()獲取模型引數
predict(X)對資料集X進行預測
predict_log_proba(X)對資料集X預測,得到每個類別的預測概率對數值
predict_proba(X)對資料集X預測,得到每個類別的預測概率
score(X,Y)得到模型在資料集(X,Y)的得分情況

注意:
GaussianNB產生的預測概率(使用predict_proba輸出)是沒有經過校正的,即不可信的,需要使用保序迴歸(isotonic regression)或者其他相關方法。


3.3.5.4 校準預測概率

使用 CalibratedClassifierCV

from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.calibration import CalibratedClassifierCV

# 載入資料
iris = datasets.load_iris()
features = iris.data
target = iris.target

# 建立高樸素貝葉斯物件
classifer = GaussianNB()

# 建立使用 sigmoid 校準調校過的交叉驗證模型
classifer_sigmoid = CalibratedClassifierCV(classifer, cv=2, method='sigmoid')

# 校準概率
classifer_sigmoid.fit(features, target)

# 建立新的觀測值
new_observation = [[2.6, 2.6, 2.6, 0.4]]

# 檢視校準過的概率
classifer_sigmoid.predict_proba(new_observation)
# array([[0.31859969, 0.63663466, 0.04476565]])

# 原始預測概率,不使用校準,得到很極端的概率預測值
classifer.fit(features, target).predict_proba(new_observation)
# array([[2.31548432e-04, 9.99768128e-01, 3.23532277e-07]])

CalibratedclassifierCV提供了兩種校準方法: Platt sigmoid模型和保序迴歸,可以通過method引數進行設定。保序迴歸是無參的,在樣本量很小的情況下,它往往會過擬合,比如本案例中的鳶尾花資料集,只有150個觀察值。


3.4、半樸素貝葉斯

為了降低貝葉斯公式中估計後驗概率 P ( c ∣ x ) P(c|x) P(cx) 的困難,樸素貝葉斯分類器採用了屬性條件獨立性假設,但在現實任務中這個假設往往很難成立,於是人們嘗試對屬性條件獨立性假設進行一定程度的放鬆,由此產生了一類稱為“半樸素貝葉斯分類器”(semi-native Bayes classifiers)的學習方法。

半樸素貝葉斯分類器的基本想法是適當考慮一部分屬性間的相互依賴資訊,從而既不需進行完全聯合概率計算,又不至於徹底忽略了比較強的屬性依賴關係。

“獨依賴估計”(One-Dependent Estimator,ODE)是半樸素貝葉斯分類器最常用的一種策略。顧名思義,所謂“獨依賴”就是假設每個屬性在類別之外最多僅依賴於一個其他屬性,即:
P ( c ∣ x ) ∝ P ( c ) ∏ i = 1 d P ( x i ∣ c , p a i ) P(c|x) \propto{P(c)}\prod^d_{i=1}P(x_i|c,pa_i) P(cx)P(c)i=1dP(xic,pai)
其中 p a i pa_i pai 為屬性 x i x_i xi 所依賴的屬性,稱為 x i x_i xi 的父屬性。對於每個屬性,若父屬性已知,則可以採用樸素貝葉斯計算條件概率的方法來估值計算 P ( x i ∣ c , p a i ) P(x_i|c,pa_i) P(xic,pai)。於是問題的關鍵就是:如何確定每個屬性的父屬性,不同的做法產生不同的獨依賴分類器,具體如下兩種:
在這裡插入圖片描述

  • SPODE(Super-Parent ODE)方法。最直接的方法,假設所有屬性都依賴於同一個屬性,稱為“超父”(super parent),然後通過交叉驗證等模型選擇方法來確定超父屬性。如上圖 x 1 x_1 x1 是超父。
  • TAN(Tree Augmented native Bayes)方法。在最大帶權生成樹(maximum weighted spanning tree)演算法的基礎上,通過以下步驟將屬性間依賴關係約簡為以上的樹形結構:
    • 計算任意兩個屬性之間的條件互資訊(conditional mutual information) I ( x i , x j ∣ y ) = ∑ x i , x j ; c ∈ y P ( x i , x j ∣ c ) l o g P ( x i , x j ∣ c ) P ( x i ∣ c ) P ( x j ∣ c ) I(x_i,x_j|y)=\sum_{x_i,x_j;c\in y}P(x_i,x_j|c)log\frac{P(x_i,x_j|c)}{P(x_i|c)P(x_j|c)} I(xi,xjy)=xi,xj;cyP(xi,xjc)logP(xic)P(xjc)P(xi,xjc)
    • 以屬性為節點構建完全圖,任意兩個節點之間邊的權重設為 I ( x i , x j ∣ y ) I(x_i,x_j|y) I(xi,xjy)
    • 構建此完全圖的最大帶權生成樹,挑選根變數,將邊置為有向
    • 加入類別節點 y y y,增加從 y y y 到每個屬性的有向邊。

互資訊 I ( x i , x j ∣ y ) I(x_i,x_j|y) I(xi,xjy) 刻畫了屬性 x i x_i xi x j x_j xj 在已知類別情況下的相關性,因此通過最大生成樹演算法,TAN實際上僅保留了強相關屬性之間的依賴性。

  • AODE(Averaged One-Dependent Estimator) 是一種基於整合學習機制、更為強大的獨依賴分類器。與SPODE通過模型選擇確定超父屬性不同,AODE嘗試將每個屬性作為超父來構建SPODE,然後將那些具有足夠訓練資料支撐的SPODE整合起來作為最終結果,即: P ( c ∣ x ) ∝ ∑ i = 1 ∣ D x i ∣ ≥ m ′ d P ( c , x i ) ∏ j = 1 d P ( x j ∣ c , x i ) P(c|x)\propto \sum^d_{\underset {|D_{x_i}|\geq m^{'}}{i=1}}P(c,x_i)\prod^d_{j=1}P(x_j|c,x_i) P(cx)Dximi=1dP(c,xi)j=1dP(xjc,xi)其中 D x i D_{x_i} Dxi 是在第 i i i 個屬性上取值為 x i x_i xi 的樣本的集合, m ′ m^{'} m為閾值常數,預設設定為30。顯然AODE需估計 P ( c , x i ) P(c,x_i) P(c,xi) P ( x j ∣ c , x i ) P(x_j|c,x_i) P(xjc,xi)。類似式,先驗概率和條件概率為: P ( c , x i ) ^ = ∣ D c , x i + 1 ∣ ∣ D ∣ + N × N i \hat{P(c,x_i)}=\frac{|D_{c,x_i}+1|}{|D|+N\times N_i} P(c,xi)^=D+N×NiDc,xi+1 P ( x j ∣ c , x i ) ^ = ∣ D c , x i , x j ∣ + 1 ∣ D c , x i ∣ + N j \hat{P(x_j|c,x_i)}=\frac{|D_{c,x_i,x_j}|+1}{|D_{c,x_i}|+N_j} P(xjc,xi)^=Dc,xi+NjDc,xi,xj+1 其中 N N N i i i D D D 中可能的類別數(好瓜), N i N_i Ni 是第 i i i 個屬性可能的取值數(其他屬性,同 N j N_j Nj), D c , x i D_{c,x_i} Dc,xi 是類別為 c c c 且在第 i i i 個屬性上取值為 x i x_i xi 的樣本集合, D c , x i , x j D_{c,x_i,x_j} Dc,xi,xj 是類別為 c c c 且在第 i i i 和 第 j j j 個屬性上取值分別為 x i x_i xi x j x_j xj 的樣本集合。例如,對西瓜資料集3.0有:
    P ^ 是 , 濁 響 = P ( 好 瓜 = 是 , 敲 聲 = 濁 響 ) ^ = 6 + 1 17 + 2 × 3 = 0.304 \hat{P}_{是,濁響}=\hat{P(好瓜=是,敲聲=濁響)}=\frac{6+1}{17+2\times 3}=0.304 P^,=P(=,=)^=17+2×36+1=0.304
    P ^ 凹 陷 ∣ 是 , 濁 響 = P ^ ( 臍 部 = 凹 陷 ∣ 好 瓜 = 是 , 敲 聲 = 濁 響 ) = 3 + 1 6 + 3 = 0.444 \hat{P}_{凹陷|是,濁響}=\hat{P}(臍部=凹陷|好瓜=是,敲聲=濁響)=\frac{3+1}{6+3}=0.444 P^,=P^(==,=)=6+33+1=0.444

綜上可知,AODE的訓練過程也是“計數”,在訓練資料集上對符合條件的樣本進行計數的過程。與樸素貝葉斯分類器相似,AODE無需模型選擇,既能通過預計算節省預測時間,也能採取懶惰學習方式在預計算時再進行計數,並且易於實現增量學習。

既然將屬性條件獨立性假設放鬆為獨依賴假設可能獲得泛化效能的提升,那麼,能否通過考慮屬性間的高階依賴來進一步提升泛化效能呢?也就是說將前面開頭的的獨依賴假設 P ( c ∣ x ) ∝ P ( c ) ∏ i = 1 d P ( x i ∣ c , p a i ) P(c|x) \propto{P(c)}\prod^d_{i=1}P(x_i|c,pa_i) P(cx)P(c)i=1dP(xic,pai) p a i pa_i pai 替換為包含 k k k 個屬性的集合,從而將 ODE擴充為 k k kDE。需注意的是,隨著 k k k 的增加,準確估計概率 P ( x i ∣ y , p a i ) P(x_i|y,pa_i) P(xiy,pai) 所需的訓練樣本數量將以指數級增加。因此,若訓練資料非常充分,泛化效能有可能提升;但在有限樣本條件下,則又陷入估計高階聯合概率的泥沼。


3.5、貝葉斯網

屬性值相互獨立的條件成立時,樸素貝葉斯分類是比其他所有分類演算法要精確的。然而在現實中,屬性之間的依賴存在可能,於是各種屬性之間就產生了錯綜複雜的關係網路,隨後貝葉斯網就誕生了,它的背後還蘊含著圖論的數學思想。


3.5.1、概念與組成

貝葉斯網(Bayesian network)也稱“信念網”(belief network),它是一種圖形模型(概率理論和圖論相結合的產物),可用於描述隨機變數之間的依賴關係,是一種將因果知識和概率知識相結合的資訊表示框架。

網路中每一個節點表示一個隨機變數,每一條邊表示隨機變數間的依賴關係,同時每個節點都對應一個條件概率表,用於描述該變數與父變數之間的依賴強度,也就是聯合概率分佈。

貝葉斯網路由網路結構條件概率表兩部分組成:

  • 網路結構是一個有向無環圖(Directed Acylic Grap, DAG),如下圖所示,用來刻畫屬性之間的依賴關係。重要的是,有向圖蘊含了條件獨立性假設。貝葉斯網路規定圖中每個節點 x i x_i xi,如果已知它的父節點,則 x i x_i xi 條件獨立於它的所有非後代節點。
    在這裡插入圖片描述
  • 條件概率表(Conditional Probability Table,CPT),把各個節點與它的父節點關聯起來,用來描述屬性的聯合概率分佈。條件概率表可以用 P ( x i ∣ p a i ) P(x_i|pa_i) P(xipai) 來描述,它表達了節點同其父節點的關係——條件概率。沒有任何父節點的節點,它的條件概率為其先驗概率。

含有 K K K 個節點的貝葉斯網路,聯合概率分佈等於每個節點給定父節點的條件概率的乘積:
P ( X ) = ∑ i = 1 K P ( x i ∣ p a i ) P(X)=\sum_{i=1}^KP(x_i|pa_i) P(X)=i=1KP(xipai)

因此,上圖的貝葉斯網路聯合概率分佈為:
P ( x 1 , x 2 , x 3 , x 4 , x 5 , x 6 , x 7 ) = P ( x 1 ) P ( x 2 ) P ( x 3 ) P ( x 4 ∣ x 1 , x 2 , x 3 ) P ( x 5 ∣ x 1 , x 3 ) P ( x 6 ∣ x 4 ) P ( x 7 ∣ x 4 , x 5 ) P(x_1,x_2,x_3,x_4,x_5,x_6,x_7)=P(x_1)P(x_2)P(x_3)P(x_4|x_1,x_2,x_3)P(x_5|x_1,x_3)P(x_6|x_4)P(x_7|x_4,x_5) P(x1,x2,x3,x4,x5,x6,x7)=P(x1)P(x2)P(x3)P(x4x1,x2,x3)P(x5x1,x3)P(x6x4)P(x7x4,x5)

由此可見,貝葉斯網路可以表達屬性的聯合概率分佈,並且使屬性的聯合概率求解過程大大簡化。


3.5.2、結構

通過貝葉斯網路中三個節點之間的典型依賴關係,可以劃分3種基本結構形式:

(1)Tail-to-Tail——同父結構
在這裡插入圖片描述
特點: 給定父節點 c c c 的取值,則 a a a b b b 條件獨立,反之不獨立。
證明:
根據貝葉斯網聯合概率分佈公式: P ( a , b , c ) = P ( c ) P ( a ∣ c ) P ( b ∣ c ) P(a,b,c)=P(c)P(a|c)P(b|c) P(a,b,c)=P(c)P(ac)P(bc),則:

  1. c c c 作為條件已知時,因為: P ( a , b ∣ c ) = P ( a , b , c ) P ( c ) P(a,b|c)=\frac{P(a,b,c)}{P(c)} P(a,bc)=P(c)P(a,b,c),可得: P ( a , b ∣ c ) = P ( a , b , c ) P ( c ) = P ( c ) P ( a ∣ c ) P ( b ∣ c ) P ( c ) = P ( a ∣ c ) P ( b ∣ c ) P(a,b|c)=\frac{P(a,b,c)}{P(c)}=\frac{P(c)P(a|c)P(b|c)}{P(c)}=P(a|c)P(b|c) P(a,bc)=P(c)P(a,b,c)=P(c)P(c)P(ac)P(bc)=P(ac)P(bc),即當 c c c 已知時, a 、 b a、b ab條件獨立。
  2. c c c 未知時, P ( a , b ) = ∑ c P ( a ∣ c ) P ( b ∣ c ) P ( c ) ≠ P ( a ) P ( b ) P(a,b)=\sum_cP(a|c)P(b|c)P(c)\neq P(a)P(b) P(a,b)=cP(ac)P(bc)P(c)=P(a)P(b),此時 a 、 b a、b ab 不獨立。

(2)Head-to-Head——順序結構
在這裡插入圖片描述

特點: 給定節點 c c c 的值,則 a a a b b b 條件獨立, 反之不獨立。
證明:
根據貝葉斯網聯合概率分佈公式: P ( a , b , c ) = P ( a ) P ( c ∣ a ) P ( b ∣ c ) = P ( c ) P ( a ∣ c ) P ( b ∣ c ) P(a,b,c)=P(a)P(c|a)P(b|c)=P(c)P(a|c)P(b|c) P(a,b,c)=P(a)P(ca)P(bc)=P(c)P(ac)P(bc),則:

  1. c c c 作為條件已知時,因為: P ( a , b ∣ c ) = P ( a , b , c ) P ( c ) P(a,b|c)=\frac{P(a,b,c)}{P(c)} P(a,bc)=P(c)P(a,b,c),可得: P ( a , b ∣ c ) = P ( a , b , c ) P ( c ) = P ( c ) P ( a ∣ c ) P ( b ∣ c ) P ( c ) = P ( a ∣ c ) P ( b ∣ c ) P(a,b|c)=\frac{P(a,b,c)}{P(c)}=\frac{P(c)P(a|c)P(b|c)}{P(c)}=P(a|c)P(b|c) P(a,bc)=P(c)P(a,b,c)=P(c)P(c)P(ac)P(bc)=P(ac)P(bc),即當 c c c 已知時, a 、 b a、b ab條件獨立。
  2. c c c 未知時, P ( a , b ) = ∑ c P ( c ∣ a ) P ( b ∣ c ) ≠ P ( a ) P ( b ) P(a,b)=\sum_cP(c|a)P(b|c)\neq P(a)P(b) P(a,b)=cP(ca)P(bc)=P(a)P(b),此時 a 、 b a、b ab 不獨立。

(3)Head-to-Head——V型結構(或 衝撞結構)
在這裡插入圖片描述
特點: 若節點 c c c 的值未知,則 a a a b b b 相互獨立, 反之不獨立。(注意與前面兩種相反)
證明:
根據貝葉斯網聯合概率分佈公式: P ( a , b , c ) = P ( a ) P ( c ∣ a ) P ( b ∣ c ) = P ( c ) P ( a ∣ c ) P ( b ∣ c ) P(a,b,c)=P(a)P(c|a)P(b|c)=P(c)P(a|c)P(b|c) P(a,b,c)=P(a)P(ca)P(bc)=P(c)P(ac)P(bc),則:

  1. c c c 作為條件已知時, P ( a , b ∣ c ) = P ( c ∣ a , b ) P ( a ) P ( b ) P ( c ) ≠ P ( a ∣ c ) P ( b ∣ c ) P(a,b|c)=\frac{P(c|a,b)P(a)P(b)}{P(c)}\neq P(a|c)P(b|c) P(a,bc)=P(c)P(ca,b)P(a)P(b)=P(ac)P(bc),即當 c c c 已知時, a 、 b a、b ab不條件獨立
  2. c c c 未知時, P ( a , b ) = ∑ c P ( c ∣ a , b ) P ( a ) P ( b ) = P ( a ) P ( b ) P(a,b)=\sum_c{P(c|a,b)P(a)P(b)}= P(a)P(b) P(a,b)=cP(ca,b)P(a)P(b)=P(a)P(b),此時 a 、 b a、b ab 獨立

從以上幾種典型結構可以看出,在貝葉斯網路中,一個變數是否已知,對另外兩個變數間的獨立性有影響,這樣的獨立性稱為“邊際獨立性”(marginal independence),記為: a ⫫ b a⫫b ab

通常使用“有向分離”(D-Separation)方法來判斷有向圖變數間的條件獨立性。具體步驟為:首先找出有向圖中所有V型結構,在兩個父節點之間加上一條無向邊,並將所有有向邊改為無向邊,這樣得到的無向圖又被稱為“道德圖”(Moral Graph)。

給定不相交的節點集合 A A A B B B C C C,如果在道德圖中,將變數集合C去掉後, A A A B B B 分別處於兩個連通分量中,則稱 A A A B B B C C C 有向分離, A A A B B B C C C 已知的條件下獨立,記為: A ⊥ B ∣ C A\bot B|C ABC

舉例:
分別判斷節點 a a a d d d 在給定 e e e 或者 b b b 的條件下,是否獨立?

有向無環圖:
在這裡插入圖片描述
轉換成道德圖:
在這裡插入圖片描述
在給定 e e e 的條件下,去掉後可得如下圖,節點 a a a d d d 仍在同一個連通分量裡,因此,給定 e e e 的值, a a a d d d 不條件獨立。
在這裡插入圖片描述
在給定 b b b 的條件下,去掉後可得如下圖,節點 a a a d d d 將分別處於兩個連通分量裡,因此,給定 e e e 的值, a a a d d d 條件獨立,記為 a ⊥ d ∣ b a\bot d|b adb
在這裡插入圖片描述


3.5.3、學習

若網路結構已知,即屬性間的依賴關係已知,則貝葉斯網的學習過程相對簡單,只需通過對訓練樣本“計數”,估計出每個節點的條件概率表即可。但在現實應用中,我們往往並不知道網路結構,於是,貝葉斯網學習的首要任務就是根據訓練資料集來找出結構最“恰當”的貝葉斯網。“評分搜尋”是求解這一問題的常用辦法。具體來說,我們先定義一個評分函式(score function),以此來評估貝葉斯網與訓練資料的契合程度,然後基於這個評分函式來尋找結構最優的貝葉斯網。顯然,評分函式引入了關於我們希望獲得什麼樣的貝葉斯網的歸納偏好。

常用評分函式通常基於資訊理論準則,此類準則將學習問題看做一個資料壓縮任務,學習的目的是找一個能以最短編碼長度描述訓練資料的模型,此時編碼長度包括了描述模型自身所需編碼位數和使用該模型描述資料所需的編碼位數。對貝葉斯網而言,模型就是一個貝葉斯網,同時,每個貝葉斯網描述了一個在訓練資料上的概率分佈,自有一套編碼機制能使那些經常出現的樣本有更短的編碼。於是,我們應該選擇那個綜合編碼長度(包括描述網路和編碼資料)最短的貝葉斯網,這就是“最小描述長度”(Minimal Description Length,簡稱MDL)準則。

3.5.4、推斷

貝葉斯網訓練好之後就能用來回答“查詢”(query),即通過一些屬性變數的觀測值來推測其他屬性變數的取值。例如在西瓜問題中,我們觀測到西瓜色澤青綠、敲聲濁響、根蒂蜷縮,想知道它是否成熟、甜度如何。這樣通過已知變數觀測值來推測待查詢變數的過程稱為“推斷”(inference),已知變數觀測值稱為“證據”(evidence)。

最理想的是直接根據貝葉斯網定義的聯合概率分佈來精確計算後驗概率,不幸的是,這樣的“精確推斷”已被證明是NP難的;換言之,當網路節點較多、連線稠密時,難以進行精確推斷,此時需藉助“近似推斷”,通過降低精度要求,在有限時間內求得近似解。在現實應用中,貝葉斯網的近似推斷常使用吉布斯取樣(Gibbs sampling)來完成,這是一種隨機取樣方法。

3.6、貝葉斯網路的應用

貝葉斯網路經過長期的發展,現已被應用到人工智慧的眾多領域,包括模式識別、資料探勘、自然語言處理等,針對很多領域核心的分類問題,大量卓有成效的演算法都是基於貝葉斯理論設計。

貝葉斯網路在醫療領域被應用於疾病診斷;在工業領域中,用於對工業裝置故障檢測和效能分析;在軍事上被應用於身份識別等各種推理;在生物農業領域,貝葉斯網路在基因連鎖分析、農作物推斷、獸醫診斷、環境分析等都有應用,在金融領域可以用於構建風控模型,在企業管理中可用於決策支援,在自然語言處理方面,可用於文字分類、中文分詞、機器翻譯等,下面以實際案例介紹如何應用貝葉斯網路理論解決現實問題。

3.6.1、中文分詞

中文分詞是將語句切分為合乎語法和語義的詞語序列。一個經典的中文分詞例句是“南京市長江大橋”,正確的分詞是“南京市/長江大橋”,錯誤的分詞結果是“南京市長/江大橋”。可以使用貝葉斯演算法來解決這一問題。

設完整的一句話為 X X X,則 Y Y Y 為組成該句話的詞語集合,共有 n n n 個詞語。分詞問題可以轉化為求下列式子最大值的問題:
P ( Y ∣ X ) = P ( Y ) P ( X ∣ Y ) P ( X ) P(Y|X)=\frac{P(Y)P(X|Y)}{P(X)} P(YX)=P(X)P(Y)P(XY)
只需找到 P ( Y ) P ( X ∣ Y ) {P(Y)P(X|Y)} P(Y)P(XY) 的最大值。由於在任意的分詞情況下,都可以由詞語序列生成句子,所以可以忽略 P ( X ∣ Y ) P(X|Y) P(XY),只需找到 P ( Y ) P(Y) P(Y) 的最大值即可。按照聯合概率公式對 P ( Y ) P(Y) P(Y) 進行展開,有:
P ( Y ) = P ( Y 1 , Y 2 , Y 3 , . . . , Y N ) = P ( Y 1 ) P ( Y 2 ∣ Y 1 ) P ( Y 3 ∣ Y 1 , Y 2 ) . . . P ( Y n ∣ Y 1 , Y 2 , . . . Y n − 1 ) P(Y)=P(Y_1,Y_2,Y_3,...,Y_N)=P(Y_1)P(Y_2|Y_1)P(Y_3|Y_1,Y_2)...P(Y_n|Y_1,Y_2,...Y_{n-1}) P(Y)=P(Y1,Y2,Y3,...,YN)=P(Y1)P(Y2Y1)P(Y3Y1,Y2)...P(YnY1,Y2,...Yn1)
這樣的展開式是指數級增長的,並且資料稀疏的問題也會越來越明顯,所以假設每個詞語只會依賴於詞語序列中該詞前面出現的 k k k 個詞語,即 k k k 元語言模型(k-gram)。這裡假設 k = 2 k=2 k=2,於是就有:
P ( Y ) = P ( Y 1 ) P ( Y 2 ∣ Y 1 ) P ( Y 3 ∣ Y 2 ) . . . P ( Y n ∣ Y n − 1 ) P(Y)=P(Y_1)P(Y_2|Y1)P(Y_3|Y_2)...P(Y_n|Y_{n-1}) P(Y)=P(Y1)P(Y2Y1)P(Y3Y2)...P(YnYn1)
回到上面的問題,正常的語料庫中,“南京市長”與“江大橋”同時出現的概率一般為0,所以這一分詞方式會被捨棄,而“南京市/長江大橋”的分詞方式會是最終的分詞結果。


3.6.2、機器翻譯

基於統計的方法是機器翻譯常用的實現。統計機器翻譯問題可以描述為,給定某種源語言的句子 X X X,其可能的目標語言翻譯出的句子 Y Y Y P ( X ∣ Y ) P(X|Y) P(XY) 代表該種翻譯句子符合人類翻譯的程度,所以即找到 P ( X ∣ Y ) P(X|Y) P(XY) 最大的 Y Y Y 即可。根據貝葉斯共識,有:
P ( Y ∣ X ) = P ( Y ) P ( X ∣ Y ) P ( X ) P(Y|X)=\frac{P(Y)P(X|Y)}{P(X)} P(YX)=P(X)P(Y)P(XY)
所以需要找到使 P ( Y ) P ( X ∣ Y ) {P(Y)P(X|Y)} P(Y)P(XY) 最大的 Y Y Y。對於 P ( Y ) P(Y) P(Y),在中文分詞案例中知道可以利用 k k k 元語言模型(k-gram)計算。對於 P ( X ∣ Y ) P(X|Y) P(XY) ,通常利用一個分詞對齊的平行語料庫,具體言之,將英文"you and me"翻譯為漢語,最佳的對應模式為“你和我”,此時有:
P ( X ∣ Y ) = P ( y o u ∣ 你 ) P ( a n d ∣ 和 ) P ( m e ∣ 我 ) P(X|Y)=P(you|你)P(and|和)P(me|我) P(XY)=P(you)P(and)P(me)
上式中右邊各項都可以很容易地計算出,所以可以通過分詞對齊的方法計算出 P ( X ∣ Y ) P(X|Y) P(XY) 的值,最終找到使得 P ( X ∣ Y ) P(X|Y) P(XY) 最大的 Y Y Y,便是 X X X 最佳的翻譯方式。


3.6.3、故障診斷

故障檢測是為了找到某種裝置出現故障的部件,在工業領域,自動的故障診斷裝置能節省一線工作人員大量的預判斷時間。基於規則的系統可以被用於故障診斷,但是不能處理不確定性問題,在實際環境中難以靈活應用。貝葉斯網能較好地描述可能的故障來源,在處理故障診斷的不確定問題上有不凡的表現。研究人員開發出了多種基於貝葉斯網路的故障診斷系統,包括對汽車啟動故障的診斷、飛機的故障診斷、核電廠軟硬體的故障診斷等。如下圖顯示了汽車發動機系統的網路結構:
在這裡插入圖片描述

該系統用於診斷汽車無法正常啟動的原因,可見原因有多種,所以可以利用前文提到的診斷推理的方法,找到後驗概率最大的故障原因。


3.6.4、疾病診斷

疾病診斷是從一系列歷史經驗和臨床檢驗結果中對病人患有疾病種類和患病程度的判斷。機器學習在疾病診斷領域有較多的應用,在20世紀70年代就有基於規則設計的產生式專家系統用於疾病的診斷,但是該型別系統不能處理不確定性,因此基於貝葉斯網路設計了新的疾病診斷系統。

貝葉斯網路推理例項:

分析下圖的貝葉斯網路對是否是肺病給出診斷。下面給出在幾種不同情況下的診斷推理過程。假設每個變數都是二元的,分別取“T”和“F”表示“是”和“否”。
在這裡插入圖片描述
每個節點的條件概率表如下:

吸菸概率:
在這裡插入圖片描述
肺病概率:
在這裡插入圖片描述

呼吸急促概率:
在這裡插入圖片描述

胸痛概率:
在這裡插入圖片描述

咳嗽概率:
在這裡插入圖片描述

感冒概率:
在這裡插入圖片描述

發燒概率:
在這裡插入圖片描述
(1)計算得肺病的先驗概率
P ( 肺 病 = T ) = ∑ 吸 煙 P ( 肺 病 = T ∣ 吸 煙 ) P ( 吸 煙 ) = 0.2 × 0.1009 + 0.8 × 0.001 = 0.02098 P ( 肺 病 = F ) = 1 − 0.02098 = 0.97902 \begin{aligned} &P(肺病=T)=\sum_{吸菸}P(肺病=T|吸菸)P(吸菸)=0.2\times 0.1009+0.8\times 0.001=0.02098 \\ &P(肺病=F)=1-0.02098=0.97902 \end{aligned} P(=T)=P(=T)P()=0.2×0.1009+0.8×0.001=0.02098P(=F)=10.02098=0.97902

(2)出現呼吸急促症狀時,患肺病的概率
P ( 呼 吸 急 促 = T ) = ∑ 肺 病 P ( 呼 吸 急 促 = T ∣ 肺 病 ) P ( 肺 病 ) = 0.02908 × 0.208 + 0.97902 × 0.01 ≈ 0.0142 P ( 呼 吸 急 促 = F ) = 1 − 0.0142 = 0.9858 P ( 肺 病 = T ∣ 呼 吸 急 促 = T ) = P ( 呼 吸 急 促 = T ∣ 肺 病 = T ) P ( 肺 病 = T ) P ( 呼 吸 急 促 = T ) = 0.208 × 0.02098 0.0142 = 0.3083 \begin{aligned} &P(呼吸急促=T)=\sum_{肺病}P(呼吸急促=T|肺病)P(肺病)=0.02908\times 0.208+0.97902\times 0.01\approx0.0142 \\ &P(呼吸急促=F)=1-0.0142=0.9858 \\ &P(肺病=T|呼吸急促=T)=\frac{P(呼吸急促=T|肺病=T)P(肺病=T)}{P(呼吸急促=T)}=\frac{0.208\times 0.02098}{0.0142}=0.3083 \end{aligned} P(=T)=P(=T)P()=0.02908×0.208+0.97902×0.010.0142P(=F)=10.0142=0.9858P(=T=T)=P(=T)P(=T=T)P(=T)=0.01420.208×0.02098=0.3083
可以看出,當病人出現了呼吸急促現象時,患肺病的概率大大提高了。

(3)當病人咳嗽時,患有肺病的概率
P ( 咳 嗽 = T ) = ∑ 肺 病 , 感 冒 P ( 咳 嗽 = T ∣ 肺 病 , 感 冒 ) P ( 肺 病 ) P ( 感 冒 ) = 0.7527 × 0.02098 × 0.02 + 0.505 × 0.02098 × 0.98 + 0.505 × 0.97902 × 0.02 + 0.01 × 0.97902 × 0.98 = 0.0302 P ( 咳 嗽 = T ∣ 肺 病 = T ) = ∑ 感 冒 P ( 咳 嗽 = T ∣ 感 冒 , 肺 病 = T ) P ( 感 冒 ) = 0.7525 × 0.02 + 0.505 × 0.98 = 0.50995 P ( 肺 病 = T ∣ 咳 嗽 = T ) = P ( 咳 嗽 = T ∣ 肺 病 = T ) P ( 肺 病 = T ) P ( 咳 嗽 = T ) = 0.50995 × 0.02098 0.0302 = 0.3543 \begin{aligned} &P(咳嗽=T)=\sum_{肺病,感冒}P(咳嗽=T|肺病,感冒)P(肺病)P(感冒)=0.7527\times0.02098\times 0.02+0.505\times 0.02098\times 0.98+0.505\times 0.97902\times 0.02+0.01\times 0.97902\times 0.98=0.0302 \\ &P(咳嗽=T|肺病=T)=\sum_{感冒}P(咳嗽=T|感冒,肺病=T)P(感冒)=0.7525\times0.02+0.505\times0.98=0.50995 \\ &P(肺病=T|咳嗽=T)=\frac{P(咳嗽=T|肺病=T)P(肺病=T)}{P(咳嗽=T)}=\frac{0.50995\times0.02098}{0.0302}=0.3543 \end{aligned} P(=T)=,P(=T,)P()P()=0.7527×0.02098×0.02+0.505×0.02098×0.98+0.505×0.97902×0.02+0.01×0.97902×0.98=0.0302P(=T=T)=P(=T,=T)P()=0.7525×0.02+0.505×0.98=0.50995P(=T=T)=P(=T)P(=T=T)P(=T)=0.03020.50995×0.02098=0.3543

Python程式碼示例:

from pgmpy.models import BayesianModel
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination
# 通過邊來定義貝葉斯模型
# 變數說明:
# 'SK':'吸菸';'LD':'肺病';'ST':'呼吸急促';'CP':'胸痛';'CG':'咳嗽';'CD':'感冒';'FE':'發燒'
# 定義貝葉斯網路模型,給出節點間關係
model = BayesianModel([('SK','LD'), ('LD','ST'), ('LD','CP'), ('LD','CG'), ('CD','CG'), ('CD','FE')])
# 定義條件概率分佈 CPD:
# variable:變數
# variable_card:基數
# values:變數值
# evidence:父節點
cpd_SK = TabularCPD(variable='SK', variable_card=2, values=[[0.8], [0.2]])

cpd_LD = TabularCPD(variable='LD', variable_card=2, values=[[0.999, 0.8991], [0.001, 0.1009]], evidence=['SK'], evidence_card=[2])

cpd_ST = TabularCPD(variable='ST', variable_card=2, values=[[0.99, 0.792], [0.01, 0.208]], evidence=['LD'], evidence_card=[2])

cpd_CP = TabularCPD(variable='CP', variable_card=2, values=[[0.99, 0.792], [0.01, 0.208]], evidence=['LD'], evidence_card=[2])

cpd_CG = TabularCPD(variable='CG', variable_card=2, values=[[0.99, 0.495, 0.495, 0.2475], [0.01, 0.505, 0.505, 0.7525]], evidence=['LD', 'CD'], evidence_card=[2, 2])

cpd_CD = TabularCPD(variable='CD', variable_card=2, values=[[0.98], [0.02]])

cpd_FE = TabularCPD(variable='FE', variable_card=2, values=[[0.99, 0.693], [0.01, 0.307]], evidence=['CD'], evidence_card=[2])

# 將有向無環圖與條件概率分佈表關聯
model.add_cpds(cpd_SK, cpd_LD, cpd_ST, cpd_CP, cpd_CG, cpd_CD, cpd_FE)
# 驗證模型:檢查網路結構和CPD,並驗證CPD是否正確定義以及總和是否為1
print(model.check_model()) # 布林型 True/False
# print(model.get_cpds('SK'))
infer = VariableElimination(model)
print(u"P(肺病):")
print(infer.query(['LD']))
print(u"P(呼吸急促):")
print(infer.query(['ST']))
print(u"P(肺病|呼吸急促):")
print(infer.query(['LD'], evidence={'ST':1}))
print(u"P(咳嗽):")
print(infer.query(['CG']))
print(u"P(咳嗽|肺病=T):")
print(infer.query(['CG'], evidence={'LD':1}))
print(u"P(肺病|咳嗽=1):")
print(infer.query(['LD'], evidence={'CG':1}))

結果:
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述


看到最後了,如果覺得有幫助的話,可以一鍵三連喲!Thanks♪(・ω・)ノ

修訂

  • 第一次修訂2020/12/23

參考

文件:
sklearn中文
sklearn英文

部落格:
貝葉斯網路Python實戰
Sklearn引數詳解—貝葉斯

書籍:
《西瓜書》- 周志華 等

課程:
極客時間 - 資料分析實戰45講

相關文章