高階人工智慧系列(一)——貝葉斯網路、機率推理和樸素貝葉斯網路分類器

KindBrave發表於2022-11-20

高階人工智慧系列(一)——貝葉斯網路、機率推理和樸素貝葉斯網路分類器

初學者整理,如有錯誤歡迎指正。

原創地址

一、機率論基礎

1.1 樣本空間 Ω

樣本空間是隨機試驗中所有可能的取值的集合。

比如,擲骰子,結果有1-6 六種可能,那麼樣本空間即:

\(Ω = \{1, 2, 3, 4, 5, 6\}\)


1.2 事件空間

樣本空間的一個子集。


1.3 條件機率

簡單地,現有事件A和事件B,
條件機率 P(A|B)表示事件A在事件B發生的條件下發生的機率

條件機率計算公式:

\(P(A|B)\) = \(P(AB) \over P(B)\)

更一般地,條件機率公式可以擴充套件到多條件情況:

\(P(A|B_1,B_2,...,B_n)\) = \(P(A,B_1,B_2,...,B_n) \over P(B_1,B_2,...,B_n)\)

即分子是A和條件的聯合機率,分母是條件的聯合機率。

根據條件機率公式,可得到乘法公式

\(P(AB)\) = \(P(A|B) P(B)\)

\(P(A,B_1,B_2,...,B_n)\) = \(P(A|B_1,B_2,...,B_n) P(B_1,B_2,...,B_n)\)

根據上式可以看出,乘法公式可以鏈式遞迴

觀察上述乘法公式,等式右側仍然包含聯合機率

\(P(B_1,B_2,...,B_n)\)

它仍然可以利用乘法公式進行變換:

\(P(B_1,B_2,...,B_n)\) = \(P(B_1|B_2,...,B_n) P(B_2,...,B_n)\)
\(P(B_2,...,B_n)\) = \(P(B_2|B_3,...,B_n) P(B_3,...,B_n)\)

\(...\)

\(P(B_{n-1},B_n)\) = \(P(B_{n-1}|B_n)P(B_n)\)

整理可得:

\(P(B_1,B_2,...,B_n)\) = \(∏^n_{i=1}P(B_i|B_1,...,B_{i-1})\)


1.4 伯努利大數定律

在日常生活中,我們很自然地會使用頻率去估計一個事件的機率。那麼其背後的理論是什麼?是伯努利大數定律(?定綠)

伯努利大數定律告訴我們:

進行n重伯努利試驗(e.g. 拋n次硬幣),其中A事件發生了m次,其機率是p,頻率是\(m \over n\).那麼,存在任意一個正數ε,使得:

\(lim_{n->∞}\) \(P\{|{m \over n} - p| < ε\} = 1\)

即n->∞時,頻率是依機率收斂到機率的。

二、貝葉斯法則

我們可以將\(P(A|B)\)\(P(B|A)\)這兩個條件機率透過貝葉斯公式聯絡起來:

\(P(A|B)\) = \(P(B|A) P(A) \over P(B)\)

  • 其中\(P(A|B)\)叫做後驗機率,所謂後驗機率,就是說A在B發生的條件下發生的機率,是有一個先決條件的;
  • \(P(A)\)叫做先驗機率,因為\(P(A)\)表示在沒有任何前提條件的情況下A發生的機率;
  • \(P(B|A)\)叫做似然;
  • \(P(B)\)叫做歸一化常數(即只把\(P(B)\)當作一個係數來對待),它可以透過全機率公式

\(P(B)\) = \(∑_iP(B|A_i)P(A_i)\)

求得。

這裡有必要解釋一下全機率公式以更好理解。把A看作一個整體,而B是其中的一部分,那麼很容易得到P(B)就是B在A中的佔比。現在,將A分成n分,即\(A_1\),...,\(A_n\),此時P(B)就變成了B在\(A_i\)中的佔比,比上\(A_i\)在A中的佔比,i是從1~n的整數。即上述的全機率公式。

三、貝葉斯網路

貝葉斯網路的拓撲結構是一個有向無環圖(DAG)。其節點表示隨機變數,如果兩個節點之間有因果關係或者非條件獨立,則兩節點之間會建立一條有向邊,有向邊由父節點指向子節點

下面是一個警報網路的貝葉斯網路圖:

graph TB; Burglary-->Alarm Earthqk-->Alarm Alarm-->John Alarm-->Mary

上述貝葉斯網路圖表達的意思是:入室盜竊和地震都可能引發警報器報警,而警報器報警可能會讓John和Mary給主人打電話以通知主人。


3.1 貝葉斯網路的三種連線方式

貝葉斯網路中節點的連線方式有三種:順連、分連和匯連(下圖依次從左到右)

graph TB; A --> B B --> C D --> E D --> F G --> J H --> J

順連

當B未知時,變數A的變化會影響B的置信度的變化,從而間接影響C的置信度,所以此時A間接影響C,A和C不獨立。當變數B的置信度確定時,A就不能影響B,從而不能影響C,此時A和C獨立,因為此時A和C的通道被阻斷了。

分連

分連代表一個原因導致多個結果,當變數D已知時,變數E和F之間就不能相互影響,是獨立的,而當變數D未知時,D可以在變數E和F之間傳遞資訊,從而使變數E和F相互影響從而不獨立。

匯連

匯連與分連恰好相反,代表多個原因導致一個結果,並且當變數J已知時,變數G的置信度的提高會導致變數H的置信度的降低,從而H和H之間會相互影響所以是不獨立的。而當J未知時,變數G和H之間置信度互不影響,他們之間是獨立的。

總結

  • 順連中,中間變數B未知時,A C不獨立,已知時獨立;
  • 分連中,中間變數D未知時,E F不獨立,已知時獨立;
  • 匯連中,中間變數J未知時,G H獨立,已知時不獨立。

3.2 貝葉斯網路中的全機率公式與機率表

貝葉斯網路中的全機率公式有Parent原則,即:

\(P(X_i)\) = \(∏P(X_i|Parent(X_i))\)

例如上述貝葉斯網路圖中,全機率:

\(P(B,E,A,J,M)\) = \(P(J|A) P(M|A) P(A|B,E) P(B) P(E)\)

如果某些變數不需要,只需要邊緣化不需要的變數(即使其不參與運算即可)

ps.倒是不好理解了,直接考慮\(P(X_i)\) = \(∏P(X_i|Parent(X_i))\)更容易理解一些。


那麼,如何在貝葉斯網路中進行事件判斷?仍然以警報網路為例,可以看到每個事件發生的機率如下圖,其中根節點(B、E)是先驗機率,非根節點(A、J、M)則是後驗機率(條件機率):

image

可以看到,上圖中每個節點都有一個機率表,表示當前節點在其父節點的條件下(後驗機率),不同取值的機率。透過機率表,可以方便地找到每個事件發生與否的可能性。比如:

說明在發生地震、沒有發生入室盜竊的情況下,警報器響鈴的機率

該事件定在了警報器,那麼,只需要在警報器的機率表中尋找“+e、-b、+a”的機率,得到結果0.29。


四、機率推理

機率推理屬於推理的一種形式,是根據一系列不確定的資訊作出決定時的推理。比如,仍然是第三節中警報網路的例子,其中一個機率推理可以是:

John給主人打電話,警報響了,在這種情況下發生入室盜竊的機率。

實際上,機率推理在實際生活中應用非常廣泛,比如醫療行業。我們去醫院進行多項檢查,會得到很多結果。那麼如果推斷我們可能會有哪些疾病呢?就可以根據一系列檢查數值作為前提,進行機率推理,從而得出患有某種疾病的機率。

機率推理是基於貝葉斯網路及其機率表進行計算的。機率表是根據一個節點的父節點進行條件機率計算得到的,然而只有機率表中的條件機率並不足夠推理,但是它可以作為機率推理計算的基礎。

機率推理有大類:精確推理和近似推理。我們依次進行介紹。


4.1 精確推理

顧名思義,精確推理需要完整地計算從而得到結果。我們透過例子來理解精確推理。

舉一個醫療相關例子:

image

上圖是一個貝葉斯網路圖,其中機率表已經給出。下面,需要計算:

  • 在一個人戴口罩(Mask+)、患了咽炎(Pharyngitis+)且沒有密接(Close Contact-)的情況下,他吸菸(Smoke+)的機率。

這看似是一個很奇怪的問題,事實上,透過機率推理,可以得出結果,因為這是一個簡單的條件機率:

\(P(S+|M+,P+,CC-)\) = \(P(S+,M+,P+,CC-) \over P(M+,P+,CC-)\)

= \(P(S+,M+,P+,CC-) \over {P(S+,M+,P+,CC-) + P(S-,M+,P+,CC-)}\)

現在,只需要計算\(P(S+,M+,P+,CC-)\)\(P(S-,M+,P+,CC-)\),即可得到目標結果。

其中,
image

image

其中,聯合機率計算透過3.2節介紹的Parent原則得到,這裡不再贅述。

可以看到,未參與聯合機率運算的隱變數,需要對其每個可能的取值都取一遍。因為在這個例子中,F,V,C的取值均為“取或不取”兩種,所以可以看到,每個隱變數都需要取+和-兩個值。這時,∑求和項數為 \(2^n,(n=3)\)

為何將分母拆成兩項?不拆開不也是計算分子和分母兩個聯合機率嗎?其實拆開後更加簡單,因為原分母有三個變數已知,S、C、F、V四個變數未知,這樣會增加計算項數。即∑求和項數會從\(2^3\)增加到\(2^4\)個。

其中,聯合機率分解後的條件機率或先驗機率,均可以在機率表中查閱到,進行計算即可得到最終結果。


4.2 近似推理

可以看到,精確推理計算複雜度非常高,上述例子僅僅是三個隱變數,就已經需要大量計算了。在實際情況下,隱變數個數甚至可以為百餘個,假設每個變數取值有兩個,那麼也需要\(2^{100}\)項,這是無法在短時間計算出結果。

此時,需要進行近似推理。近似推理的思想就是取樣。取樣是以機率論相關知識作為背景的,即:從一個總體中取樣,那麼得到的樣本是可以近似總體的,因為樣本和總體具有一致性。

近似推理有三種方法:隨機數生成法、拒絕取樣和似然加權取樣。下面分別進行介紹。


4.2.1 隨機數生成法

對於精確計算比較複雜的情況,可以使用隨機數生成器進行取樣,得到樣本來進行近似估計。

舉一個例子以更好理解,貝葉斯網路和機率表見下圖:

image

其中,Cloudy表示是否是多雲天氣;Sprinkler表示草叢澆灌裝置是否工作;Rain表示是否下雨;WetGrass表示草叢是否乾燥。

現在問:

草叢不是乾燥的,那麼今天下雨的機率是多少?

如果進行精確推理,需要計算:

\(P(+R|-W)\) = \(P(+R,-W) \over P(-W)\)

= \(P(+R,-W) \over {P(+R,-W) + P(-R,-W)}\)

除W、R外,還有隱變數C,S,即共需要計算 \(2 * 2^2\)項,每項需要計算3次乘法,計算量對於人工來說還是有一些的。

那麼,如何使用隨機數生成法呢?步驟如下:

  • 對於n個節點,需要n個隨機數生成器,每個隨機數生成器負責一個節點的隨機數生成;
  • 需要從根節點開始進行隨機數生成,直到所有節點均已生成隨機數;
  • 對於每個節點,根據隨機數的範圍(0-1)進行選擇(e.g. +或者-);
  • 需要注意的是,父節點的選擇,會影響其選擇,具體可透過下面例子感受。
根據上述步驟,我們實際操作一遍。

1.首先根節點C的隨機數生成器開始工作,假設生成了隨機數0.3,即對應了+C;
2.下面節點S的隨機數生成器開始工作,假設生成了隨機數0.6。請注意!S是要受父節點C的選擇的影響。
  因為C選擇了+C,那麼就要在+C的條件下去對應0.6,得到了結果-S;
3.同理,假設節點R的隨機數生成器生成了0.4,那麼需要在+C的條件下去對應0.4,得到了結果+R;
4.節點W的隨機數生成器生成了0.9,那麼需要在-S和+R的條件下對應0.9,得到了結果+W。

這一次生成得到的結果是:
+C -S +R +W  (1)

假設接下來生成的結果如下:
-C +S -R -W  (2)
+C -S +R -W  (3)
+C -S +R +W  (4)
-C +S -R +W  (5)
...

還記得問題嗎?

草叢不是乾燥的,那麼今天下雨的機率是多少?

如何透過上述生成的5個樣本,來估計這個機率?

  • 首先,要找到符合結果的樣本,即草叢不是乾燥的:-W;
  • 然後,在符合-W的樣本中,去計算下雨:+R的機率。

得到的5個樣本中,符合-W的是(2)(3)樣本,其中+R的是(3),那麼可以得到問題的答案是:50%。

(因為樣本過少,得到的結果不夠準確。這裡是用頻率來估計機率,考慮伯努利大數定律,當樣本數量足夠大時,頻率是依機率收斂到機率的。)


4.2.2 拒絕取樣

考慮4.2.1中的問題,其中只有W和R兩個變數用到了,而隱變數C和S完全沒有用到,但是使用隨機數生成法時,仍然耗費時間去生成了它們對應的隨機數了。

所以,可以考慮在生成隨機數的過程中檢測是否是一定不符合需要的一個結果,如果是,則在中途就停止本次結果的生成,這可以減少一定的時間耗費。

仍然是4.2.1中的問題,因為我們需要-W和+R的結果,那麼,可以在檢測到+W或者-R時,直接停止本次結果生成:

+C -S +R (停止)  (1)
-C +S (停止) (停止)  (2)
+C -S +R -W  (3)
+C -S +R (停止)  (4)
-C +S (停止) (停止)  (5)
...

這就是所謂的拒絕取樣,即,拒絕繼續取樣每個結果中對計算機率無用的部分。


4.2.3 似然加權取樣

拒絕取樣的確可以減少一定的計算量,但是還不夠徹底。因為中途停止的一次結果浪費掉了,但仍然耗費了一定的時間。

那麼,可不可以直接生成完全符合目標的依次結果呢?答案是可以的。

仍然以4.2.1中的問題為例:

草叢不是乾燥的,那麼今天下雨的機率是多少?

其中只有一個條件,那就是-W,那麼此時就把-W固定,即相當於讓每次結果中W的值都為-W,然後其餘的變數結果繼續隨機生成。透過這樣,可以完全減少一個變數的隨機生成,假設前5次的結果如下:

+C -S +R | -W  (1)
-C +S -R | -W  (2)
+C -S +R | -W  (3)
+C -S +R | -W  (4)
-C +S -R | -W  (5)

現在,我們需要在-W的基礎上計算+R的機率,得到結果60%。

但是,這真的是正確的嗎?不正確。

因為我們定了一個大前提,就是-W。也就是說,現在W一定是-W,這很顯然是不正確的。

此時,需要進行似然加權,即給每一行結果加上一個機率權值。這個機率權值,就是我們定的變數值發生的機率是多少,這個機率就是這個變數的機率表中對應本行中其父節點們的取值的那一行。來看例子(下圖是4.2.1節中的機率表,為了方便這裡再次引用):

image

比如:W的父節點們是S和R,在(1)行中,取值是-S和+R,那麼就是在\(P(W|S,R)\)這個機率表中找對應-W,-S和+R的那一行,其機率是0.1。依次得到其餘行的機率表中的機率:

+C -S +R | -W  (1) p = 0.1
-C +S +R | -W  (2) p = 0.01
+C -S +R | -W  (3) p = 0.1
+C -S -R | -W  (4) p = 0.99
-C +S -R | -W  (5) p = 0.1

其中p是發生機率,也就是權值。

這個權值代表什麼?因為這個權值表示:這一個結果出現的機率是p,可以認為,現在並不是一個結果,而是“p”個結果。比如(1),其p=0.1,可以理解為,如果這一條結果出現了0.1次。

這樣,我們在計算頻率時,不應該將一行當作一個資料看,而是應該當作p個看,此時,要計算-W的前提下+R出現的機率,就應該是:

\((0.1 + 0.01 + 0.1) \over (0.1+0.01+0.1+0.99+0.1)\) = \(16\%\)

這就是似然加權估計,即,每一條結果不是一個結果,而是出現的機率個結果。


五、樸素貝葉斯網路分類器(Naive Bayesian Classifier)

這裡只做簡單介紹。

所謂樸素,就是簡單的意思。

一個樸素貝葉斯網路只有一個根節點,其餘全部是葉子節點:

image

透過這個貝葉斯網路,我們可以計算:
image
image

(這裡用到了“3.1貝葉斯網路三種連線方式”的知識)

假設\(T_1\)-\(T_n\)是一次體檢的各項指標,那麼A就可以是體檢的一個結果(某項疾病)。

參考資料

1.東北大學 高階人工智慧 2022秋
2.https://blog.csdn.net/cxjoker/article/details/81878188

相關文章