機器學習 - 貝葉斯網絡

2021-03-02 商業分析Business Analytics
原理 - 貝葉斯網絡

為了降低估計後驗概率P(c|x)的困難,樸素貝葉斯採用了「屬性條件獨立性假設」。然而,在實際應用中,這樣的假設(所有變量相互獨立)是很難成立的。因此我們需要對該假設進行一定程度的放鬆,比如採用「獨依賴估計」(假設每個屬性在類別之外僅依賴一個其他屬性)策略的半樸素貝葉斯。常用的半樸素貝葉斯有兩種,分別是SPODE和TAN。

但獨依賴估計依然無法準確描述實際數據的屬性間複雜依賴關係,它們的依賴關係往往不是一對的,而可能是一對多、多對一的。

我們可以看到,兩種半樸素貝葉斯方法使用簡單的樹形結構來描述屬性依間依賴關係,那麼我們是否可以構造更複雜也更精確的樹形結構或是網型結構來描述來描述屬性間依賴關係呢?答案是肯定的。

貝葉斯網絡,也叫做「信念網」,是一種經典的概率圖模型。它藉助有向無環圖來刻畫屬性之間的依賴關係,並使用條件概率表(CPT)來描述屬性的聯合概率分布。一個貝葉斯網由結構G和參數Θ,即B=<G,Θ>。其中G是以屬性為結點、以直接依賴關係為邊的有向無環圖;Θ是每個屬性的條件概率表。基於貝葉斯網絡,我們可以求得聯合概率分布,其定義為:

貝葉斯網絡有三種典型的變量間依賴關係,分別為同父結構、V型結構和順序結構。

為了更好的分析貝葉斯網絡變量間的條件獨立性,可以使用有向分離,把有向圖轉換成無向圖:

找出有向圖所有的V型結構,在V型結構的父結點之間加上一條五向邊

將所有有向邊改成無向邊

轉換後的無向圖又叫「道德圖」,在道德圖中,如果x和y能被z分開——即刪除了結點z,x與y將被分割為兩個流通分支——則可以判斷:當z已知時x與y條件獨立。

貝葉斯網絡的學習過程分為結構學習與參數學習。當貝葉斯網絡結構已知時,則只需估計每個結點的條件概率表即可(極大似然估計)。但對於複雜的實際數據,我們往往都不知道其網絡結構。這時候我可以通過「評分搜索」的方法,找出結構最恰當的貝葉斯網絡。

評分搜索常用的評分函數通常都基於資訊理論的「最小描述長度」準則,即以最短編碼長度來描述訓練數據(包括描述網絡和編碼數據)的模型。評分函數可寫為:

其中第一項是計算編碼貝葉斯網B所需的字節數,第二項是計算概率分布PB需要用多少字節數來描述D。

當f(θ)=1時,即每個參數用1位元組描述。此時原式相當於AIC評分函數:

當f(θ)=log(m)/2時,則可以得到BIC評分函數:

當f(θ)=0時,原式退化為負對數函數,最小化過程也變成了極大似然估計。

貝葉斯網絡結構學習的過程是NP難問題,因此常用貪心法或限定網絡結構為樹形結構的方法在有限時間內求得近似解。

貝葉斯網絡訓練好後,我們可以進行「推斷」,即通過「證據變量E」來推測「待查詢變量Q」,即計算後驗概率:

然而「精準推斷」也被證明是個NP難問題,因此現實中常常通過「近似推斷」來在有限時間內求得近似解,吉布斯採樣是常用的近似推斷方法:

實質上,吉布斯採樣是在貝葉斯網所有變量的聯合狀態空間與證據E=e一致的子空間中進行「隨機漫步」。由於每一步只依賴前一步的狀態,這又是一個馬爾科夫鏈。

實戰 - pgmpy

在Python中可以用來訓練貝葉斯網絡的包挺多,這裡簡要介紹其中口碑較好的pgmpy包。pgmpy可以供用戶手動創建結構已知的貝葉斯網絡,也可提供啟發式算法訓練結構未知的貝葉斯網絡。

對於日常的數據而言,我們往往需要訓練結構未知的貝葉斯網絡。pgmpy中的HillClimbSearch()便可以解決這個問題。

from time import timeimport pandas as pdimport numpy as npfrom pgmpy.estimators import HillClimbSearch, BicScore
data = pd.DataFrame(np.random.randint(0, 5, size=(5000, 7)), columns=list('ABCDEFG'))data['H'] = data['B'] + data['C']data['I'] = data['D'] + data['E'] * data['F']data['J'] = data['A'] * data['B']time1 = time()est = HillClimbSearch(data, scoring_method=BicScore(data))best_model = est.estimate()time2 = time()time2 - time1

隨機創建5000行7列的數據框,並按照算式生成3列新數據。以BIC作為評分函數來訓練貝葉斯網絡。模型在76秒後訓練完畢,相對其他模型耗時較多。

def showBN(model,save=False):    '''傳入BayesianModel對象,調用graphviz繪製結構圖,jupyter中可直接顯示'''    from graphviz import Digraph    node_attr = dict(     style='filled',     shape='box',     align='left',     fontsize='12',     ranksep='0.1',     height='0.2'    )    dot = Digraph(node_attr=node_attr, graph_attr=dict(size="12,12"))    seen = set()    edges=model.edges()    for a,b in edges:        dot.edge(a,b)    if save:        dot.view(cleanup=True)    return dotshowBN(best_model)

通過graphviz繪製出貝葉斯網絡,可以看到模型大體上能夠捕捉到變量的依賴關係。但需要注意的是,模型並不總是能夠如此有效,相對多的時候,訓練得到的模型並不能準確捕捉變量的依賴關係。因此嘗試使用訓練得到的貝葉斯網絡來解釋實際問題中的變量關係,似乎並不是一個明智的選擇。

訓練得到貝葉斯網絡後,可以進行對待查詢變量進行推斷。

import pandas as pdfrom pgmpy.models import BayesianModelfrom pgmpy.estimators import MaximumLikelihoodEstimatordata = pd.DataFrame(data={'A': [0, 0, 1], 'B': [0, 1, 0], 'C': [1, 1, 0]})model = BayesianModel([('A', 'C'), ('B', 'C')])cpd_A = MaximumLikelihoodEstimator(model, data).estimate_cpd('A')print(cpd_A)cpd_C = MaximumLikelihoodEstimator(model, data).estimate_cpd('C')print(cpd_C)

評價 - 貝葉斯網絡

優點:使用圖的形式來描述模型,模型可解釋性很強。

缺點:訓練網絡結構的時間較長,較難用於高維度的數據。

適合數據:標稱型

參考資料:

[1] 《機器學習》 周志華

[2] http://pgmpy.org/estimators.html

相關焦點

  • 數學推導+純Python實現機器學習算法12:貝葉斯網絡
    樸素貝葉斯的一大特點就是特徵的條件獨立假設,但在現實情況下,條件獨立這個假設通常過於嚴格,在實際中很難成立。特徵之間的相關性限制了樸素貝葉斯的性能,所以本節筆者將繼續介紹一种放寬了條件獨立假設的貝葉斯算法——貝葉斯網絡(Bayesian Network)。貝葉斯網絡的直觀例子     先以一個例子進行引入。
  • 貝葉斯機器學習路線圖
    >核心主題這一章覆蓋了貝葉斯機器學習的核心概念.這便是貝葉斯模型平均(bayesian model averaging).此外, 貝葉斯網絡(Bayesian networks) (Bayes nets)的基礎知識也值得一學, 因為這些符號在討論貝葉斯模型時會經常用到. 由於貝葉斯方法把模型參數也看作隨機變量, 所以我們可以把貝葉斯推斷問題本身表達為貝葉斯網絡.
  • 【機器學習基礎】數學推導+純Python實現機器學習算法12:貝葉斯網絡
    樸素貝葉斯的一大特點就是特徵的條件獨立假設,但在現實情況下,條件獨立這個假設通常過於嚴格,在實際中很難成立。特徵之間的相關性限制了樸素貝葉斯的性能,所以本節筆者將繼續介紹一种放寬了條件獨立假設的貝葉斯算法——貝葉斯網絡(Bayesian Network)。貝葉斯網絡的直觀例子     先以一個例子進行引入。
  • 貝葉斯機器學習前沿進展
    摘要 隨著大數據的快速發展,以概率統計為基礎的機器學習在近年來受到工業界和學術界的極大關注,並在視覺、語音、自然語言、生物等領域獲得很多重要的成功應用,其中貝葉斯方法在過去20多年也得到了快速發展,成為非常重要的一類機器學習方法.總結了貝葉斯方法在機器學習中的最新進展,具體內容包括貝葉斯機器學習的基礎理論與方法、非參數貝葉斯方法及常用的推理方法
  • 貝葉斯、概率分布與機器學習
    簡單的說貝葉斯定理:貝葉斯定理用數學的方法來解釋生活中大家都知道的常識形式最簡單的定理往往是最好的定理,比如說中心極限定理,這樣的定理往往會成為某一個領域的理論基礎。機器學習的各種算法中使用的方法,最常見的就是貝葉斯定理。
  • 獨家 | 一文讀懂機器學習中的貝葉斯統計學
    有趣的是,在我們日常生活中如此普遍的事情對統計學和機器學習如此重要,但它確實如此,我們將討論原因。然而,首先我們需要研究一些貝葉斯定理中出現的概率非常低的問題。 神經網絡就是一個理想的例子。當你初始化一個神經網絡時,你的節點以一些固有值開始。如果將這些節點的權值都賦值為零,則節點將無法自行更新,因為梯度下降算法的所有迭代都將乘以零。相反,執行隨機初始化(通常對用戶不可見)通常可以防止出現這樣的問題。
  • 機器學習模型、貝葉斯網絡等...
    網絡搜索,語音識別,人臉識別,機器翻譯,自動駕駛和自動調度有什麼共同之處?這些都是複雜的現實問題,人工智慧的目標是用嚴格的數學工具解決這些問題。 在本課程中,你講學習這些應用程式的基本原則並實踐其中一些系統。具體主題包括機器學習,搜索,遊戲,馬爾可夫決策過程,約束滿足,圖形模型和邏輯。
  • 機器學習 —— 淺談貝葉斯和MCMC
    這是這個系列的第一個筆記,是關於貝葉斯和MCMC一些數學原理的講解和代碼的實現,希望能夠深入淺出,敘述的容易讓人理解。…▌淺談貝葉斯不論是學習概率統計還是機器學習的過程中,貝葉斯總是是繞不過去的一道坎,大部分人在學習的時候都是在強行地背公式和套用方法,沒有真正去理解其牛逼的思想內涵。
  • 貝葉斯神經網絡系列教程(二):背景知識
    貝葉斯推理是統計和概率機器學習的重要組成部分。它基於著名統計學家Thomas Bayes提出的貝葉斯定理。在貝葉斯推理中,假設概率隨著更多的證據或信息的出現而更新。神經網絡可以被認為是一個端到端系統或一組模擬人腦的算法,並試圖學習在數據集內複雜的表徵,以提供輸出。首先將簡要介紹神經網絡,花費更多時間來解釋我們將來要研究的概率機器學習部分。
  • 貝葉斯神經網絡(系列)第一篇
    ShridharFollow翻譯:mashagua           【機器學習算法與自然語言處理導讀】讓我們通過本篇博客理解貝葉斯神經網絡的需求場景吧。這些博客的大致結構如下:貝葉斯網絡的應用場景為了更好的理解貝葉斯網絡所需要的背景知識一些在貝葉斯神經網絡方面最新的成果基於變分推理的貝葉斯卷積神經網絡利用PyTorch 建立你自己的貝葉斯卷積神經網絡貝葉斯神經網絡的不確定性估計貝葉斯神經網絡中的模型修剪在其他領域的應用(超級解析度
  • 機器學習算法實踐-樸素貝葉斯(Naive Bayes)
    貝葉斯準則樸素貝葉斯分類器中最核心的便是貝葉斯準則,他用如下的公式表示:這就要上貝葉斯準則了根據貝葉斯準則 (知乎的公式不能顯示中文的嗎 -_-!),實現自己的貝葉斯分類器貝葉斯分類器實現起來非常的簡單, 下面我以進行文本分類為目的使用Python實現一個樸素貝葉斯文本分類器.
  • 數學之美——貝葉斯網絡 (Bayesian Networks)
    我們可以把上述的有向圖看成一個網絡,它就是貝葉斯網絡。其中每個圓圈表示一個狀態。狀態之間的連線表示它們的因果關係。比如從心血管疾病出發到吸菸的弧線表示心血管疾病可能和吸菸有關。當然,這些關係可以有一個量化的可信度 (belief),用一個概率描述。我們可以通過這樣一張網絡估計出一個人的心血管疾病的可能性。在網絡中每個節點概率的計算,可以用貝葉斯公式來進行,貝葉斯網絡因此而得名。由於網絡的每個弧有一個可信度,貝葉斯網絡也被稱作信念網絡 (belief networks)。
  • 機器學習領域中的頻率學派與貝葉斯學派
    ———————一本正經的分割線———————機器學習的本質實際上是求解目標函數的優化問題,那目標函數是怎麼來的呢?這也就是為什麼要寫這篇分享的原因了——頻率學派和貝葉斯學派的異同。大家都了解,頻率學派常用的估計方法是最大似然(MaximumLikelihood Estimation 即MLE),而貝葉斯學派常用的估計方法是最大後驗(Maximum A Posteriori 即MAP)。那麼兩大學派在思想上最大的差別是什麼?
  • 清華大學計算機科學與技術系朱軍教授:機器學習裡的貝葉斯基本理論...
    學術主任周志華教授介紹詞:朱軍老師是我們國內機器學習非常優秀的一位年輕的學者,他特別在貝葉斯學習方面有一套非常有特色的東西,大家知道貝葉斯學習是機器學習裡面非常主流的一個流派,朱軍老師是把這兩個東西做了非常有機的結合,今天請朱軍老師將給大家做一個全面的貝葉斯學習前沿介紹,下面歡迎朱軍老師。
  • 模式識別與機器學習(教學大綱)|向量|貝葉斯|算法|神經網絡_網易訂閱
    以貝葉斯學習思想貫穿始終,並適時與其他重要知識點(如支持向量機、深度學習)等進行交叉和關聯,便於讀者在形成良好知識體系的同時保持對整個領域知識的把握。  全書共14章和4個附錄,循序漸進地剖析模式識別與機器學習領域。
  • 機器學習的統計方法 貝葉斯決策理論入門
    引言無論你是在建立機器學習模型還是在日常生活中做決定,我們總是選擇風險最小的方案。作為人類,我們天生就採取任何有助於我們生存的行動;然而,機器學習模型最初並不是基於這種理解而建立的。這些算法需要經過訓練和優化,以選擇風險最小的最優方案。
  • 【機器學習】樸素貝葉斯算法(Naive Bayes,NB)
    貝葉斯公式有了全概率公式,現在可以看看貝葉斯公式了。樸素貝葉斯是貝葉斯分類算法中的一種,是對貝葉斯的一個改進。樸素貝葉斯與貝葉斯顯著的不同之處在於,樸素貝葉斯進行了獨立性假設,假設各個特徵之間相互獨立不相關。
  • 機器學習算法集錦:從貝葉斯到深度學習及各自優缺點
    選自static.coggle.it機器之心編譯在我們日常生活中所用到的推薦系統、智能圖片美化應用和聊天機器人等應用中,各種各樣的機器學習和數據處理算法正盡職盡責地發揮著自己的功效。本文篩選並簡單介紹了一些最常見算法類別,還為每一個類別列出了一些實際的算法並簡單介紹了它們的優缺點。
  • 純貝葉斯神經網絡沒有意義?OpenAI科學家何出此言?
    那麼貝葉斯神經網絡真的沒有意義嗎?Carles Gelada 何出此言?我們來看這篇文章。2019 年 12 月 22 日 Carles Gelada 發布的推文。截至此時,貝葉斯方法看起來很有吸引力。貝葉斯神經網絡的潛在問題貝葉斯的以上所有屬性均依賴於合理的後驗分布,即向更有可能正確的函數分配更大的概率值。我們來仔細探查其中究竟。下式表示後驗,不過由於分母 Pr(D) 只是標準化常量,對所有函數都是一樣的,因此下式隱去了分母:
  • 機器學習系列(三)樸素貝葉斯(Naive Bayes)
    本文源自微信公眾號【Python編程和深度學習】原文連結:機器學習系列(三)樸素貝葉斯(Naive Bayes),歡迎掃碼關注鴨!貝葉斯原理可以解決「逆向概率」問題,解答在沒有太多可靠證據的情況下,怎樣做出更符合數學邏輯的推測。