在機(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),可用于確定這些因果因素。
在我們深入討論因果模型的技術(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)系。
圖1:巧克力消費(fèi)與諾貝爾獎(jiǎng)獲得者之間的相互關(guān)系 巧克力消費(fèi)可能意味著諾貝爾獎(jiǎng)獲得者增加?;蛘叻催^來,諾貝爾獎(jiǎng)獲得者的增加同樣可能導(dǎo)致巧克力消費(fèi)增加。盡管存在強(qiáng)烈的相關(guān)性,但更有可能的是未觀察到的變量,如社會經(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ù)集。問:女性幸存的概率是多少?
零假設(shè):幸存與性別之間沒有關(guān)系。超幾何檢驗(yàn)使用超幾何分布來測量離散概率分布的統(tǒng)計(jì)顯著性。在這個(gè)例子中,是總體大小(891),是總體中成功狀態(tài)的數(shù)量(342), 是樣本大小/抽樣次數(shù)(314),是樣本中成功的數(shù)量(233)。
方程 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)系或條件分布。
圖 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é)上表示如下方程式:
方程式由四個(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ā)式搜索策略通常會產(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)。
圖 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ī)變量。 通過檢查圖形,很快就會發(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ù)雜的圖形,可能就不再那么明顯了。 通過所謂的推斷,我們可以回答“如果我們做了 會怎樣”類型的問題,這些問題通常需要進(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ì)可能會相差甚遠(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)。
如果你已經(jīng)到達(dá)這一點(diǎn),您已經(jīng)使用最大似然估計(jì)(MLE)基于 DAG 和輸入數(shù)據(jù)集 df 計(jì)算了 CPTs(圖 4)。請注意,為了清晰起見,CPTs 在圖 4 中包含在內(nèi)。
圖 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ù)字可能會更低。更多的數(shù)據(jù)是否是解決方案?也許是,也許不是。只要記住,即使總樣本量非常大,由于狀態(tài)計(jì)數(shù)是針對每個(gè)父節(jié)點(diǎn)的配置進(jìn)行條件計(jì)數(shù),這也可能導(dǎo)致分段。與 MLE 方法相比,查看 CPT 與之間的差異。
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)行如下的推理:
現(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è)圖。
-
模型
+關(guān)注
關(guān)注
1文章
3112瀏覽量
48658 -
貝葉斯網(wǎng)絡(luò)
+關(guān)注
關(guān)注
0文章
24瀏覽量
8285 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8349瀏覽量
132312
原文標(biāo)題:貝葉斯網(wǎng)絡(luò)的因果關(guān)系檢測(Python)
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論