怎麼通俗易懂地解釋貝葉斯網路和它的應用?


我自己找到一篇很通俗易懂的案例

英語原文:http://www.norsys.com/tutorials/netica/secA/tut_A1.htm

以下內容摘錄自www.norsys.com,根據實例內容意譯譯文。

貝葉斯網路應用實例一:胸部疾病診所(Chest Clinic)

假想你是Los Angeles一名新畢業的醫生,專攻肺部疾病。你決定建立一個胸部疾病診所,主治肺病及相關疾病。大學課本已經中告訴你了肺癌、肺結核和支氣管炎的發生比率以及這些疾病典型的臨床癥狀、病因等,於是你就可以根據課本里的理論知識建立自己的Bayes網。如根據如下數據信息:

  • 美國有30%的人吸煙.
  • 每10萬人中就就有70人患有肺癌.
  • 每10萬人中就就有10人患有肺結核.
  • 每10萬人中就就有800人患有支氣管炎.
  • 10%人存在呼吸困難癥狀, 大部分人是哮喘、支氣管炎和其他非肺結核、非肺癌性疾病引起.

根據上面的數據可以建立如下BN模型:

這樣的一個BN模型對你意義不大,因為它沒有用到來你診所病人的案例數據,不能反映真實病人的情況。當診所診治了數千病人後,會發現課本中所描述的北美的情況與實際診所數據顯示的情況是完全不同的,實際診所數據顯示:

  • 50%的病人吸煙.
  • 1%患有肺結核.
  • 5.5% 得了肺癌.
  • 45% 患有不同程度支氣管炎.

    將這些新數據輸入到BN模型中,才真正的獲得了對你有意義的實用BN模型:

    現在,看看如何在日常診斷中用該BN模型。
  • 首先,應該注意到,上述模型反映了一個來診所求醫的新患者,為診斷之前我們沒有這個患者的任何信息。而當我們向患者諮詢信息時,BN網中的概率就會自動調整,這就是貝葉斯推理最完美、強大之處。貝葉斯網路最強大之處在於從每個階段結果所獲得的概率都是數學與科學的反映,換句話說,假設我們了解了患者的足夠信息,根據這些信息獲得統計知識,網路就會告訴我們合理的推斷。

  • 現在看看如何增加個別病人信息調節概率。一個女病人進入診所,我們開始和她談論。她告訴我們她呼吸困難。我們將這個信息輸入到網路。我們相信病人的信息,認為其存在100%呼吸困難。

    可以觀察到,一旦病人有呼吸困難癥狀,三種疾病的概率都增大了,因為這些疾病都有呼吸困難的癥狀。我們的病人存在這樣的癥狀,某種程度上我們會推斷這三種疾病可能性比較大,也增加了我們患者有嚴重疾病認識的信念。

  • 仔細看看推斷的過程:

    1. 明顯增大的是支氣管炎,從 45% 到 83.4%. 為什麼會有如此大的增長呢?因為支氣管炎病比癌症和肺結核更常見. 只要我們相信患者有嚴重的肺部疾病,那最支氣管炎的可能性會更大些。
    2. 病人是抽煙者的幾率也會隨之增大,從50% 到63.4%.
    3. 近期訪問過亞洲的幾率也會增大: 從1% 到1.03%, 顯然是不重要的.
    4. X光照片不正常的幾率也會上漲,從11% 到16%.

    知道現在我們還無法確認什麼疾病困擾著我們的這個女患者,我們目前比較相信她患有支氣管炎的可能性很大,但是,我們應該獲得更多信息來確定我們的判斷,如果我們現在就主觀定了病症,她可能得的是癌症,那我們就是一個爛醫生。這就需要更多信息來做最後的決定。

    因此,我們按照流程依此問她一些問題,如她最近是不是去過亞洲國家,吃驚的是她回答了「是」。現在獲得的信息就影響了BN模型。

  • 患肺結核的幾率顯然增大,從 2%到 9%. 而患有癌症、支氣管炎以及該患者是吸煙患者的幾率都有所減少。為什麼呢?因為此時呼吸困難的原因相對更傾向於肺結核。

  • 繼續問患者一些問題,假設患者是個吸煙者,則網路變為

    此時注意到最好的假設仍然是認為患者患有支氣管炎。為了確認我們要求她做一個X光透視,結果顯示其正常。結果如下:

  • 這就更加肯定我們的推斷她患有支氣管炎。

  • 如果X光顯示不正常的話,則結果將有很大不同:

  • Note the big difference. TB or Lung Cancer has shot up enormously in probability. Bronchitis is still the most probable of the three separate illnesses, but it is less than the combination hypothesis of TB or Lung Cancer. So, we would then decide to perform further tests, order blood tests, lung tissue biopsies, and so forth. Our current Bayes net does not cover those tests, but it would be easy to extend it by simply adding extra nodes as we acquire new statistics for those diagnostic procedures. And we do not need to throw away any part of the previous net. This is another powerful feature of Bayes nets. They are easily extended (or reduced, simplified) to suit your changing needs and your changing knowledge.

    Summary

    In this section we learned that a Bayesian network is a mathematically rigorous way to model a world, one which is flexible and adaptable to whatever degree of knowledge you have, and one which is computationally efficient.

    注意最大的區別。結核病或肺癌增加的概率極大。支氣管炎仍然是三個獨立的疾病中最可能的一個,但它小於"結核或肺癌"這一組合的假設。所以,我們將決定進行進一步測試,血液測試,肺組織活檢,等等。我們當前的貝葉斯網不包括這些測試,但它很容易擴展,只需添加額外的節點作為我們獲得新的統計數據的診斷程序。我們不需要扔掉以前的任何部分。這是貝葉斯網的另一個強大的功能。他們很容易擴展(或減少,簡化),以適應不斷變化的需求和變化的知識。

    總結

    在本節中,我們了解到,貝葉斯網路是一個用嚴格的數學方法來模擬一個世界的方法,是靈活的,適應於任何你擁有的知識程度的方法,同時也是計算效率的方法。

    本文引用地址:http://blog.sciencenet.cn/blog-82650-255141.html 此文來自科學網邱士利博客

    最後說下,這篇文章用到了一個叫做netica的軟體,我無聊將它破解掉了,去除了一些限制,各位有需要的可以在這裡下載

    鏈接: 百度雲 請輸入提取密碼 密碼: 1qav

    -------------20170127更新

    鑒於大家都想對貝葉斯網路進一步了解,這裡推薦一些資料:

    《貝葉斯網引論》鏈接: https://pan.baidu.com/s/1qYxvvdU 密碼: 7iv8

    netica官方文檔 http://www.norsys.com/WebHelp/NETICA.htm

    R語言貝葉斯網路的包 Bayesian network structure learning

    R語言pcalg包 CRAN - Package pcalg


    一個醫學上的實戰案例可以很好的詮釋貝葉斯網路的應用:

    作者:徐小醫

    鏈接:貝葉斯理論在醫學數據分析中的應用 - 混沌巡洋艦 - 知乎專欄

    貝葉斯理論用於醫學數據分析時,一個經典且對菜鳥容易上手的,就是基於貝葉斯網路的網路meta分析。那麼,首先,何為meta分析?

    meta分析,又稱paper灌水神器。(咳咳,嚴肅,嚴肅)meta分析通過比較同一研究主題下多個獨立實驗研究結果,用於探究臨床藥物在治療某一疾病的有效性和安全性,或計算某一危險因素與某一疾病的相關性,或發現某一基因與某一疾病之間的關聯程度,或評價某一診斷方法的敏感性和特異性,或分析某一藥物的治療某一疾病的費用與療效。

    森林圖,meta分析常見的結果,長這樣。具體方法詳見News from the IKMD

    但是!單一的meta分析通常只能評價一種藥物,一個基因啊?如果要比較幾種藥物治療同一種疾病的療效怎麼辦?另外,很多疾病可能是多基因相關,或者存在多個危險因素啊~這個時候怎麼算?

    這時候,就需要網路meta分析了。

    那麼在網路meta分析中,怎麼比較同一主題的多個因素啊?

    在傳統meta 分析用,我們通過計算統計量(效應量effect sizes,置信區間confidence intervals, standard errors標準誤, Z and P values Z值和P值)來分析不同研究中同一藥物的療效,此時輸入的變數是藥物組和安慰劑組的臨床療效值和兩個組的樣本量大小。而在比較多個藥物的療效時,變數成了藥物A組的療效值及樣本量,藥物B組的療效值及樣本量……以及安慰劑組組的療效值及樣本量。如果用圖來表示,就是從兩點一線變成了多點連網的關係。此時,頻率統計只能通過兩兩比較的統計量及置信95%區間來排序,而貝葉斯統計則可利用後驗概率對所有參與比較的藥物進行排序。

    也就是說,在基於貝葉斯方法的網路meta分析中,會構造一個共同的對照基線,以實現對所有研究的共同分析。

    就像這篇比較不同抗抑鬱治療青少年抑鬱的療效的研究,構建了一個共同的安慰劑對照基線。

    此時,我們要想起一句話——「不談分布的概率計算都是耍流氓」。

    更何況,貝葉斯網路存在先驗概率啊!

    在貝葉斯分析中,模型中的觀測變數和參數都視為隨機變數。此時樣本x和參數Θ的聯合分布可表示為:

    然而在網路meta分析時,從先驗分布中抽樣非常困難。此時,就需要使用馬爾科夫鏈蒙特卡洛(
    Markov chain Monte Carlo, MCMC)方法對先驗分布進行計算。
    (關於馬爾科夫鏈和蒙特卡洛方法的基本概念可見隨機過程筆記 - 混沌巡洋艦 - 知乎專欄)

    MCMC方法通過穩態的 馬爾科夫鏈進行轉移計算,等效於從 P(x) 分布採樣,從而實現對先驗分布的計算。最哈皮的是,使用MCMC方法時,問題維度的增加並不會降低其收斂速度或使其複雜。

    回到基於貝葉斯理論的網路meta分析,搞定了先驗概率,便可進一步計算各個研究的相對處理效應,根據需要計算的效應值變數的特徵和各研究間的異質性情況選擇相應的模型代入分析。而對於網路meta分析的多節點變數,不同藥物之間的比較通常存在較大的異質性,此時使用隨機效應模型計算來自不同總體的納入研究則更為可靠。(相應軟體其實很傻瓜啦~認真閱讀WinBUGS軟體說明書吧)

    在這個網路meta分析中,研究者比較了多種非類固醇抗炎葯治療膝、 髖關節骨性關節炎疼痛的療效,那兩個大點就是樣本量最大的兩個不同的藥物組(變數)。

    當然,偉大的貝葉斯統計怎麼會僅僅局限於對文獻數據的網路meta分析?

    教科書上說,貝葉斯網路,既形式上,一個貝葉斯網路就是一個有向無環圖,結點表示隨機變數,可以是可觀測量、隱含變數、未知參量或假設等;結點之間的郵箱邊表示條件依存關係,箭頭指向的結點依存於箭頭髮出的結點(父節點),每個結點都與一個概率函數相關。

    看看!說明啥?長得多麼多麼像醫學中各個疾病與其危險因素的關係啊!多麼多麼像臨床診斷指南里一下癥狀中幾條中滿足幾條考慮診斷的診斷軸啊!

    上圖為慢性咳嗽的診斷流程圖

    此圖是呼吸系統疾病(肺癌、支氣管炎、肺結核)中危險因素與疾病之間相關概率的貝葉斯網路圖,當然是簡化了的。http://www.norsys.com/tutorials/netica/secA/tut_A2.htm

    而形成一個可靠的以某個疾病為主題的貝葉斯網路圖,則需要輸入大量的原始數據進行計算。更進一步,當貝葉斯網路在結構上固定為標準化的輸入輸入的節點層級,變數間只能先進行線性組合,最後對一個變數進行非線性轉換,應用於估計概率模型的參數時,它便成了人工神經網路。

    傳說中的診斷機器人沃森,則是這些機器學習方法組合運用在醫學數據分析中的集大成者。機器人「坐診」代替醫生為時不遠?醫療領域將迎來大變革

    總之,作為機器學習的統計學基礎的貝葉斯概率分析理論,其實我們的生活息息相關,不僅僅在於醫學數據分析。

    參考文獻:

    宗成慶《統計自然語言處理》(第二版)清華大學出版社 p106

    董聖傑,冷衛東,田家祥,曾憲濤. Meta分析系列之五: 貝葉斯Meta分析與WinBUGS軟體.中國循證心血管醫學雜誌2012年10月第4卷第5期

    廖煒圻 多處理因素meta分析與間接比較的模擬研究 南方醫科大學碩士學位論文2011

    Madden LV, Piepho HP, Paul PA.Statistical Models and Methods for Network Meta-Analysis. Phytopathology. 2016 Aug;106(8):792-806.

    da Costa BR, Reichenbach S, Keller N, Nartey L, Wandel S, Jüni P, Trelle S.Effectiveness of non-steroidal anti-inflammatory drugs for the treatment of pain in knee and hip osteoarthritis: a network meta-analysis.Lancet. 2016 May 21;387(10033):2093-105.

    Cipriani A, Zhou X, Del Giovane C, Hetrick SE, Qin B, Whittington C, Coghill D, Zhang Y, Hazell P, Leucht S, Cuijpers P, Pu J, Cohen D, Ravindran AV, Liu Y, Michael KD, Yang L, Liu L, Xie P.Comparative efficacy and tolerability of antidepressants for major depressive disorder in children and adolescents: a network meta-analysis.Lancet. 2016 Aug 27;388(10047):881-90.


    之前採訪過一名前海徵信里的「數據科學家」,他和我解釋了什麼是貝葉斯網路,也分享了貝葉斯網路的在實踐中的應用。他 大致是這麼說的:

    貝葉斯網路相關的技術,簡單來說,它是一種因果的推理。比如說,我知道一個5億人群體里的300萬人的一些信息,再結合這300萬人其他領域的標籤,我們大概可以推測一下,其他4億9千7百萬人的這些數據是怎麼樣一個分布。

    因為,做風控模型的時候,如果數據是這樣:比如說1億人裡面,我有前100萬人的某些標籤,另100萬人的其他標籤……這樣的標籤其實是不完整的,實際操作中十分難用。

    前海徵信去年做了一個數據融合項目,就是想把這些零散的標籤數據融合起來,放到模型里,讓它變得更能幫助他們做決策——這塊其實技術難度很高。

    最後,據介紹,他們用了貝葉斯網路相關技術後,去看他們的模型表現,效果大概提高了30%左右。

    (摘自雪梨醬發在DT專欄里的文章:前海徵信卅伍研究院:為了對付「老賴」,我們打入了他們內部 - 知乎專欄)


    https://www.youtube.com/watch?v=A6Ud6oUCRakindex=21list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi


    首先你需要了解什麼是樸素貝葉斯分類器。

    樸素貝葉斯分類器通過假設每一個特徵的出現都是獨立事件,簡化了計算複雜度,也避免了樣本稀疏的問題。雖然這一假設常常是不準確的,但樸素貝葉斯在實際工程中出乎意料地好用。因為很多應用並不在乎精確的類概率,只關心最後的分類結果。

    然而,當特徵之間相關性比較強,而我們又要求比較精確的類概率的時候,樸素貝葉斯就不夠用了。

    也就是說,下面的式子里p [f1, f2 .. fn]不好算了。

    pSucc [f1, f2 .. fn] S =
    (p S) * (pSucc S [f1, f2 .. fn]) / (p [f1, f2 .. fn])

    回顧一下,如果[f1, f2 .. fn]是獨立事件,那我們有:

    p [f1, f2 .. fn] =
    (p f1) * (p f2) * .. * (p fn)

    現在每一項特徵的概率可能受其他特徵的影響。假設有一個函數pp可以表達這些影響:

    p [f1, f2 .. fn] =
    (pp f1) * (pp f2) * .. * (pp fn)

    那麼問題就在於pp是如何定義的?

    既然pp表達的是某一事件受其他事件的影響,那pp就可以用條件概率來定義:

    pp f = pSucc (influenced f) f

    對於給定的特徵f,我們找出所有影響它的特徵[inf1, inf2 .. infn]

    influenced f =
    pSucc [inf1, inf2 .. infn] f

    pSucc [inf1, inf2 .. infn] f這看起來是不是很熟悉?我們討論幼稚貝葉斯的時候提到的是pSucc [f1, f2 .. fn] S。這兩者的結構是一樣的。

    因此,這其實是一個遞歸調用幼稚貝葉斯分類器的問題。

    基於同樣的思路,我們可以處理(pSucc S [f1, f2 .. fn]).

    不過實際工程中,因為數據量很大,遞歸調用貝葉斯分類器是吃不消的。所以為了降低計算複雜度,我們需要進行一些簡化

    1. 當影響程度很低時,我們直接忽略,視為獨立事件。
    2. 我們只考慮直接影響給定特徵f的特徵,不考慮間接影響。例如,pinf1可能通過影響inf1來間接影響f,這種情況不考慮。
    3. 當我們考慮影響給定特徵f的特徵時,假定這些影響f的特徵是相互獨立事件。

    當然,如果有必要,上面的簡化也可以放寬,以提高計算複雜度為代價,獲得更準確的估計。

    進行上述簡化後,我們得到了貝葉斯網路(Bayesian network)

    一個簡單的貝葉斯網路

    貝葉斯網路中,特徵間的相互影響關係,我們用有向無環圖(DAG)來表示。在數學上,我們用圖(Graph)來表示對象間的相互關係。圖由結點(代表對象)和(代表關係)組成。如果邊具有方向,那麼得到的圖就稱為有向圖。對於一個有向圖而言,如果從任一節點出發,都無法經過若干條邊回到該節點,那麼這個有向圖就稱為有向無環圖。在貝葉斯網路中,我們用有向無環圖的邊的方向,表示某個特徵對另一個特徵的影響。無環則保證特徵間的相互影響關係不會陷入無窮無盡的循環。

    特徵對給定特徵的具體影響程度,我們用條件概率表(CPT)來表示。條件概率表這個概念很容易理解。下圖就展示了一個簡單的貝葉斯網路中各特徵的條件概率表。

    最後,特徵間的相互影響關係,也就是DAG的構建,依賴於經驗或領域知識。條件概率表,則可以用樸素貝葉斯來改進。


    Xbox Trueskill排名系統是BN的另外一種典型應用。Computing Your Skill


    我記得,中醫研究院的一位老中醫,名字記不得了,此人應該屬於解放後的四大名醫(或者是八大名醫)之列。他是研究肝病的,也做了類似的計算機輔助診斷的軟體。不知後來的如何了?


    推薦閱讀:

    數據挖掘、機器學習、自然語言處理這三者是什麼關係?這幾個怎麼入門啊?
    參與大數據競賽應該看什麼書?
    kaggle上有哪些好的競賽項目?哪些適合入門,哪些適合進階
    為什麼xgboost/gbdt在調參時為什麼樹的深度很少就能達到很高的精度?
    如何看待mahout和milib之間的關係,mahout真的死了么?

    TAG:演算法 | 數據挖掘 | 機器學習 | 貝葉斯網路 |