1. 程式人生 > 其它 >貝葉斯網路的D-separation詳解和Python程式碼實現

貝葉斯網路的D-separation詳解和Python程式碼實現

D分離(D-Separation)又被稱作有向分離,是一種用來判斷變數是否條件獨立的圖形化方法。相比於非圖形化方法,D-Separation更加直觀且計算簡單。對於一個DAG(有向無環圖),D-Separation方法可以快速的判斷出兩個節點之間是否是條件獨立的。

瞭解 D 分離

在貝葉斯網路中,D 分離到底是什麼,它可以用於什麼?簡單地說,它是一種常規的確定獨立性的方法。如果兩個變數X 和 Y 在有向圖中相對於另外一組變數 Z 是 d 分離的,那麼在這種圖可以表示的所有概率分佈中都是獨立於 Z 的。這是什麼意思?這意味著兩個變數X和Y在Z上是獨立的,如果一旦你知道了Z,那麼關於X的知識是不會給你關於Y的任何額外資訊的。

要完全理解它是如何完成的,首先需要介紹 active 和 inactive trails 。如果一條路徑存在依賴關係,就可以說它是 active。例如,兩個變數 X 和 Y 可能通過圖中的多個路徑連線。如果沒有任何路徑處於active狀態,則 X 和 Y 是 d 分隔的。讓我們看一下四種不同的情況,並確定那些是處於active 狀態:

Case1:在這種情況下,我們相信X可以通過Z來影響Y。但是如果觀察到Z,X不會通過Z影響Y,因為Z已知。

Case2:這種情況與上面是對稱的:如果觀察到Z,X不能通過Z影響Y,但是如果沒有觀察到Z,X可以通過Z影響Y。

Case3:當且僅當Z沒有被觀察到時,X可以通過Z影響Y

Case4:如果Z沒有被觀察到,X就不能影響Y。這也被稱為v形結構。

所有這些分析可以用以下方式總結:

可達性分析(RA)演算法

我們現在可以考慮另一種演算法,所謂的可達演算法(Reachable Algorithm),它用於從給定Z的active路徑尋找X可達的節點。演算法由:

為了一步一步地理解演算法。從演算法的輸入開始:

輸入很好理解,然後該演算法將返回從 X 可到達的所有節點。這部分是通過兩個階段來實現的:

  • 階段 1:這是演算法的簡單部分——找到 Z 中包含的所有節點的祖先。
  • 階段 2:從 X 開始,找到可達節點——哪些節點可以直接從 X 到達,然後哪些節點可以從這些節點到達。然後迴圈這個過程。

為了將這個步驟視覺化,假設有一個一下的貝葉斯網路:

可以從解決這個問題開始:

完整文章:

https://www.overfit.cn/post/7247991e27a74d7da6ae97c87a89eb6f