在機器學(xué)任務(wù)中,確定變量間的因果關(guān)系(causality)可能是一個具有挑戰(zhàn)性的步驟,但它對于建模工作非常重要。本文將總結(jié)有關(guān)貝葉斯概率(Bayesian probabilistic)因果模型(causal models)的概念,然后提供一個Python實踐教程,演示如何使用貝葉斯結(jié)構(gòu)學(xué)習(xí)來檢測因果關(guān)系。
1. 背景
在許多領(lǐng)域,如預(yù)測、推薦系統(tǒng)、自然語言處理等,使用機器學(xué)習(xí)技術(shù)已成為獲取有用觀察和進行預(yù)測的標準工具。
雖然機器學(xué)習(xí)技術(shù)可以實現(xiàn)良好的性能,但提取與目標變量的因果關(guān)系并不直觀。換句話說,就是:哪些變量對目標變量有直接的因果影響? 機器學(xué)習(xí)的一個分支是貝葉斯概率圖模型(Bayesian probabilistic graphical models),也稱為貝葉斯網(wǎng)絡(luò)(Bayesian networks, BN),可用于確定這些因果因素。
在我們深入討論因果模型的技術(shù)細節(jié)之前,讓我們先復(fù)習(xí)一些術(shù)語:包括"相關(guān)性"(correlation)和"關(guān)聯(lián)性"(association)。 注意,相關(guān)性或關(guān)聯(lián)性并不等同于因果關(guān)系。換句話說,兩個變量之間的觀察到的關(guān)系并不一定意味著一個導(dǎo)致了另一個。從技術(shù)上講,相關(guān)性指的是兩個變量之間的線性關(guān)系,而關(guān)聯(lián)性則指的是兩個(或更多)變量之間的任何關(guān)系。而因果關(guān)系則意味著一個變量(通常稱為預(yù)測變量或自變量)導(dǎo)致另一個變量(通常稱為結(jié)果變量或因變量)。接下來,我將通過示例簡要描述相關(guān)性和關(guān)聯(lián)性。
1.1. 相關(guān)性
皮爾遜相關(guān)系數(shù)(Pearson correlation coefficient)是最常用的相關(guān)系數(shù)。系數(shù)強度由r表示,取值區(qū)間-1到1。 在使用相關(guān)性時,有三種可能的結(jié)果:
正相關(guān):兩個變量之間存在一種關(guān)系,即兩個變量同時朝同一方向移動。
負相關(guān):兩個變量之間存在一種關(guān)系,即一個變量增加與另一個變量減少相關(guān)聯(lián)。
無相關(guān)性:當(dāng)兩個變量之間沒有關(guān)系時。
正相關(guān)的一個示例如圖 1 所示,圖中展示了巧克力消費與每個國家的諾貝爾獎獲得者數(shù)量之間的關(guān)系。
圖1:巧克力消費與諾貝爾獎獲得者之間的相互關(guān)系 巧克力消費可能意味著諾貝爾獎獲得者增加。或者反過來,諾貝爾獎獲得者的增加同樣可能導(dǎo)致巧克力消費增加。盡管存在強烈的相關(guān)性,但更有可能的是未觀察到的變量,如社會經(jīng)濟地位或教育系統(tǒng)質(zhì)量,可能導(dǎo)致巧克力消費和諾貝爾獎獲得者數(shù)量的增加。 換句話說,我們?nèi)匀徊恢肋@種關(guān)系是否是因果關(guān)系。但這并不意味著相關(guān)性本身沒有用處,它只是有著不同的目的。 相關(guān)性本身并不意味著因果關(guān)系,因為統(tǒng)計關(guān)系并不能唯一限制因果關(guān)系。
1.1.2. 關(guān)聯(lián)性?
當(dāng)我們談?wù)撽P(guān)聯(lián)性時,我們指的是一個變量的某些值傾向于與另一個變量的某些值共同出現(xiàn)。 從統(tǒng)計學(xué)的角度來看,有許多關(guān)聯(lián)性測量方法,例如卡方檢驗(chi-square test)、費舍爾精確檢驗(Fisher exact test)、超幾何檢驗(hypergeometric test)等。它們通常用于其中一個或兩個變量為有序(ordinal)或名義(nominal)變量的情況。 注意:相關(guān)性是一個技術(shù)術(shù)語,而關(guān)聯(lián)性不是,因此在統(tǒng)計學(xué)中對其含義并不總是一致的。這意味著在使用這些術(shù)語時,明確說明其含義總是一個好的做法。 為了舉例說明,我將使用超幾何檢驗來演示是否存在兩個變量之間的關(guān)聯(lián)性,使用泰坦尼克號數(shù)據(jù)集。 泰坦尼克號數(shù)據(jù)集在許多機器學(xué)習(xí)示例中都有使用,眾所周知,性別(女性)是生存的一個很好的預(yù)測因子。讓我演示一下如何計算幸存和女性之間的關(guān)聯(lián)性。 首先,安裝 bnlearn 庫,并僅加載泰坦尼克號數(shù)據(jù)集。問:女性幸存的概率是多少?
零假設(shè):幸存與性別之間沒有關(guān)系。超幾何檢驗使用超幾何分布來測量離散概率分布的統(tǒng)計顯著性。在這個例子中,是總體大?。?91),是總體中成功狀態(tài)的數(shù)量(342), 是樣本大小/抽樣次數(shù)(314),是樣本中成功的數(shù)量(233)。
方程 1:使用超幾何檢驗測試幸存與女性之間的關(guān)聯(lián)性
在的顯著性水平下,我們可以拒絕零假設(shè),因此可以說幸存和女性之間存在統(tǒng)計顯著的關(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)系意味著一個independent變量導(dǎo)致另一個dependent變量,并由 Reichenbach(1956)如下所述:
如果兩個隨機變量 和 在統(tǒng)計上相關(guān)(),那么要么(a)導(dǎo)致 ,(b)導(dǎo)致 ,或者(c)存在一個第三個變量 同時導(dǎo)致 和。此外,給定的條件下, 和 變得獨立,即 。
這個定義被納入貝葉斯圖模型中。
貝葉斯圖模型又稱貝葉斯網(wǎng)絡(luò)、貝葉斯信念網(wǎng)絡(luò)、Bayes Net、因果概率網(wǎng)絡(luò)和影響圖。都是同一技術(shù),不同的叫法。
為了確定因果關(guān)系,我們可以使用貝葉斯網(wǎng)絡(luò)(BN)。 讓我們從圖形開始,并可視化 Reichenbach 所描述的三個變量之間的統(tǒng)計依賴關(guān)系(參見圖 2)。節(jié)點對應(yīng)變量,有向邊(箭頭)表示依賴關(guān)系或條件分布。
圖 2:有向無環(huán)圖(DAG)編碼條件獨立性。(a、b、c)是等價類。(a、b)級聯(lián),(c)共同父節(jié)點,(d)是具有 V 結(jié)構(gòu)的特殊類別 可以創(chuàng)建四個圖:(a、b)級聯(lián),(c)共同父節(jié)點和(d)V 結(jié)構(gòu),這些圖構(gòu)成了貝葉斯網(wǎng)絡(luò)的基礎(chǔ)。 但是我們?nèi)绾未_定什么是造成什么的原因?(how can we tell what causes what?) 確定因果關(guān)系的概念思想是通過將一個節(jié)點保持不變,然后觀察其影響來確定因果關(guān)系的方向,即哪個節(jié)點影響哪個節(jié)點。 舉個例子,讓我們看一下圖 2 中的有向無環(huán)圖 DAG(a),它描述了 由 引起, 由引起。如果我們現(xiàn)在將 保持不變,如果這個模型是正確的, 不應(yīng)該發(fā)生變化。每個貝葉斯網(wǎng)絡(luò)都可以用這四個圖來描述,并且通過概率論(參見下面的部分),我們可以將這些部分組合起來。
需要注意的是,貝葉斯網(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é)上表示如下方程式:
方程式由四個部分組成:
后驗概率(posterior probability)是給定 發(fā)生的概率。
條件概率(conditional probability)或似然是在假設(shè)成立的情況下,證據(jù)發(fā)生的概率。這可以從數(shù)據(jù)中推導(dǎo)出來。
我們的先驗(prior)信念是在觀察到證據(jù)之前,假設(shè)的概率。這也可以從數(shù)據(jù)或領(lǐng)域知識中推導(dǎo)出來。
最后,邊際(marginal)概率描述了在所有可能的假設(shè)下新證據(jù)發(fā)生的概率,需要計算。如果您想了解更多關(guān)于(分解的)概率分布或貝葉斯網(wǎng)絡(luò)的聯(lián)合分布的詳細信息,請閱讀這篇博客[6]。
3. 貝葉斯結(jié)構(gòu)學(xué)習(xí)用于估計 DAG
通過結(jié)構(gòu)學(xué)習(xí),我們希望確定最能捕捉數(shù)據(jù)集中變量之間因果依賴關(guān)系的圖結(jié)構(gòu)。 換句話說:什么樣的 DAG 最適合數(shù)據(jù)? 一種樸素的方法是簡單地創(chuàng)建所有可能的圖結(jié)構(gòu)組合,即創(chuàng)建成十個、幾百個甚至幾千個不同的 DAG,直到所有組合都耗盡為止。 然后,可以根據(jù)數(shù)據(jù)的適應(yīng)度對每個 DAG 進行評分。 最后,返回得分最高的 DAG。 在僅有變量X的情況下,可以創(chuàng)建如圖 2 所示的圖形以及更多的圖形,因為不僅可以是 X>Z>Y(圖 2a),還可以是 Z>X>Y 等等。變量X可以是布爾值(True 或 False),也可以有多個狀態(tài)。 DAG 的搜索空間在最大化得分的變量數(shù)量上呈指數(shù)增長。這意味著在大量節(jié)點的情況下,窮舉搜索是不可行的,因此已經(jīng)提出了各種貪婪策略來瀏覽 DAG 空間。 通過基于優(yōu)化的搜索方法,可以瀏覽更大的 DAG 空間。這種方法需要一個評分函數(shù)和一個搜索策略。 常見的評分函數(shù)是給定訓(xùn)練數(shù)據(jù)的結(jié)構(gòu)的后驗概率,例如BIC或BDeu。
BIC是貝葉斯信息準則(Bayesian Information Criterion)的縮寫。它是一種用于模型選擇的統(tǒng)計量,可以用于比較不同模型的擬合能力。BIC值越小,表示模型越好。在貝葉斯網(wǎng)絡(luò)中,BIC是一種常用的評分函數(shù)之一,用于評估貝葉斯網(wǎng)絡(luò)與數(shù)據(jù)的擬合程度。
BDeu是貝葉斯-狄利克雷等價一致先驗(Bayesian-Dirichlet equivalent uniform prior)的縮寫。它是一種常用的評分函數(shù)之一,用于評估貝葉斯網(wǎng)絡(luò)與數(shù)據(jù)的擬合程度。BDeu評分函數(shù)基于貝葉斯-狄利克雷等價一致先驗,該先驗假設(shè)每個變量的每個可能狀態(tài)都是等可能的。
在我們開始示例之前,了解何時使用哪種技術(shù)總是很好的。在搜索整個 DAG 空間并找到最適合數(shù)據(jù)的圖形的過程中,有兩種廣泛的方法。
基于評分的結(jié)構(gòu)學(xué)習(xí)
基于約束的結(jié)構(gòu)學(xué)習(xí)
3.1. 基于評分的結(jié)構(gòu)學(xué)習(xí)
基于評分的方法有兩個主要組成部分:
搜索算法用于優(yōu)化所有可能的 DAG 搜索空間;例如 ExhaustiveSearch、Hillclimbsearch、Chow-Liu 等。
評分函數(shù)指示貝葉斯網(wǎng)絡(luò)與數(shù)據(jù)的匹配程度。常用的評分函數(shù)是貝葉斯狄利克雷分數(shù),如 BDeu 或 K2,以及貝葉斯信息準則(BIC,也稱為 MDL)。
下面描述了四種常見的基于評分的方法:
ExhaustiveSearch,顧名思義,對每個可能的 DAG 進行評分并返回得分最高的 DAG。這種搜索方法僅適用于非常小的網(wǎng)絡(luò),并且阻止高效的局部優(yōu)化算法始終找到最佳結(jié)構(gòu)。因此,通常無法找到理想的結(jié)構(gòu)。然而,如果只涉及少數(shù)節(jié)點(即少于 5 個左右),啟發(fā)式搜索策略通常會產(chǎn)生良好的結(jié)果。
Hillclimbsearch 是一種啟發(fā)式搜索方法,可用于使用更多節(jié)點的情況。HillClimbSearch 實施了一種貪婪的局部搜索,從 DAG“start”(默認為斷開的 DAG)開始,通過迭代執(zhí)行最大化增加評分的單邊操作。搜索在找到局部最大值后終止。
Chow-Liu 算法是一種特定類型的基于樹的方法。Chow-Liu 算法找到最大似然樹結(jié)構(gòu),其中每個節(jié)點最多只有一個父節(jié)點。通過限制為樹結(jié)構(gòu),可以限制復(fù)雜性。
Tree-augmented Naive Bayes(TAN)算法也是一種基于樹的方法,可用于建模涉及許多不確定性的龐大數(shù)據(jù)集的各種相互依賴特征集。
3.2. 基于約束的結(jié)構(gòu)學(xué)習(xí)
一種不同但相當(dāng)直觀的構(gòu)建 DAG 的方法是使用假設(shè)檢驗(如卡方檢驗統(tǒng)計量)來識別數(shù)據(jù)集中的獨立性。 這種方法依賴于統(tǒng)計檢驗和條件假設(shè),以學(xué)習(xí)模型中變量之間的獨立性。 卡方檢驗的值是觀察到的計算卡方統(tǒng)計量的概率,假設(shè)空設(shè)為 和 在給定 的條件下是獨立的。這可以用于在給定顯著性水平的情況下進行獨立判斷。 約束性方法的一個示例是 PC 算法,它從一個完全連接的圖開始,并根據(jù)測試的結(jié)果刪除邊,如果節(jié)點是獨立的,直到達到停止準則。
4. 實踐:基于bnlearn 庫
下面介紹Python中的學(xué)習(xí)貝葉斯網(wǎng)絡(luò)圖形結(jié)構(gòu)的庫——bnlearn。 bnlearn能解決一些挑戰(zhàn),如:
結(jié)構(gòu)學(xué)習(xí):給定數(shù)據(jù):估計捕捉變量之間依賴關(guān)系的 DAG。
參數(shù)學(xué)習(xí):給定數(shù)據(jù)和 DAG:估計各個變量的(條件)概率分布。
推斷:給定學(xué)習(xí)的模型:確定查詢的精確概率值。
bnlearn 相對于其他貝葉斯分析實現(xiàn)有如下優(yōu)勢:
基于 pgmpy 庫構(gòu)建
包含最常用的貝葉斯管道
簡單直觀
開源
詳細文檔
4.1. 在灑水器數(shù)據(jù)集中進行結(jié)構(gòu)學(xué)習(xí)
讓我們從一個簡單而直觀的示例開始,以演示結(jié)構(gòu)學(xué)習(xí)的工作原理。 假設(shè)你在后院安裝了一個灑水系統(tǒng),并且在過去的 1000 天里,你測量了四個變量,每個變量有兩個狀態(tài):雨(是或否),多云(是或否),灑水系統(tǒng)(開啟或關(guān)閉)和濕草(是或否)。 下面,導(dǎo)入 bnlearn 庫,加載灑水器數(shù)據(jù)集,并確定哪個 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 由四個通過邊連接的節(jié)點組成,每條邊表示一種因果關(guān)系。
濕草的狀態(tài)取決于兩個節(jié)點,即雨水和灑水器;
雨水的狀態(tài)由多云的狀態(tài)決定;?
?而灑水器的狀態(tài)也由多云的狀態(tài)決定。
這個 DAG 表示了(因式分解的)概率分布,其中 S 是灑水器的隨機變量,R 是雨水的隨機變量,G 是濕草的隨機變量,C 是多云的隨機變量。 通過檢查圖形,很快就會發(fā)現(xiàn)模型中唯一的獨立變量是 C。其他變量都取決于多云、下雨和/或灑水器的概率。 一般來說,貝葉斯網(wǎng)絡(luò)的聯(lián)合分布是每個節(jié)點在給定其父節(jié)點的條件下的條件概率的乘積: bnlearn 在結(jié)構(gòu)學(xué)習(xí)方面的默認設(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ù)雜的圖形,可能就不再那么明顯了。 通過所謂的推斷,我們可以回答“如果我們做了 會怎樣”類型的問題,這些問題通常需要進行控制實驗和明確的干預(yù)才能回答。
4.2. 如何進行推斷?
要進行推斷,我們需要兩個要素:DAG 和條件概率表(Conditional Probabilistic Tables, CPTs)。 此時,我們已經(jīng)將數(shù)據(jù)存儲在數(shù)據(jù)框(df)中,并且已經(jīng)計算出描述數(shù)據(jù)結(jié)構(gòu)的 DAG。需要使用參數(shù)學(xué)習(xí)計算 CPTs,以定量地描述每個節(jié)點與其父節(jié)點之間的統(tǒng)計關(guān)系。 讓我們首先進行參數(shù)學(xué)習(xí),然后再回到推斷的過程中。
4.2.1. 參數(shù)學(xué)習(xí)
參數(shù)學(xué)習(xí)是估計條件概率表(CPTs)的值的任務(wù)。 bnlearn 庫支持離散和連續(xù)節(jié)點的參數(shù)學(xué)習(xí):
最大似然估計是使用變量狀態(tài)出現(xiàn)的相對頻率進行的自然估計。在對貝葉斯網(wǎng)絡(luò)進行參數(shù)估計時,數(shù)據(jù)不足是一個常見問題,最大似然估計器存在對數(shù)據(jù)過擬合的問題。換句話說,如果觀察到的數(shù)據(jù)對于基礎(chǔ)分布來說不具有代表性(或者太少),最大似然估計可能會相差甚遠。例如,如果一個變量有 3 個可以取 10 個狀態(tài)的父節(jié)點,那么狀態(tài)計數(shù)將分別針對個父節(jié)點配置進行。這使得最大似然估計對學(xué)習(xí)貝葉斯網(wǎng)絡(luò)參數(shù)非常脆弱。減輕最大似然估計過擬合的一種方法是貝葉斯參數(shù)估計。
貝葉斯估計從已存在的先驗 CPTs 開始,這些 CPTs 表示在觀察到數(shù)據(jù)之前我們對變量的信念。然后,使用觀察數(shù)據(jù)的狀態(tài)計數(shù)來更新這些“先驗”??梢詫⑾闰炓暈閭螤顟B(tài)計數(shù),在歸一化之前將其添加到實際計數(shù)中。一個非常簡單的先驗是所謂的 K2 先驗,它只是將“1”添加到每個單獨狀態(tài)的計數(shù)中。一個更明智的先驗選擇是 BDeu(貝葉斯狄利克雷等效均勻先驗)。
我繼續(xù)使用灑水器數(shù)據(jù)集來學(xué)習(xí)其參數(shù),并檢測條件概率表(CPTs)。 要學(xué)習(xí)參數(shù),我們需要一個有向無環(huán)圖(DAG)和一個具有完全相同變量的數(shù)據(jù)集。 思路是將數(shù)據(jù)集與 DAG 連接起來。在之前的示例中,我們已經(jīng)計算出了 DAG(圖 3)。
如果你已經(jīng)到達這一點,您已經(jīng)使用最大似然估計(MLE)基于 DAG 和輸入數(shù)據(jù)集 df 計算了 CPTs(圖 4)。請注意,為了清晰起見,CPTs 在圖 4 中包含在內(nèi)。
圖 4:使用最大似然估計進行參數(shù)學(xué)習(xí)推導(dǎo)的 CPTs 使用 MLE 計算 CPTs 非常簡單,讓我通過示例來演示一下,手動計算節(jié)點 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ù)點。例如,基于 91 個觀測結(jié)果。如果 Rain 有更多的狀態(tài)和/或更多的依賴關(guān)系,這個數(shù)字可能會更低。更多的數(shù)據(jù)是否是解決方案?也許是,也許不是。只要記住,即使總樣本量非常大,由于狀態(tài)計數(shù)是針對每個父節(jié)點的配置進行條件計數(shù),這也可能導(dǎo)致分段。與 MLE 方法相比,查看 CPT 與之間的差異。
4.2.2. 在 Sprinkler 數(shù)據(jù)集上進行推理
進行推理需要貝葉斯網(wǎng)絡(luò)具備兩個主要組成部分:描述數(shù)據(jù)結(jié)構(gòu)的有向無環(huán)圖(DAG)和描述每個節(jié)點與其父節(jié)點之間的統(tǒng)計關(guān)系的條件概率表(CPT)。到目前為止,您已經(jīng)擁有數(shù)據(jù)集,使用結(jié)構(gòu)學(xué)習(xí)計算了 DAG,并使用參數(shù)學(xué)習(xí)估計了 CPT?,F(xiàn)在可以進行推理了! 在推理中,我們使用一種稱為變量消除的過程來邊緣化變量。變量消除是一種精確的推理算法。通過簡單地將求和替換為最大函數(shù),它還可以用于確定具有最大概率的網(wǎng)絡(luò)狀態(tài)。不足之處是,對于大型的貝葉斯網(wǎng)絡(luò),它可能在計算上是棘手的。在這些情況下,可以使用基于采樣的近似推理算法,如 Gibbs 采樣或拒絕采樣 [7]。 使用 bnlearn,我們可以進行如下的推理:
現(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ù)來計算因果圖,很難完全驗證因果圖的有效性和完整性。然而,有一些解決方案可以幫助增加對因果圖的信任。例如,可以對變量集之間的某些條件獨立性或依賴性關(guān)系進行經(jīng)驗性測試。如果它們在數(shù)據(jù)中不存在,則表明因果模型的正確性 ?;蛘?,可以添加先前的專家知識,例如 DAG 或 CPT,以在進行推理時增加對模型的信任。
5. 討論
在本文中,涉及了一些關(guān)于為什么相關(guān)性或關(guān)聯(lián)不等于因果性以及如何從數(shù)據(jù)向因果模型的轉(zhuǎn)變使用結(jié)構(gòu)學(xué)習(xí)的概念。 貝葉斯技術(shù)的優(yōu)勢總結(jié)如下:
后驗概率分布的結(jié)果或圖形使用戶能夠?qū)δP皖A(yù)測做出判斷,而不僅僅是獲得單個值作為結(jié)果。
可以將領(lǐng)域/專家知識納入到 DAG 中,并在不完整信息和缺失數(shù)據(jù)的情況下進行推理。這是可能的,因為貝葉斯定理基于用證據(jù)更新先驗項。
具有模塊化的概念。
通過組合較簡單的部分來構(gòu)建復(fù)雜系統(tǒng)。
圖論提供了直觀的高度交互的變量集。
概率論提供了將這些部分組合在一起的方法。
然而,貝葉斯網(wǎng)絡(luò)的一個弱點是尋找最佳 DAG 在計算上很耗時,因為必須對所有可能的結(jié)構(gòu)進行詳盡搜索。 窮舉搜索的節(jié)點限制可以達到約 15 個節(jié)點,但也取決于狀態(tài)的數(shù)量。如果有更多的節(jié)點,就需要使用具有評分函數(shù)和搜索算法的替代方法。盡管如此,要處理具有數(shù)百甚至數(shù)千個變量的問題,需要使用基于樹或基于約束的方法,并使用變量的黑名單/白名單。這種方法首先確定順序,然后找到該順序的最佳 BN 結(jié)構(gòu)。這意味著在可能的排序搜索空間上進行工作,這比網(wǎng)絡(luò)結(jié)構(gòu)空間小得多。 確定因果關(guān)系可能是一項具有挑戰(zhàn)性的任務(wù),但 bnlearn 庫旨在解決其中一些挑戰(zhàn),如結(jié)構(gòu)學(xué)習(xí)、參數(shù)學(xué)習(xí)和推理。它還可以推導(dǎo)出(整個)圖的拓撲排序或比較兩個圖。
-
模型
+關(guān)注
關(guān)注
1文章
3504瀏覽量
50193 -
貝葉斯網(wǎng)絡(luò)
+關(guān)注
關(guān)注
0文章
24瀏覽量
8394 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8499瀏覽量
134314
原文標題:貝葉斯網(wǎng)絡(luò)的因果關(guān)系檢測(Python)
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
有用labview做貝葉斯網(wǎng)絡(luò)進行故障診斷的朋友嗎?
使用PyMC3包實現(xiàn)貝葉斯線性回歸
基于貝葉斯網(wǎng)絡(luò)的軟件項目風(fēng)險評估模型
一種基于貝葉斯網(wǎng)絡(luò)的匹配引擎設(shè)計
基于貝葉斯網(wǎng)絡(luò)的故障樹在機械設(shè)備中的應(yīng)用
怎樣通俗易懂地解釋貝葉斯網(wǎng)絡(luò)和它的應(yīng)用?

評論