機器學習_統計模型之(二)貝葉斯網路

xieyan0811發表於2017-11-24

1. 貝葉斯網路

 貝葉斯網路(Bayesian network),又稱信念網路(Belief Network),或有向無環圖模型。它用網路結構代表領域的基本因果知識。
 貝葉斯網路中的節點表示命題(或隨機變數),認為有依賴關係(或非條件獨立)的命題用箭頭來連線。
 令G = (I,E)表示一個有向無環圖(DAG),其中I代表圖形中所有的節點的集合,而E代表有向連線線段的集合,且令X = (Xi), i ∈ I為其有向無環圖中的某一節點i所代表的命題,則節點X的聯合概率可以表示成:

 其中Pa(i)是i的父結點,是i的因。聯合概率可由各自的區域性條件概率分佈相乘得出:
 p(x1,…,xk)=p(xk|x1,….,xk-1)…p(x2|x1)p(x1)
 這裡順便說一下樸素貝葉斯,由於其中各個變數x相互獨立p(x2|x1)=p(x2),得出:
 p(x1,…,xk)=p(xk)…p(x2)p(x1)
 因此說樸素貝葉斯是貝葉斯網路的一種特殊情況。

2. 例程

(1) 功能

 eBay的Bayesian-belief-networks是一個貝葉斯網路的python工具包,此例為使用該庫解決蒙提霍爾三門問題。

(2) 問題描述

 蒙提霍爾是概率中的經典問題,出自美國的電視遊戲節目。問題的名字來自該節目的主持人蒙提•霍爾(Monty Hall)。參賽者會看見三扇關閉了的門,其中一扇的後面有一輛汽車,選中後面有車的那扇門可贏得該汽車,另外兩扇門後面則各藏有一隻山羊。當參賽者選定了一扇門,但未去開啟它的時候,節目主持人開啟剩下兩扇門的其中一扇,露出其中一隻山羊(主持人不會開啟有車的那扇門)。主持人其後會問參賽者要不要換另一扇仍然關上的門。問題是:換另一扇門會否增加參賽者贏得汽車的機率?答案是:不換門的話,贏得汽車的機率是1/3。換門的話,贏得汽車的機率是2/3。
 這是為什麼呢?接著往下看。

(3) 下載安裝

$ git clone https://github.com/eBay/bayesian-belief-networks

(4) 程式碼

from bayesian.bbn import build_bbn

def f_prize_door(prize_door):
    return 0.33333333
def f_guest_door(guest_door):
    return 0.33333333
def f_monty_door(prize_door, guest_door, monty_door):
    if prize_door == guest_door:  # 參賽者猜對了
        if prize_door == monty_door:
            return 0     # Monty不會開啟有車的那扇門,不可能發生
        else:
            return 0.5   # Monty會開啟其它兩扇門,二選一
    elif prize_door == monty_door:
        return 0         #  Monty不會開啟有車的那扇門,不可能發生
    elif guest_door == monty_door:
        return 0         # 門已經由參賽者選定,不可能發生
    else:
        return 1    # Monty開啟另一扇有羊的門

if __name__ == '__main__':
    g = build_bbn(
        f_prize_door,
        f_guest_door,
        f_monty_door,
        domains=dict(
            prize_door=['A', 'B', 'C'],
            guest_door=['A', 'B', 'C'],
            monty_door=['A', 'B', 'C']))

    g.q()
    g.q(guest_door='A')
g.q(guest_door='A', monty_door='B')

(5) 執行結果

(6) 分析

 程式中構建的貝葉斯網路如下圖所示。

 先看看庫是如何使用的,首先通過三個判別函式(節點對應的是判別函式,並不對應三個門)以及它們之間的依賴關係定義了網路g的結構,節點和連線關係是程式設計師根據業務邏輯定義的。而機器用來優化和計算在給定的條件下產生結果的概率。
 prize_door和guest_door都是隨機的,所以概率都是0.333;而主持人知道哪扇門後是獎,所以monty_door由另外兩個結點(父結點)決定的,當參賽者猜對時,Monty會開啟另兩門之一,沒猜對時Monty只能開啟另一扇有羊的門。
 從執行結果可以看到:先驗是隨機抽取的0.333,隨著限制條件依次加入,不確定性逐漸變小,最終,參賽者如果選擇換門(C)的贏率變為不換門(A)的兩倍。


技術文章定時推送
請關注公眾號:演算法學習分享


相關文章