0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

貝葉斯網(wǎng)絡(luò)的因果關(guān)系檢測(Python)

數(shù)據(jù)分析與開發(fā) ? 來源:Python數(shù)據(jù)科學(xué) ? 2023-10-16 15:31 ? 次閱讀

在機(jī)器學(xué)任務(wù)中,確定變量間的因果關(guān)系(causality)可能是一個(gè)具有挑戰(zhàn)性的步驟,但它對于建模工作非常重要。本文將總結(jié)有關(guān)貝葉斯概率(Bayesian probabilistic)因果模型(causal models)的概念,然后提供一個(gè)Python實(shí)踐教程,演示如何使用貝葉斯結(jié)構(gòu)學(xué)習(xí)來檢測因果關(guān)系。

1. 背景

在許多領(lǐng)域,如預(yù)測、推薦系統(tǒng)、自然語言處理等,使用機(jī)器學(xué)習(xí)技術(shù)已成為獲取有用觀察和進(jìn)行預(yù)測的標(biāo)準(zhǔn)工具。

雖然機(jī)器學(xué)習(xí)技術(shù)可以實(shí)現(xiàn)良好的性能,但提取與目標(biāo)變量的因果關(guān)系并不直觀。換句話說,就是:哪些變量對目標(biāo)變量有直接的因果影響? 機(jī)器學(xué)習(xí)的一個(gè)分支是貝葉斯概率圖模型(Bayesian probabilistic graphical models),也稱為貝葉斯網(wǎng)絡(luò)(Bayesian networks, BN),可用于確定這些因果因素。

1de9f240-6bd8-11ee-939d-92fbcf53809c.png

在我們深入討論因果模型的技術(shù)細(xì)節(jié)之前,讓我們先復(fù)習(xí)一些術(shù)語:包括"相關(guān)性"(correlation)和"關(guān)聯(lián)性"(association)。 注意,相關(guān)性或關(guān)聯(lián)性并不等同于因果關(guān)系。換句話說,兩個(gè)變量之間的觀察到的關(guān)系并不一定意味著一個(gè)導(dǎo)致了另一個(gè)。從技術(shù)上講,相關(guān)性指的是兩個(gè)變量之間的線性關(guān)系,而關(guān)聯(lián)性則指的是兩個(gè)(或更多)變量之間的任何關(guān)系。而因果關(guān)系則意味著一個(gè)變量(通常稱為預(yù)測變量或自變量)導(dǎo)致另一個(gè)變量(通常稱為結(jié)果變量或因變量)。接下來,我將通過示例簡要描述相關(guān)性和關(guān)聯(lián)性。

1.1. 相關(guān)性

皮爾遜相關(guān)系數(shù)(Pearson correlation coefficient)是最常用的相關(guān)系數(shù)。系數(shù)強(qiáng)度由r表示,取值區(qū)間-1到1。 在使用相關(guān)性時(shí),有三種可能的結(jié)果:

正相關(guān):兩個(gè)變量之間存在一種關(guān)系,即兩個(gè)變量同時(shí)朝同一方向移動(dòng)。

負(fù)相關(guān):兩個(gè)變量之間存在一種關(guān)系,即一個(gè)變量增加與另一個(gè)變量減少相關(guān)聯(lián)。

無相關(guān)性:當(dāng)兩個(gè)變量之間沒有關(guān)系時(shí)。

正相關(guān)的一個(gè)示例如圖 1 所示,圖中展示了巧克力消費(fèi)與每個(gè)國家的諾貝爾獎(jiǎng)獲得者數(shù)量之間的關(guān)系。

1e07bfa0-6bd8-11ee-939d-92fbcf53809c.png

圖1:巧克力消費(fèi)與諾貝爾獎(jiǎng)獲得者之間的相互關(guān)系 巧克力消費(fèi)可能意味著諾貝爾獎(jiǎng)獲得者增加?;蛘叻催^來,諾貝爾獎(jiǎng)獲得者的增加同樣可能導(dǎo)致巧克力消費(fèi)增加。盡管存在強(qiáng)烈的相關(guān)性,但更有可能的是未觀察到的變量,如社會(huì)經(jīng)濟(jì)地位或教育系統(tǒng)質(zhì)量,可能導(dǎo)致巧克力消費(fèi)和諾貝爾獎(jiǎng)獲得者數(shù)量的增加。 換句話說,我們?nèi)匀徊恢肋@種關(guān)系是否是因果關(guān)系。但這并不意味著相關(guān)性本身沒有用處,它只是有著不同的目的。 相關(guān)性本身并不意味著因果關(guān)系,因?yàn)榻y(tǒng)計(jì)關(guān)系并不能唯一限制因果關(guān)系。

1.1.2. 關(guān)聯(lián)性?

當(dāng)我們談?wù)撽P(guān)聯(lián)性時(shí),我們指的是一個(gè)變量的某些值傾向于與另一個(gè)變量的某些值共同出現(xiàn)。 從統(tǒng)計(jì)學(xué)的角度來看,有許多關(guān)聯(lián)性測量方法,例如卡方檢驗(yàn)(chi-square test)、費(fèi)舍爾精確檢驗(yàn)(Fisher exact test)、超幾何檢驗(yàn)(hypergeometric test)等。它們通常用于其中一個(gè)或兩個(gè)變量為有序(ordinal)或名義(nominal)變量的情況。 注意:相關(guān)性是一個(gè)技術(shù)術(shù)語,而關(guān)聯(lián)性不是,因此在統(tǒng)計(jì)學(xué)中對其含義并不總是一致的。這意味著在使用這些術(shù)語時(shí),明確說明其含義總是一個(gè)好的做法。 為了舉例說明,我將使用超幾何檢驗(yàn)來演示是否存在兩個(gè)變量之間的關(guān)聯(lián)性,使用泰坦尼克號數(shù)據(jù)集。 泰坦尼克號數(shù)據(jù)集在許多機(jī)器學(xué)習(xí)示例中都有使用,眾所周知,性別(女性)是生存的一個(gè)很好的預(yù)測因子。讓我演示一下如何計(jì)算幸存和女性之間的關(guān)聯(lián)性。 首先,安裝 bnlearn 庫,并僅加載泰坦尼克號數(shù)據(jù)集。問:女性幸存的概率是多少?

1e1357ca-6bd8-11ee-939d-92fbcf53809c.png

零假設(shè):幸存與性別之間沒有關(guān)系。超幾何檢驗(yàn)使用超幾何分布來測量離散概率分布的統(tǒng)計(jì)顯著性。在這個(gè)例子中,是總體大小(891),是總體中成功狀態(tài)的數(shù)量(342), 是樣本大小/抽樣次數(shù)(314),是樣本中成功的數(shù)量(233)。

1e232916-6bd8-11ee-939d-92fbcf53809c.png

方程 1:使用超幾何檢驗(yàn)測試幸存與女性之間的關(guān)聯(lián)性

在的顯著性水平下,我們可以拒絕零假設(shè),因此可以說幸存和女性之間存在統(tǒng)計(jì)顯著的關(guān)聯(lián)。 注意,關(guān)聯(lián)性本身并不意味著因果關(guān)系。我們需要區(qū)分邊際關(guān)聯(lián)(marginal)和條件關(guān)聯(lián)(conditional)。后者是因果推斷的關(guān)鍵構(gòu)建模塊。

2. 因果關(guān)系

什么是因果關(guān)系(causality)? 因果關(guān)系意味著一個(gè)independent變量導(dǎo)致另一個(gè)dependent變量,并由 Reichenbach(1956)如下所述:

如果兩個(gè)隨機(jī)變量 和 在統(tǒng)計(jì)上相關(guān)(),那么要么(a)導(dǎo)致 ,(b)導(dǎo)致 ,或者(c)存在一個(gè)第三個(gè)變量 同時(shí)導(dǎo)致 和。此外,給定的條件下, 和 變得獨(dú)立,即 。

這個(gè)定義被納入貝葉斯圖模型中。

貝葉斯圖模型又稱貝葉斯網(wǎng)絡(luò)、貝葉斯信念網(wǎng)絡(luò)、Bayes Net、因果概率網(wǎng)絡(luò)和影響圖。都是同一技術(shù),不同的叫法。

為了確定因果關(guān)系,我們可以使用貝葉斯網(wǎng)絡(luò)(BN)。 讓我們從圖形開始,并可視化 Reichenbach 所描述的三個(gè)變量之間的統(tǒng)計(jì)依賴關(guān)系(參見圖 2)。節(jié)點(diǎn)對應(yīng)變量,有向邊(箭頭)表示依賴關(guān)系或條件分布。

1e2da2ec-6bd8-11ee-939d-92fbcf53809c.png

圖 2:有向無環(huán)圖(DAG)編碼條件獨(dú)立性。(a、b、c)是等價(jià)類。(a、b)級聯(lián),(c)共同父節(jié)點(diǎn),(d)是具有 V 結(jié)構(gòu)的特殊類別 可以創(chuàng)建四個(gè)圖:(a、b)級聯(lián),(c)共同父節(jié)點(diǎn)和(d)V 結(jié)構(gòu),這些圖構(gòu)成了貝葉斯網(wǎng)絡(luò)的基礎(chǔ)。 但是我們?nèi)绾未_定什么是造成什么的原因?(how can we tell what causes what?) 確定因果關(guān)系的概念思想是通過將一個(gè)節(jié)點(diǎn)保持不變,然后觀察其影響來確定因果關(guān)系的方向,即哪個(gè)節(jié)點(diǎn)影響哪個(gè)節(jié)點(diǎn)。 舉個(gè)例子,讓我們看一下圖 2 中的有向無環(huán)圖 DAG(a),它描述了 由 引起, 由引起。如果我們現(xiàn)在將 保持不變,如果這個(gè)模型是正確的, 不應(yīng)該發(fā)生變化。每個(gè)貝葉斯網(wǎng)絡(luò)都可以用這四個(gè)圖來描述,并且通過概率論(參見下面的部分),我們可以將這些部分組合起來。

需要注意的是,貝葉斯網(wǎng)絡(luò)是有向無環(huán)圖(Directed Acyclic Graph, DAG),而 DAG 是具有因果性的。這意味著圖中的邊是有向的,并且沒有(反饋)循環(huán)(無環(huán))。

2.1. 概率論

概率論,或者更具體地說貝葉斯定理或貝葉斯規(guī)則,構(gòu)成了貝葉斯網(wǎng)絡(luò)的基礎(chǔ)。 貝葉斯規(guī)則用于更新模型信息,數(shù)學(xué)上表示如下方程式:

1e38986e-6bd8-11ee-939d-92fbcf53809c.png

方程式由四個(gè)部分組成:

后驗(yàn)概率(posterior probability)是給定 發(fā)生的概率。

條件概率(conditional probability)或似然是在假設(shè)成立的情況下,證據(jù)發(fā)生的概率。這可以從數(shù)據(jù)中推導(dǎo)出來。

我們的先驗(yàn)(prior)信念是在觀察到證據(jù)之前,假設(shè)的概率。這也可以從數(shù)據(jù)或領(lǐng)域知識中推導(dǎo)出來。

最后,邊際(marginal)概率描述了在所有可能的假設(shè)下新證據(jù)發(fā)生的概率,需要計(jì)算。如果您想了解更多關(guān)于(分解的)概率分布或貝葉斯網(wǎng)絡(luò)的聯(lián)合分布的詳細(xì)信息,請閱讀這篇博客[6]。

3. 貝葉斯結(jié)構(gòu)學(xué)習(xí)用于估計(jì) DAG

通過結(jié)構(gòu)學(xué)習(xí),我們希望確定最能捕捉數(shù)據(jù)集中變量之間因果依賴關(guān)系的圖結(jié)構(gòu)。 換句話說:什么樣的 DAG 最適合數(shù)據(jù)? 一種樸素的方法是簡單地創(chuàng)建所有可能的圖結(jié)構(gòu)組合,即創(chuàng)建成十個(gè)、幾百個(gè)甚至幾千個(gè)不同的 DAG,直到所有組合都耗盡為止。 然后,可以根據(jù)數(shù)據(jù)的適應(yīng)度對每個(gè) DAG 進(jìn)行評分。 最后,返回得分最高的 DAG。 在僅有變量X的情況下,可以創(chuàng)建如圖 2 所示的圖形以及更多的圖形,因?yàn)椴粌H可以是 X>Z>Y(圖 2a),還可以是 Z>X>Y 等等。變量X可以是布爾值(True 或 False),也可以有多個(gè)狀態(tài)。 DAG 的搜索空間在最大化得分的變量數(shù)量上呈指數(shù)增長。這意味著在大量節(jié)點(diǎn)的情況下,窮舉搜索是不可行的,因此已經(jīng)提出了各種貪婪策略來瀏覽 DAG 空間。 通過基于優(yōu)化的搜索方法,可以瀏覽更大的 DAG 空間。這種方法需要一個(gè)評分函數(shù)和一個(gè)搜索策略。 常見的評分函數(shù)是給定訓(xùn)練數(shù)據(jù)的結(jié)構(gòu)的后驗(yàn)概率,例如BIC或BDeu。

BIC是貝葉斯信息準(zhǔn)則(Bayesian Information Criterion)的縮寫。它是一種用于模型選擇的統(tǒng)計(jì)量,可以用于比較不同模型的擬合能力。BIC值越小,表示模型越好。在貝葉斯網(wǎng)絡(luò)中,BIC是一種常用的評分函數(shù)之一,用于評估貝葉斯網(wǎng)絡(luò)與數(shù)據(jù)的擬合程度。

BDeu是貝葉斯-狄利克雷等價(jià)一致先驗(yàn)(Bayesian-Dirichlet equivalent uniform prior)的縮寫。它是一種常用的評分函數(shù)之一,用于評估貝葉斯網(wǎng)絡(luò)與數(shù)據(jù)的擬合程度。BDeu評分函數(shù)基于貝葉斯-狄利克雷等價(jià)一致先驗(yàn),該先驗(yàn)假設(shè)每個(gè)變量的每個(gè)可能狀態(tài)都是等可能的。

在我們開始示例之前,了解何時(shí)使用哪種技術(shù)總是很好的。在搜索整個(gè) DAG 空間并找到最適合數(shù)據(jù)的圖形的過程中,有兩種廣泛的方法。

基于評分的結(jié)構(gòu)學(xué)習(xí)

基于約束的結(jié)構(gòu)學(xué)習(xí)

3.1. 基于評分的結(jié)構(gòu)學(xué)習(xí)

基于評分的方法有兩個(gè)主要組成部分:

搜索算法用于優(yōu)化所有可能的 DAG 搜索空間;例如 ExhaustiveSearch、Hillclimbsearch、Chow-Liu 等。

評分函數(shù)指示貝葉斯網(wǎng)絡(luò)與數(shù)據(jù)的匹配程度。常用的評分函數(shù)是貝葉斯狄利克雷分?jǐn)?shù),如 BDeu 或 K2,以及貝葉斯信息準(zhǔn)則(BIC,也稱為 MDL)。

下面描述了四種常見的基于評分的方法:

ExhaustiveSearch,顧名思義,對每個(gè)可能的 DAG 進(jìn)行評分并返回得分最高的 DAG。這種搜索方法僅適用于非常小的網(wǎng)絡(luò),并且阻止高效的局部優(yōu)化算法始終找到最佳結(jié)構(gòu)。因此,通常無法找到理想的結(jié)構(gòu)。然而,如果只涉及少數(shù)節(jié)點(diǎn)(即少于 5 個(gè)左右),啟發(fā)式搜索策略通常會(huì)產(chǎn)生良好的結(jié)果。

Hillclimbsearch 是一種啟發(fā)式搜索方法,可用于使用更多節(jié)點(diǎn)的情況。HillClimbSearch 實(shí)施了一種貪婪的局部搜索,從 DAG“start”(默認(rèn)為斷開的 DAG)開始,通過迭代執(zhí)行最大化增加評分的單邊操作。搜索在找到局部最大值后終止。

Chow-Liu 算法是一種特定類型的基于樹的方法。Chow-Liu 算法找到最大似然樹結(jié)構(gòu),其中每個(gè)節(jié)點(diǎn)最多只有一個(gè)父節(jié)點(diǎn)。通過限制為樹結(jié)構(gòu),可以限制復(fù)雜性。

Tree-augmented Naive Bayes(TAN)算法也是一種基于樹的方法,可用于建模涉及許多不確定性的龐大數(shù)據(jù)集的各種相互依賴特征集。

3.2. 基于約束的結(jié)構(gòu)學(xué)習(xí)

一種不同但相當(dāng)直觀的構(gòu)建 DAG 的方法是使用假設(shè)檢驗(yàn)(如卡方檢驗(yàn)統(tǒng)計(jì)量)來識別數(shù)據(jù)集中的獨(dú)立性。 這種方法依賴于統(tǒng)計(jì)檢驗(yàn)和條件假設(shè),以學(xué)習(xí)模型中變量之間的獨(dú)立性。 卡方檢驗(yàn)的值是觀察到的計(jì)算卡方統(tǒng)計(jì)量的概率,假設(shè)空設(shè)為 和 在給定 的條件下是獨(dú)立的。這可以用于在給定顯著性水平的情況下進(jìn)行獨(dú)立判斷。 約束性方法的一個(gè)示例是 PC 算法,它從一個(gè)完全連接的圖開始,并根據(jù)測試的結(jié)果刪除邊,如果節(jié)點(diǎn)是獨(dú)立的,直到達(dá)到停止準(zhǔn)則。

4. 實(shí)踐:基于bnlearn 庫

下面介紹Python中的學(xué)習(xí)貝葉斯網(wǎng)絡(luò)圖形結(jié)構(gòu)的庫——bnlearn。 bnlearn能解決一些挑戰(zhàn),如:

結(jié)構(gòu)學(xué)習(xí):給定數(shù)據(jù):估計(jì)捕捉變量之間依賴關(guān)系的 DAG。

參數(shù)學(xué)習(xí):給定數(shù)據(jù)和 DAG:估計(jì)各個(gè)變量的(條件)概率分布。

推斷:給定學(xué)習(xí)的模型:確定查詢的精確概率值。

bnlearn 相對于其他貝葉斯分析實(shí)現(xiàn)有如下優(yōu)勢:

基于 pgmpy 庫構(gòu)建

包含最常用的貝葉斯管道

簡單直觀

開源

詳細(xì)文檔

4.1. 在灑水器數(shù)據(jù)集中進(jìn)行結(jié)構(gòu)學(xué)習(xí)

讓我們從一個(gè)簡單而直觀的示例開始,以演示結(jié)構(gòu)學(xué)習(xí)的工作原理。 假設(shè)你在后院安裝了一個(gè)灑水系統(tǒng),并且在過去的 1000 天里,你測量了四個(gè)變量,每個(gè)變量有兩個(gè)狀態(tài):雨(是或否),多云(是或否),灑水系統(tǒng)(開啟或關(guān)閉)和濕草(是或否)。 下面,導(dǎo)入 bnlearn 庫,加載灑水器數(shù)據(jù)集,并確定哪個(gè) DAG 最適合該數(shù)據(jù)。

使用 bnlearn 庫,用幾行代碼就能確定因果關(guān)系。

請注意,灑水器數(shù)據(jù)集已經(jīng)過處理,沒有缺失值,所有值都處于 1 或 0 的狀態(tài)。

1e492346-6bd8-11ee-939d-92fbcf53809c.png

1e69e2ac-6bd8-11ee-939d-92fbcf53809c.png

圖 3:灑水器系統(tǒng)的最佳 DAG 示例。它表示以下邏輯:草地潮濕的概率取決于灑水器和雨水。灑水器打開的概率取決于多云的狀態(tài)。下雨的概率取決于多云的狀態(tài) 這樣,我們有了如圖 3 所示的學(xué)習(xí)到的結(jié)構(gòu)。檢測到的 DAG 由四個(gè)通過邊連接的節(jié)點(diǎn)組成,每條邊表示一種因果關(guān)系。

濕草的狀態(tài)取決于兩個(gè)節(jié)點(diǎn),即雨水和灑水器;

雨水的狀態(tài)由多云的狀態(tài)決定;?

?而灑水器的狀態(tài)也由多云的狀態(tài)決定。

這個(gè) DAG 表示了(因式分解的)概率分布,其中 S 是灑水器的隨機(jī)變量,R 是雨水的隨機(jī)變量,G 是濕草的隨機(jī)變量,C 是多云的隨機(jī)變量。 通過檢查圖形,很快就會(huì)發(fā)現(xiàn)模型中唯一的獨(dú)立變量是 C。其他變量都取決于多云、下雨和/或?yàn)⑺鞯母怕省?一般來說,貝葉斯網(wǎng)絡(luò)的聯(lián)合分布是每個(gè)節(jié)點(diǎn)在給定其父節(jié)點(diǎn)的條件下的條件概率的乘積: bnlearn 在結(jié)構(gòu)學(xué)習(xí)方面的默認(rèn)設(shè)置是使用hillclimbsearch方法和BIC評分。 值得注意的是,可以指定不同的方法和評分類型。請參考下面的示例以指定搜索和評分類型:

# 'hc' or 'hillclimbsearch' model_hc_bic = bn.structure_learning.fit(df, methodtype='hc', scoretype='bic') model_hc_k2 = bn.structure_learning.fit(df, methodtype='hc', scoretype='k2') model_hc_bdeu = bn.structure_learning.fit(df, methodtype='hc', scoretype='bdeu') # 'ex' or 'exhaustivesearch' model_ex_bic = bn.structure_learning.fit(df, methodtype='ex', scoretype='bic') model_ex_k2 = bn.structure_learning.fit(df, methodtype='ex', scoretype='k2') model_ex_bdeu = bn.structure_learning.fit(df, methodtype='ex', scoretype='bdeu') # 'cs' or 'constraintsearch' model_cs_k2 = bn.structure_learning.fit(df, methodtype='cs', scoretype='k2') model_cs_bdeu = bn.structure_learning.fit(df, methodtype='cs', scoretype='bdeu') model_cs_bic = bn.structure_learning.fit(df, methodtype='cs', scoretype='bic') # 'cl' or 'chow-liu' (requires setting root_node parameter) model_cl = bn.structure_learning.fit(df, methodtype='cl', root_node='Wet_Grass') 盡管灑水器數(shù)據(jù)集的檢測到的 DAG 具有啟示性,并顯示了數(shù)據(jù)集中變量的因果依賴關(guān)系,但它并不能讓你提出各種問題,例如:

如果灑水器關(guān)閉,草地濕潤的概率有多大?

如果灑水器關(guān)閉且多云,下雨的概率有多大?

在灑水器數(shù)據(jù)集中,根據(jù)你對世界的了解和邏輯思考,結(jié)果可能是顯而易見的。但是,一旦你擁有更大、更復(fù)雜的圖形,可能就不再那么明顯了。 通過所謂的推斷,我們可以回答“如果我們做了 會(huì)怎樣”類型的問題,這些問題通常需要進(jìn)行控制實(shí)驗(yàn)和明確的干預(yù)才能回答。

4.2. 如何進(jìn)行推斷?

要進(jìn)行推斷,我們需要兩個(gè)要素:DAG 和條件概率表(Conditional Probabilistic Tables, CPTs)。 此時(shí),我們已經(jīng)將數(shù)據(jù)存儲在數(shù)據(jù)框(df)中,并且已經(jīng)計(jì)算出描述數(shù)據(jù)結(jié)構(gòu)的 DAG。需要使用參數(shù)學(xué)習(xí)計(jì)算 CPTs,以定量地描述每個(gè)節(jié)點(diǎn)與其父節(jié)點(diǎn)之間的統(tǒng)計(jì)關(guān)系。 讓我們首先進(jìn)行參數(shù)學(xué)習(xí),然后再回到推斷的過程中。

4.2.1. 參數(shù)學(xué)習(xí)

參數(shù)學(xué)習(xí)是估計(jì)條件概率表(CPTs)的值的任務(wù)。 bnlearn 庫支持離散和連續(xù)節(jié)點(diǎn)的參數(shù)學(xué)習(xí):

最大似然估計(jì)是使用變量狀態(tài)出現(xiàn)的相對頻率進(jìn)行的自然估計(jì)。在對貝葉斯網(wǎng)絡(luò)進(jìn)行參數(shù)估計(jì)時(shí),數(shù)據(jù)不足是一個(gè)常見問題,最大似然估計(jì)器存在對數(shù)據(jù)過擬合的問題。換句話說,如果觀察到的數(shù)據(jù)對于基礎(chǔ)分布來說不具有代表性(或者太少),最大似然估計(jì)可能會(huì)相差甚遠(yuǎn)。例如,如果一個(gè)變量有 3 個(gè)可以取 10 個(gè)狀態(tài)的父節(jié)點(diǎn),那么狀態(tài)計(jì)數(shù)將分別針對個(gè)父節(jié)點(diǎn)配置進(jìn)行。這使得最大似然估計(jì)對學(xué)習(xí)貝葉斯網(wǎng)絡(luò)參數(shù)非常脆弱。減輕最大似然估計(jì)過擬合的一種方法是貝葉斯參數(shù)估計(jì)。

貝葉斯估計(jì)從已存在的先驗(yàn) CPTs 開始,這些 CPTs 表示在觀察到數(shù)據(jù)之前我們對變量的信念。然后,使用觀察數(shù)據(jù)的狀態(tài)計(jì)數(shù)來更新這些“先驗(yàn)”。可以將先驗(yàn)視為偽狀態(tài)計(jì)數(shù),在歸一化之前將其添加到實(shí)際計(jì)數(shù)中。一個(gè)非常簡單的先驗(yàn)是所謂的 K2 先驗(yàn),它只是將“1”添加到每個(gè)單獨(dú)狀態(tài)的計(jì)數(shù)中。一個(gè)更明智的先驗(yàn)選擇是 BDeu(貝葉斯狄利克雷等效均勻先驗(yàn))。

我繼續(xù)使用灑水器數(shù)據(jù)集來學(xué)習(xí)其參數(shù),并檢測條件概率表(CPTs)。 要學(xué)習(xí)參數(shù),我們需要一個(gè)有向無環(huán)圖(DAG)和一個(gè)具有完全相同變量的數(shù)據(jù)集。 思路是將數(shù)據(jù)集與 DAG 連接起來。在之前的示例中,我們已經(jīng)計(jì)算出了 DAG(圖 3)。

1e71e6b4-6bd8-11ee-939d-92fbcf53809c.png

如果你已經(jīng)到達(dá)這一點(diǎn),您已經(jīng)使用最大似然估計(jì)(MLE)基于 DAG 和輸入數(shù)據(jù)集 df 計(jì)算了 CPTs(圖 4)。請注意,為了清晰起見,CPTs 在圖 4 中包含在內(nèi)。

1e7865ca-6bd8-11ee-939d-92fbcf53809c.png

圖 4:使用最大似然估計(jì)進(jìn)行參數(shù)學(xué)習(xí)推導(dǎo)的 CPTs 使用 MLE 計(jì)算 CPTs 非常簡單,讓我通過示例來演示一下,手動(dòng)計(jì)算節(jié)點(diǎn) Cloudy 和 Rain 的 CPTs。

# Examples to illustrate how to manually compute MLE for the node Cloudy and Rain:# Compute CPT for the Cloudy Node:# This node has no conditional dependencies and can easily be computed as following:# P(Cloudy=0)sum(df['Cloudy']==0) / df.shape[0] # 0.488# P(Cloudy=1)sum(df['Cloudy']==1) / df.shape[0] # 0.512# Compute CPT for the Rain Node:# This node has a conditional dependency from Cloudy and can be computed as following:# P(Rain=0 | Cloudy=0)sum( (df['Cloudy']==0) & (df['Rain']==0) ) / sum(df['Cloudy']==0) # 394/488 = 0.807377049# P(Rain=1 | Cloudy=0)sum( (df['Cloudy']==0) & (df['Rain']==1) ) / sum(df['Cloudy']==0) # 94/488 = 0.192622950# P(Rain=0 | Cloudy=1)sum( (df['Cloudy']==1) & (df['Rain']==0) ) / sum(df['Cloudy']==1) # 91/512 = 0.177734375# P(Rain=1 | Cloudy=1)sum( (df['Cloudy']==1) & (df['Rain']==1) ) / sum(df['Cloudy']==1) # 421/512 = 0.822265625請注意,條件依賴關(guān)系可能基于有限的數(shù)據(jù)點(diǎn)。例如,基于 91 個(gè)觀測結(jié)果。如果 Rain 有更多的狀態(tài)和/或更多的依賴關(guān)系,這個(gè)數(shù)字可能會(huì)更低。更多的數(shù)據(jù)是否是解決方案?也許是,也許不是。只要記住,即使總樣本量非常大,由于狀態(tài)計(jì)數(shù)是針對每個(gè)父節(jié)點(diǎn)的配置進(jìn)行條件計(jì)數(shù),這也可能導(dǎo)致分段。與 MLE 方法相比,查看 CPT 與之間的差異。

1e85189c-6bd8-11ee-939d-92fbcf53809c.png

4.2.2. 在 Sprinkler 數(shù)據(jù)集上進(jìn)行推理

進(jìn)行推理需要貝葉斯網(wǎng)絡(luò)具備兩個(gè)主要組成部分:描述數(shù)據(jù)結(jié)構(gòu)的有向無環(huán)圖(DAG)和描述每個(gè)節(jié)點(diǎn)與其父節(jié)點(diǎn)之間的統(tǒng)計(jì)關(guān)系的條件概率表(CPT)。到目前為止,您已經(jīng)擁有數(shù)據(jù)集,使用結(jié)構(gòu)學(xué)習(xí)計(jì)算了 DAG,并使用參數(shù)學(xué)習(xí)估計(jì)了 CPT?,F(xiàn)在可以進(jìn)行推理了! 在推理中,我們使用一種稱為變量消除的過程來邊緣化變量。變量消除是一種精確的推理算法。通過簡單地將求和替換為最大函數(shù),它還可以用于確定具有最大概率的網(wǎng)絡(luò)狀態(tài)。不足之處是,對于大型的貝葉斯網(wǎng)絡(luò),它可能在計(jì)算上是棘手的。在這些情況下,可以使用基于采樣的近似推理算法,如 Gibbs 采樣或拒絕采樣 [7]。 使用 bnlearn,我們可以進(jìn)行如下的推理:

1e8e725c-6bd8-11ee-939d-92fbcf53809c.png

1e99481c-6bd8-11ee-939d-92fbcf53809c.png

現(xiàn)在我們已經(jīng)得到了我們的問題的答案:

如果噴灌系統(tǒng)關(guān)閉,草坪潮濕的可能性有多大?P(Wet_grass=1 | Sprinkler=0) = 0.51 如果噴灌系統(tǒng)關(guān)閉并且天陰,有下雨的可能性有多大?P(Rain=1 | Sprinkler=0, Cloudy=1) = 0.663

4.3. 我如何知道我的因果模型是正確的?

如果僅使用數(shù)據(jù)來計(jì)算因果圖,很難完全驗(yàn)證因果圖的有效性和完整性。然而,有一些解決方案可以幫助增加對因果圖的信任。例如,可以對變量集之間的某些條件獨(dú)立性或依賴性關(guān)系進(jìn)行經(jīng)驗(yàn)性測試。如果它們在數(shù)據(jù)中不存在,則表明因果模型的正確性 ?;蛘?,可以添加先前的專家知識,例如 DAG 或 CPT,以在進(jìn)行推理時(shí)增加對模型的信任。

5. 討論

在本文中,涉及了一些關(guān)于為什么相關(guān)性或關(guān)聯(lián)不等于因果性以及如何從數(shù)據(jù)向因果模型的轉(zhuǎn)變使用結(jié)構(gòu)學(xué)習(xí)的概念。 貝葉斯技術(shù)的優(yōu)勢總結(jié)如下:

后驗(yàn)概率分布的結(jié)果或圖形使用戶能夠?qū)δP皖A(yù)測做出判斷,而不僅僅是獲得單個(gè)值作為結(jié)果。

可以將領(lǐng)域/專家知識納入到 DAG 中,并在不完整信息和缺失數(shù)據(jù)的情況下進(jìn)行推理。這是可能的,因?yàn)樨惾~斯定理基于用證據(jù)更新先驗(yàn)項(xiàng)。

具有模塊化的概念。

通過組合較簡單的部分來構(gòu)建復(fù)雜系統(tǒng)。

圖論提供了直觀的高度交互的變量集。

概率論提供了將這些部分組合在一起的方法。

然而,貝葉斯網(wǎng)絡(luò)的一個(gè)弱點(diǎn)是尋找最佳 DAG 在計(jì)算上很耗時(shí),因?yàn)楸仨殞λ锌赡艿慕Y(jié)構(gòu)進(jìn)行詳盡搜索。 窮舉搜索的節(jié)點(diǎn)限制可以達(dá)到約 15 個(gè)節(jié)點(diǎn),但也取決于狀態(tài)的數(shù)量。如果有更多的節(jié)點(diǎn),就需要使用具有評分函數(shù)和搜索算法的替代方法。盡管如此,要處理具有數(shù)百甚至數(shù)千個(gè)變量的問題,需要使用基于樹或基于約束的方法,并使用變量的黑名單/白名單。這種方法首先確定順序,然后找到該順序的最佳 BN 結(jié)構(gòu)。這意味著在可能的排序搜索空間上進(jìn)行工作,這比網(wǎng)絡(luò)結(jié)構(gòu)空間小得多。 確定因果關(guān)系可能是一項(xiàng)具有挑戰(zhàn)性的任務(wù),但 bnlearn 庫旨在解決其中一些挑戰(zhàn),如結(jié)構(gòu)學(xué)習(xí)、參數(shù)學(xué)習(xí)和推理。它還可以推導(dǎo)出(整個(gè))圖的拓?fù)渑判蚧虮容^兩個(gè)圖。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:貝葉斯網(wǎng)絡(luò)的因果關(guān)系檢測(Python)

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    有用labview做網(wǎng)絡(luò)進(jìn)行故障診斷的朋友嗎?

    有用labview做網(wǎng)絡(luò)進(jìn)行故障診斷的朋友嗎?我雖然有些labview基礎(chǔ),但對
    發(fā)表于 03-10 19:26

    對樸素算法的理解

    我對樸素算法的理解
    發(fā)表于 05-15 14:13

    全概率公式與公式分享

    全概率公式與公式(一)
    發(fā)表于 06-08 15:14

    使用PyMC3包實(shí)現(xiàn)線性回歸

    1、如何使用PyMC3包實(shí)現(xiàn)線性回歸  PyMC3(現(xiàn)在簡稱為PyMC)是一個(gè)建模包
    發(fā)表于 10-08 15:59

    基于網(wǎng)絡(luò)的軟件項(xiàng)目風(fēng)險(xiǎn)評估模型

    針對軟件項(xiàng)目面臨失敗風(fēng)險(xiǎn)的問題,提出一種新的軟件風(fēng)險(xiǎn)評估模型,采用網(wǎng)絡(luò)推理風(fēng)險(xiǎn)發(fā)生的概率,用模糊語言評估風(fēng)險(xiǎn)后果與損失的方法。實(shí)踐證明,通過應(yīng)用基于
    發(fā)表于 04-10 09:35 ?24次下載

    一種基于網(wǎng)絡(luò)的匹配引擎設(shè)計(jì)

    匹配引擎不是簡單的搜索,而是全新的深層次信息挖掘。該文構(gòu)建一種基于網(wǎng)絡(luò)模型的匹配引擎。項(xiàng)目需求中有4種類型的節(jié)點(diǎn)集合,通過建模,設(shè)計(jì)一個(gè)4層
    發(fā)表于 04-17 09:29 ?21次下載

    網(wǎng)絡(luò)精確推理算法的研究

    網(wǎng)絡(luò)是以概率理論為基礎(chǔ)的不確定知識表示模型,
    發(fā)表于 08-15 09:34 ?38次下載

    基于網(wǎng)絡(luò)的故障樹在機(jī)械設(shè)備中的應(yīng)用

    由于故障樹分析方法在可靠性分析中存在局限性,研究網(wǎng)絡(luò)在可靠性分析中的應(yīng)用,給出了故障樹向
    發(fā)表于 02-21 10:24 ?14次下載

    網(wǎng)絡(luò)分析

    網(wǎng)絡(luò)
    發(fā)表于 03-31 10:40 ?2次下載

    如何理解公式

    ? 公式簡介 貝葉斯定理由英國數(shù)學(xué)家 ( Thomas Bayes 1702-176
    發(fā)表于 02-02 14:13 ?3841次閱讀
    如何理解<b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b>公式

    怎樣通俗易懂地解釋網(wǎng)絡(luò)和它的應(yīng)用?

    怎樣通俗易懂地解釋網(wǎng)絡(luò)和它的應(yīng)用?詳情請看下文。
    發(fā)表于 02-02 16:09 ?4112次閱讀
    怎樣通俗易懂地解釋<b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b><b class='flag-5'>網(wǎng)絡(luò)</b>和它的應(yīng)用?

    統(tǒng)計(jì)的一個(gè)實(shí)踐案例讓你更快的對算法有更多的了解

    為了大家可以對算法有更多的了解,為大家整理過一篇關(guān)于算法的文章。今天將為大家介紹利用
    的頭像 發(fā)表于 07-16 17:15 ?1.4w次閱讀

    深度學(xué)習(xí),恰恰是人工“不”智能的體現(xiàn)

    網(wǎng)絡(luò)之父:當(dāng)前的機(jī)器學(xué)習(xí)其實(shí)處于因果關(guān)系之梯的最低層級
    的頭像 發(fā)表于 07-12 10:14 ?2349次閱讀

    基于網(wǎng)絡(luò)和攻擊圖的評估算法

    為準(zhǔn)確評估計(jì)算機(jī)網(wǎng)絡(luò)的脆弱性,結(jié)合網(wǎng)絡(luò)與攻擊圖提出一種新的評估算法。構(gòu)建攻擊圖模型RSAG,在消除攻擊圖中環(huán)路的基礎(chǔ)上,將模型轉(zhuǎn)換成
    發(fā)表于 06-11 14:23 ?9次下載

    具有Event-Argument相關(guān)性的事件因果關(guān)系提取方法

    事件因果關(guān)系識別(ECI)旨在檢測兩個(gè)給定文本事件之間是否存在因果關(guān)系,是事件因果關(guān)系理解的重要任務(wù)。然而,ECI 任務(wù)忽略了關(guān)鍵的事件結(jié)構(gòu)和因果因
    的頭像 發(fā)表于 02-02 14:59 ?1224次閱讀