在上一篇文章中咱們討論了樸素貝葉斯分類。樸素貝葉斯分類有一個限制條件,就是特徵屬性必須有條件獨立或基本獨立(實際上在現實應用中幾乎不可能作到徹底獨立)。當這個條件成立時,樸素貝葉斯分類法的準確率是最高的,但不幸的是,現實中各個特徵屬性間每每並不條件獨立,而是具備較強的相關性,這樣就限制了樸素貝葉斯分類的能力。這一篇文章中,咱們接着上一篇文章的例子,討論貝葉斯分類中更高級、應用範圍更廣的一種算法——貝葉斯網絡(又稱貝葉斯信念網絡或信念網絡)。html
上一篇文章咱們使用樸素貝葉斯分類實現了SNS社區中不真實帳號的檢測。在那個解決方案中,我作了以下假設:算法
i、真實帳號比非真實帳號平均具備更大的日誌密度、各大的好友密度以及更多的使用真實頭像。網絡
ii、日誌密度、好友密度和是否使用真實頭像在帳號真實性給定的條件下是獨立的。app
可是,上述第二條假設極可能並不成立。通常來講,好友密度除了與帳號是否真實有關,還與是否有真實頭像有關,由於真實的頭像會吸引更多人加其爲好友。所以,咱們爲了獲取更準確的分類,能夠將假設修改以下:函數
i、真實帳號比非真實帳號平均具備更大的日誌密度、各大的好友密度以及更多的使用真實頭像。學習
ii、日誌密度與好友密度、日誌密度與是否使用真實頭像在帳號真實性給定的條件下是獨立的。spa
iii、使用真實頭像的用戶比使用非真實頭像的用戶平均有更大的好友密度。日誌
上述假設更接近實際狀況,但問題隨之也來了,因爲特徵屬性間存在依賴關係,使得樸素貝葉斯分類不適用了。既然這樣,我去尋找另外的解決方案。htm
下圖表示特徵屬性之間的關聯:blog
上圖是一個有向無環圖,其中每一個節點表明一個隨機變量,而弧則表示兩個隨機變量之間的聯繫,表示指向結點影響被指向結點。不過僅有這個圖的話,只能定性給出隨機變量間的關係,若是要定量,還須要一些數據,這些數據就是每一個節點對其直接前驅節點的條件機率,而沒有前驅節點的節點則使用先驗機率表示。
例如,經過對訓練數據集的統計,獲得下表(R表示帳號真實性,H表示頭像真實性):
縱向表頭表示條件變量,橫向表頭表示隨機變量。上表爲真實帳號和非真實帳號的機率,而下表爲頭像真實性對於帳號真實性的機率。這兩張表分別爲「帳號是否真實」和「頭像是否真實」的條件機率表。有了這些數據,不但能順向推斷,還能經過貝葉斯定理進行逆向推斷。例如,現隨機抽取一個帳戶,已知其頭像爲假,求其帳號也爲假的機率:
也就是說,在僅知道頭像爲假的狀況下,有大約35.7%的機率此帳戶也爲假。若是以爲閱讀上述推導有困難,請複習機率論中的條件機率、貝葉斯定理及全機率公式。若是給出全部節點的條件機率表,則能夠在觀察值不完備的狀況下對任意隨機變量進行統計推斷。上述方法就是使用了貝葉斯網絡。
有了上述鋪墊,咱們就能夠正式定義貝葉斯網絡了。
一個貝葉斯網絡定義包括一個有向無環圖(DAG)和一個條件機率表集合。DAG中每個節點表示一個隨機變量,能夠是可直接觀測變量或隱藏變量,而有向邊表示隨機變量間的條件依賴;條件機率表中的每個元素對應DAG中惟一的節點,存儲此節點對於其全部直接前驅節點的聯合條件機率。
貝葉斯網絡有一條極爲重要的性質,就是咱們斷言每個節點在其直接前驅節點的值制定後,這個節點條件獨立於其全部非直接前驅前輩節點。
這個性質很相似Markov過程。其實,貝葉斯網絡能夠看作是Markov鏈的非線性擴展。這條特性的重要意義在於明確了貝葉斯網絡能夠方便計算聯合機率分佈。通常狀況先,多變量非獨立聯合條件機率分佈有以下求取公式:
而在貝葉斯網絡中,因爲存在前述性質,任意隨機變量組合的聯合條件機率分佈被化簡成
其中Parents表示xi的直接前驅節點的聯合,機率值能夠從相應條件機率表中查到。
貝葉斯網絡比樸素貝葉斯更復雜,而想構造和訓練出一個好的貝葉斯網絡更是異常艱難。可是貝葉斯網絡是模擬人的認知思惟推理模式,用一組條件機率函數以及有向無環圖對不肯定性的因果推理關係建模,所以其具備更高的實用價值。
構造與訓練貝葉斯網絡分爲如下兩步:
一、肯定隨機變量間的拓撲關係,造成DAG。這一步一般須要領域專家完成,而想要創建一個好的拓撲結構,一般須要不斷迭代和改進才能夠。
二、訓練貝葉斯網絡。這一步也就是要完成條件機率表的構造,若是每一個隨機變量的值都是能夠直接觀察的,像咱們上面的例子,那麼這一步的訓練是直觀的,方法相似於樸素貝葉斯分類。可是一般貝葉斯網絡的中存在隱藏變量節點,那麼訓練方法就是比較複雜,例如使用梯度降低法。因爲這些內容過於晦澀以及牽扯到較深刻的數學知識,在此再也不贅述,有興趣的朋友能夠查閱相關文獻。
貝葉斯網絡做爲一種不肯定性的因果推理模型,其應用範圍很是廣,在醫療診斷、信息檢索、電子技術與工業工程等諸多方面發揮重要做用,而與其相關的一些問題也是近來的熱點研究課題。例如,Google就在諸多服務中使用了貝葉斯網絡。
就使用方法來講,貝葉斯網絡主要用於機率推理及決策,具體來講,就是在信息不完備的狀況下經過能夠觀察隨機變量推斷不可觀察的隨機變量,而且不可觀察隨機變量能夠多於以一個,通常初期將不可觀察變量置爲隨機值,而後進行機率推理。下面舉一個例子。
仍是SNS社區中不真實帳號檢測的例子,咱們的模型中存在四個隨機變量:帳號真實性R,頭像真實性H,日誌密度L,好友密度F。其中H,L,F是能夠觀察到的值,而咱們最關係的R是沒法直接觀察的。這個問題就劃歸爲經過H,L,F的觀察值對R進行機率推理。推理過程能夠以下表示:
一、使用觀察值實例化H,L和F,把隨機值賦給R。
二、計算。其中相應機率值能夠查條件機率表。
因爲上述例子只有一個未知隨機變量,因此不用迭代。更通常得,使用貝葉斯網絡進行推理的步驟可以下描述:
一、對全部可觀察隨機變量節點用觀察值實例化;對不可觀察節點實例化爲隨機值。
二、對DAG進行遍歷,對每個不可觀察節點y,計算,其中wi表示除y之外的其它全部節點,a爲正規化因子,sj表示y的第j個子節點。
三、使用第三步計算出的各個y做爲未知節點的新值進行實例化,重複第二步,直到結果充分收斂。
四、將收斂結果做爲推斷值。
以上只是貝葉斯網絡推理的算法之一,另外還有其它算法,這裏再也不詳述。