天天看點

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

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)的兩倍。

技術文章定時推送

請關注公衆号:算法學習分享​​