Ⅰ 初識貝葉斯
什麼貝葉斯定理、貝葉斯方法、貝葉斯網路這種,外行人一聽頭就疼,這完全沒有乘法分配律乘法結合律來的親民啊!實際上,他確實不親民(攤手)
那我們就從如何著手去處理貝葉斯網路為目標, 好好看,好好學 (這是文章基於的框架結構,在此基礎上進行了補充說明)。
咱先整抓球,一個不透明的帶子,裡面有4個除了顏色完全相同的球:2紅1綠1藍。此時你去隨手抓,那問你抓到各個顏色球的概率是多少?我想是個正常人都會說:那不50%、25%、25%?這是不論你取多少次,概率θ始終不變的事件,即不隨觀察結果X的變化而變化。
顯然啊!那不然會是什麼呢?
這種觀點長期統治著人們,或者說,統治著正常人,這叫頻率派觀點。直到有個叫Thomas Bayes的人出來攪局。
貝葉斯不介紹了,生前民間學術「屌絲」,身後顛覆了概率史啊。這里說一下他最終發表的一篇多年後轟動世界的文章:An essay towards solving a problem in the doctrine of chances(機遇理論中一個問題的解)
回到上面這個問題,袋子里取紅球的概率θ是多少?正常人都說50%,貝葉斯說「NO!」。他認為取的紅球的概率是個不確定的值,因為其中含有機遇的成分。
是不是不好理解了?那我們換個例子來講(這個抓球有什麼機遇,我也不懂,但大佬都以這些開頭,所以咱換個例子)
78澤幹了兩年程序員,現在想自己創業開個外包公司。這個結果無非「走向人生巔峰」和「欠一屁股債」,要麼成功要麼失敗。現在我們大家來估計一下他成功的概率有多大?你們可能會說:「這誰啊,兩年就創業,嚇他個鬼,不可能的。成功幾率最多5%。」而我對他的為人比較了解,他有想法,有方法,有思路,還有毅力,能吃苦,還有情調,有凝聚力,還為他人著想等,那我就估計他成功的概率有75%以上。
這種不同於最開始的「非黑即白、非0即1」的思考方式,就是貝葉斯式的思考方式。
【頻率派】把需要推斷的參數θ看作是固定的未知常數,即概率雖然是未知的,但最起碼是確定的一個值,同時,樣本X是隨機的,即不管球幾紅幾綠,事件的概率θ一定。所以頻率派重點研究樣本空間,大部分的概率計算都是針對樣本X的分布;
【貝葉斯派】認為參數θ是隨機變數,而樣本X是固定的。由於樣本X固定,所以他們重點研究的是參數θ的分布。
這樣,貝葉斯派提出了一個思考問題的固定模式:
先驗分布π(θ)+ 樣本信息X ==> 後驗分布π(θ|x)
這意味著,新觀察到的樣本信息將修正人們以前對事物的認知。換而言之,在得到新的樣本信息前,人們對θ的認知是先驗分布π(θ),在得到新的樣本信息X後,人們對θ的認知受其影響變為π(θ|x)。
先驗信息一般來源於經驗和歷史資料,比如在S7以前的SKT VS RNG,解說總會根據歷年比賽結果進行一個勝負的預判來相應解說。但從S7,S8這兩個賽季後,發現韓國隊不行了!那麼現在你再看SKT VS RNG,可就不一定了不是嗎?那是不是就是X影響了π(θ)得到了π(θ|x)。
後驗分布π(θ|x)一般也認為是在給定樣本X的情況下的θ條件分布,而使π(θ|x)達到最大的值θMD,這個θMD稱謂最大後驗估計,類似於統計學的極大似然估計。
這里插曲一下,似然和概率,很多人其實都不明白這是啥區別。似然(likelihood)在非正式場合中和概率(probability)幾乎相同。但在統計學中完全不同。概率是在特定環境下某件事發生的可能性,也就是結果沒有產生之前依據環境所對應的參數來預測某件事情發生的可能性;而似然正好相反,是在確定的結果下去推測產生這個結果的可能環境(參數)。
結果和參數相互對應的時候,似然和概率在數值上是相等的。 了解更多似然,點擊這里
當然除了上述思考模式,還有舉世聞名的貝葉斯定理。
先回顧幾個名詞
條件概率(又稱後驗概率)就是事件A在另外一個事件B已經發生的條件下發生的概率P(A|B):
自己花幾個圓圈就能推導出這個公式了。
聯合概率表示兩個事件共同發生的概率:
邊緣概率(又稱先驗概率)是某個事件發生的概率。邊緣概率是這樣得到的:在聯合概率中,把最終結果中那些不需要的事件通過合並成它們的全概率從而消去它們(對離散隨機變數用求和得全概率,連續隨機變數用積分得全概率),這稱為邊緣化(marginalization),比如A的邊緣概率表示為P(A),B的邊緣概率表示為P(B)。
現在考慮問題:P(A|B)是在B發生的情況下A發生的可能性。
(1)首先,B發生之前,對事件A發生的基本概率判斷為A的先驗概率P(A);
(2)其次,事件B發生後,我們對事件A發生概率重新評估,稱為A的後驗概率P(A|B);
(3)類似,事件A發生前,對B的先驗概率P(B);
(4)事件A發生後,B後驗概率P(B|A)。
貝葉斯定理如下:
推導證明如下:
上式兩邊同時除以P(B),若P(B)非零,變得到貝葉斯定理公式表達式。
上述為傳統的貝葉斯公式寫法,還有另一種寫法,稱之為貝葉斯推斷。
對條件概率公式進行變形,得到如下形式:
P(A)稱為先驗概率,P(A|B)為後驗概率,而P(B|A)/P(B)稱之為可能性函數(likelyhood),這是一個調整因子,使得預估概率更接近真實概率。
貝葉斯推斷的含義:我們先預估一個先驗概率,然後加入實驗結果,看這個實驗到底是增強還是削弱了先驗概率,由此得到更接近事實後驗概率。
這里,可能性函數>1,意味著先驗概率被增強,事件A的發生可能性變大;可能性函數=1,意味著B事件無助於判斷事件A的可能性;可能性函數<1,意味著先驗概率被削弱,事件A的可能性變小。
舉例加深理解:
【1】水果糖問題
兩個一模一樣的碗,一號碗中有30顆水果糖和10顆巧克力,二號碗有水果糖和巧克力各20顆。現在隨機選擇一個碗,從中摸出一顆糖,發現時水果糖。請問這個水果糖來自一號碗的概率是多少?
解:我們假定,H1表示碗一,H2表示碗二,有條件已知P(H1)=P(H2),即在取出水果糖之前,這兩個碗被選中的概率相同。因此P(H1)=0.5,此為先驗概率。
再假定E表示水果糖,所以問題變為已知E的情況下,來自碗一的概率有多大:求P(H1|E)。我們把這個稱為後驗概率,即E事件發生後,對P(H1)的修正。
根據條件概率公式,得到
已知:P(H1)=0.5,P(E|H1)=0.75,那麼求出P(E)就可以得到答案,根據全概率公式(推導根據條件概率公式推就行了)
得到:
將已知帶入得P(E)=0.625,最後將結果帶入原方程,得到P(H1|E)=0.6,也就是說取出水果糖後,H1事件的可能性得到了增強(P(E|H1)/P(E)=0.75/0.625=1.2>1)。
貝葉斯公式還有一個最經典也是目前最廣泛的應用:拼音糾錯,谷歌的拼音檢查就是基於貝葉斯方法。
《人工智慧:現代方法》作者之一Peter Norvig曾寫一篇介紹如何寫一個拼寫檢查的文章( 原文 ),使用的也是貝葉斯方法。
用戶輸入一個單詞,可能拼寫正確,也可能拼寫錯誤。如果把拼寫正確的情況記做c,錯誤記做w,那麼拼寫檢查要做的事情就是:在發生w的情況下,試圖推斷出c,換而言之,就是已知w,然後在若干個備選方案中,找出可能性最大的那個c,即求P(c|w)的最大值。
由於對於所有備選的c來說,對應的都是同一個w,所以它們的P(w)相同,因此我們只需要最大化P(w|c)*P(c)。
其中P(c)表示某個正確的單詞出現的「概率」,它可以用「頻率」代替。如果我們有一個足夠大的文本庫,那麼這個文本庫中每個單詞的出現頻率,就相當於它的發生概率。某個詞的出現頻率越高,P(c)就越大。比如在你輸入一個錯誤的單詞「tes」的時候,系統更傾向於「tea」,而不是「tee」,因為tea更常見。
當然這其中要是深究,還有更多的可能性,比如說錯誤字母與正確字母在鍵盤上的位置,也許你是按錯了所以會拼錯,但實際上你要拼寫的單詞就是那個頻率低的單詞,是不是?在這里,初學,咱先放一放。
P(w|c)表示在試圖拼寫c的情況下,出現拼寫錯誤w的概率。為了簡化問題,假定兩個單詞在字形上越接近,就越有可能拼錯,P(w|c)就越大。舉例來說,相差一個字母的拼法,就比相差兩個字母的拼法,發生概率越高。你想拼寫「july」,錯誤拼成「julw」的可能性就比錯拼成「jullw」高很多。一般把這種問題稱為「編輯距離」。
貝葉斯網路(Bayesian Network),又稱信念網路(Belief Network),或有向無環圖模型,十一中概率圖模型。它是一種模擬人類推理過程中因果關系的不確定性處理模型,其網路拓撲結構是一個有向無環圖(DAG,direvted acyclic graphical)。
貝葉斯網路中節點表示隨機變數,認為有因果關系(或非條件獨立)的變數或命題則用剪頭來連接。
例如,假設節點E直接影響到節點H,即E-->H,則用從E指向H的箭頭建立節點E到節點H的有向弧(E,H),權值(即連接強度)用條件概率P(H|E)來表示。
簡而言之,把某個研究系統中涉及的隨機變數,根據是否條件獨立繪制在一個有向圖中,就形成了貝葉斯網路。其主要用來描述隨機變數之間的條件依賴,用圈表示隨機變數(random variables),用箭頭表示條件依賴(conditional dependencies)。
關於隨機變數,這里不同於普通公式中的x,z那種未知數,之前專門研究過,但是參考的網址找不到了。隨手記了一些筆記,分享一下(字丑):
令G=(I,E)表示一個有向無環圖(DAG),其中I代表圖形中所有的節點的集合,而E代表有向連接線段的集合,且令X=(Xi),i∈I為其有向無環圖中某一節點i所代表的隨機變數,若節點X的聯合概率可以表示成:
則稱X為相對於一有向無環圖G的貝葉斯網路,其中,pa(i)表示節點i的「因」,也可以理解為「父節點」。
給訂如下圖所示的一個貝葉斯網路:
由圖可知:
(1)x1,x2,......,x7的聯合分布為:
(2)x1和x2獨立(head-to-head);
(3)x6和x7在x4給訂的條件下獨立(tail-to-tail)。
根據上圖,(1)很好理解,(2、3)所述的條件獨立是什麼意思呢?其實2、3點是貝葉斯網路中3個結構的其中兩種。為了說清楚這個問題,需要引入D-Separation(D-分離)這個概念。
D-Separation是一種用來判斷變數是否條件獨立的圖形化方法。換而言之,對於一個DAG,D-Separation方法可以快速的判斷出兩個節點之間是否條件獨立。
有:P(a,b,c)=P(a)* P(b)* P(c|a,b)成立,化簡如下:
在c未知的條件下,a、b被阻斷(blocked),是獨立的,稱之為head-to-head條件獨立,對應本節圖1的x1,x2獨立。
考慮c未知和已經兩種情況:
1、在c未知的時候,有:P(a,b,c)=P(c)P(a|c)P(b|c),此時,無法得出P(a,b)=P(a)P(b),即c未知時,a、b不獨立;
2、在c已知的時候,有:P(a,b|c)=P(a,b,c)/ P(c),然後將P(a,b,c)=P(c)P(a|c)P(b|c)帶入此式中,得到:P(a,c|c)=P(a,b,c)/ P(c)=P(c)P(a|c)P(b|c)/P(c)=P(a|c)P(b|c),即c已知時,a、b獨立。
所以,在c給定的條件下,a、b被blocked,式獨立的,稱之為tail-to-tail條件獨立,對應本節圖1中「x6,x7在x4給定的條件下獨立」。
分c未知和已知兩種情況:
1、c未知時,有:P(a,b,c)=P(a)*P(c|a)*P(b|c),但無法推出P(a,b)=P(a)P(b),即c未知時,a、b不獨立;
2、c已知時,有:P(a,b|c)=P(a,b,c)/ P(c),且根據P(a,c)=P(a)P(c|a)=P(c)P(a|c),可化簡得到:
所以在給定c的條件下,a、b被blocked,是獨立的,稱之為head-to-tail條件獨立。
head-to-tail其實就是一個鏈式網路,在xi給定的條件下,xi+1的分布和x1,x2,...,xi-1條件獨立。這意味著什麼?這說明xi+1的分布狀態只和xi有關,和其他變數都無關!通俗一點說,當前狀態只跟上一狀態有關,跟上上次或上上上上上上上次狀態都無關!這種順次演變的隨機過程,就叫做馬爾科夫鏈(Markov chain)。有:
將上述節點推廣到節點集,則:對於任意的節點集A,B,C,考察所有通過A中任意節點到B中任意節點的路徑,若要求A,B條件獨立,則需要所有的路徑都被blocked,即滿足下列兩個前提之一:
A和B的「head-to-tail」和「tail-to-tail」路徑都通過C;
A和B的「head-to-head」路徑不通過C及C的子孫;
最後舉例說明上述D-Separation的3種情況(即貝葉斯網路的3種結構形式):
Factor Graph是概率圖的一種,概率圖有多重,最常見的就是Bayesian Network和Markov Random Fields(馬爾科夫隨機場)。
在概率圖中,求某個變數的邊緣分布是最常見的問題。這個問題有很多種求解方法,其中之一就是可以把Bayesian Network和Markov Random Fields轉換成Factor Graph,然後用sum-proct演算法求解。
以下圖為例:
對於上圖,在一個人已經呼吸困難(dyspnoea)的情況下,其抽煙(smoking)的概率是多少?
P(smoking | dyspnoea = yes)= ?
繼續推算如下:(這里我就不自己碼了,好多箭箭頭有點麻煩的,還是用原圖簡單明了)
對上述推導過程作解釋如下:
1.第二行:對聯合概率關於b,x,c求和(在d=1的條件下),從而消去b,x,c,得到s和d=1的聯合概率;
2.第三行:最開始,所有變數都在sigma(d=1,b,x,c)的後面,但由於P(s)跟「d=1,b,x,c」都沒關系,可以提到式子的最前面。而且P(b|s)和x、c沒關系,所以也可以把它提出來,放到sigma(b)後,從而式子的右邊剩下sigma(x)和sigma(c)。
(ps:這塊看能看明白,至於為什麼sigma(x)和sigma(c)不能寫在一起,我也,哈哈哈~等之後再來補空擋,這里先記著。)
上圖中Variable elimination表示的是變數消除的意思。為此引入因子圖的概念。
定義異常的晦澀難懂,你光看著名字你就摸不著頭腦,所以咱先通俗來講,所謂因子圖就是對函數進行因式分解得到的一種概率圖。一般內含兩種節點:變數節點和函數節點。眾所周知,一個全局函數通過因式分解能夠分解為多個局部函數的乘積,這些局部函數和對應的變數關系就體現在因子圖上。
舉例說明,現有一全局函數,其因式分解方程為:
其中fA、fB、fC、fD、fE為各函數,表示變數之間的關系,可以是條件概率也可以是其他關系(如Markov Random Fields中的勢函數)。
其因子圖為:
在因子圖中,所有的頂點不是變數節點就是函數節點,邊線表示他們之間的函數關系。
提及馬爾科夫隨機場,就再補充一些概念:
我們知道,有向圖模型,稱之為貝葉斯網路。但有些情況下,強制對某些節點之間的邊增加方向是不合適的。使用沒有方向的無向邊,形成了無向圖模型(Undirected Graphical Model,UGM),又被稱為馬爾科夫隨機場或者馬爾科夫網路(MRF or Markov Network)。
回歸本文主旨,首先我們舉例說明如何把貝葉斯網路(和MRF),以及把馬爾科夫鏈、隱馬爾科夫模型轉換成因子圖,以上圖為例,根據各個變數對應的關系,可得:
其對應的因子圖為(以下兩種皆可):
有上述例子總結出貝葉斯網路構造因子圖的方法:
·貝葉斯網路中的一個因子對應因子圖中的一個節點
·貝葉斯網路中的每一個變數在因子圖上對應邊或者半邊
·節點g和邊x相連當且僅當變數x出現在因子g中
我把繪圖的思考過程寫下來,你跟著畫一遍就會明白:
1.找出已存在的先驗概率,圖中為P(u)和P(w),那麼因子對應節點,所以先畫出P(u)和P(w)的節點,就是兩個框;然後因子P(u)中出現的變數是u,那麼由P(u)節點引出一條邊,這條邊就是u,同理P(w)引出w邊;
2.發現因子P(x|u,w)知,x是u和w下的條件概率,故做節點P(x|u,w),然後將邊u和w與之相連,並有該節點引出x邊;
3.有因子P(y|x)和P(z|x)發現基於條件x引出兩個變數y和z,那麼此時需要將X邊拆分成兩條邊(我猜想這個可能就叫半邊,沒有專門去查),並分別接入到P(y|x)和P(z|x)節點,再由各自節點對應引出y邊與z邊,結束作圖。
對馬爾科夫鏈轉換的因子圖和隱馬爾科夫模型轉換而成的因子圖,做法相同。這里等以後專門講馬爾科夫的時候再仔仔細細說。這里把圖貼出來給大家了解一下(應該可以很快看明白):
到這,我們算把因子圖講透了,現在看看維基網路上是這樣定義因子圖的:將一個具有多變數的全局函數因子分解,得到幾個局部函數的乘積,以此為基礎得到的一個雙向圖叫做因子圖。
怎麼樣,這樣直接看定義,你懂嗎?
我們已經學會如何畫因子圖了,下面來思考這樣一個問題:如何由聯合概率分布求邊緣概率分布?
這里給出公式:
對Xk以外的其他變數的概率求和,最終剩下Xk的概率。這就是該定義的原理。你明白了嗎?我有點迷糊反正,可能說成話好理解,但是這個公式未免也太模糊了點(f真的萬能)。
其實可以這么理解:
如果有:
那麼:
就是說把除了xk以外的所有隨機變數的概率求出來,這個f就表示一個多項式,是關於f括弧裡面x的。然後概率上面有一橫,表示的是不發生概率。
好吧,其實這塊我也沒太明白,先埋個坑,以後回來填。
現在假定我們要計算:
同時,f能被分解成如下因子圖(看到這里你大概能明白一點我上面說的f是多項式是什麼意思了):
我們都知道乘法分配律:a * b + a * c = a * (b + c),等號左邊兩乘一加,等號右邊一加一乘,效率不用多說。現在我們就藉助分配律的思想,把因子圖給分配咯!
怎麼看公因子很簡單,例如X3是有f1(x1)和f2(x2)通過f3這個函數得來的(即因子圖那節所述,P(x3|x1,x2)),而之後的f5需要x3做因子(條件),所以自然左邊這個框就成了公因子。
因為變數的邊緣概率等於所有與他相連的函數傳遞過來的消息的乘積,所以計算得到:
觀察上述計算過程,可以發現類似於「消息傳遞」的觀點,且總共有兩個步驟:
1.對於f的分解圖,根據左框(藍色)、右框(紅色)所包圍的兩個box外面的消息傳遞:
2.根據紅藍框為主的兩個box內部的消息傳遞:
看上圖消息傳遞的方向(箭頭),根據
我們可以推導出:
這樣就將一個概率分布寫成了兩個因子的乘積,而這兩個因子可以繼續分解或者通過已知條件得到。這種利用消息傳遞的觀念計算概率的方法就是sum-proct演算法。基於因子圖可以用該演算法高效地求出各個變數的邊遠分布。
sum-proct演算法,又稱belief propagation,有兩種消息:
一種是變數(variable)到函數(function)的消息 如下圖所示:
此時,
另一種是函數到變數的消息 如下圖所示:
此時,
如果因子圖是無環圖,則一定可以准確地求出任意一個變數的邊遠分布;如果是有環圖,則無法用該演算法准確求出邊遠分布。解決方法有3個:
1、刪除貝葉斯網路中的若干邊,使其不含有無向環
2、重新構造沒有環的貝葉斯網路
3、選擇loopy belief propagation演算法(sum-proct的遞歸版演算法),該演算法選擇環中某個消息,隨機賦初值,然後用sum-proct演算法,迭代下去,因為環的存在所以一定會達到賦值的消息,然後更新該消息,繼續迭代,直至沒有消息改變為止。缺點是不能確保收斂。
最後,該演算法有個類似的max-proct演算法,弄懂了sum的,max的幾乎完全一樣。另這兩個演算法也能夠應用到隱馬爾科夫模型(hidden Morkov models)上。至於馬爾科夫系列,下個專題咱再見~
Ⅱ 如何使用hugin expert,想要做貝葉斯網路模擬下載了hugin lite軟體,可是如何使用呢
你有hugin lite軟甲啊?能不能發一個給我呢....我到處都找不到下載 。。。謝謝了。。。
Ⅲ 怎麼通俗易懂地解釋貝葉斯網路和它的應用
我們首先呢下載貝葉斯網路工具箱再個呢解壓壓縮包然後將工具箱中bnt文件夾復制到matlab工具箱文件夾中(D:Program FilesMATLABR2014a oolbox)最後是打開matlab2014a,貝葉斯網路是處理不確定信息做有效的表示方法之一。其關鍵的特徵之一是提供了把整個概率分布分解成幾個局部分布的方法,網路的拓撲結構表明如何從局部的概率分布獲得完全的聯合概率分布。 貝葉斯網路適合於對領域知識具有一定了解的情況,至少對變數間的依賴關系較清楚。否則直接從數據中學習貝葉斯網路結構復雜性極高(隨節點的增加成指數級增長)在這個網路meta分析中,研究者比較了多種非類固醇抗炎葯治療膝、 髖關節骨性關節炎疼痛的療效,那兩個大點就是樣本量最大的兩個不同的葯物組(變數)。當然,偉大的貝葉斯統計怎麼會僅僅局限於對文獻數據的網路meta分析?教科書上說,貝葉斯網路,既形式上,一個貝葉斯網路就是一個有向無環圖,結點表示隨機變數,可以是可觀測量、隱含變數、未知參量或假設等;結點之間的郵箱邊表示條件依存關系,箭頭指向的結點依存於箭頭發出的結點(父節點),每個結點都與一個概率函數相關。看看!說明啥?長得多麼多麼像醫學中各個疾病與其危險因素的關系啊!多麼多麼像臨床診斷指南里一下症狀中幾條中滿足幾條考慮診斷的診斷軸啊!
Ⅳ 貝葉斯網路主流工具軟體
目前國際上存在許多種 BN 處理工具,一般均同時支持多種圖模型處理。下面介紹幾種比較常見的 BN 工具軟體。
( 1) Hugin Expert: 該軟體包括一系列產品,自稱是基於 BN 的人工智慧領域的領航者,既可作為單個工具使用,也可集成到其他產品中使用。目前在軟體、醫學、工業、軍事、警容、信息處理以及農業等多個領域得到了廣泛應用。如用應用於 NOKIA 公司的移動網路故障診斷、醫學決策支持、隧道施工設計階段的決策支持、數據挖掘及風險評估等。
( 2) 微軟的 BBN( Microsoft Belief Networks) : 該軟體採用視窗界面,界面友好且操作簡單,並且提供了 API 介面,以供 VB 調用。缺點是用戶不能自主選擇概率推理演算法,且不提供結構學習功能,即不能從數據中學習建立 BN 模型。
( 3) Netica: 該軟體是加拿大 Norsys 軟體公司開發研製的圖模型處理工具。其主要特點是提供了圖形化的建模界面及概率參數展示界面,方便直觀且易於操作,並且提供了 API介面,供 Java 調用。缺點是用戶不能自主選擇概率推理演算法。
( 4) Ergo: 該軟體是由 Noetic 公司開發研製的可視化建模分析軟體,它功能單一且應用范圍較窄,主要用於專家系統的建立,對節點的個數和狀態空間的范圍都有一定程度上的限制。
( 5) BNJ: 是由肯尼索州立大學開發的開放源碼軟體,採用視窗界面,兼容其他 BN 建模軟體的文件格式,包括 Netica、Ergo、Hugin Expert、GeNie 等。支持精確推理和近似推理、結構學習和參數學習,並且提供了 API 介面供調用。該軟體最大的缺點是可操作性差,且幫助功能相對較弱。
( 6) GeNie 2. 0: 該軟體是匹茲堡大學決策系統實驗室( Decision Systems Laboratory,U-niversity of Pittsburgh) 開發研製的圖模型處理軟體。採用了圖形化建模界面,界面直觀,操作簡單,提供多種推理演算法,且支持結構學習和參數學習。該實驗室還用 VC + + 開發了API 介面 SmileX 和 Smile. net ,以供 VB、VC + + 、Java、C Sharp 等多種語言調用。
上述工具各有特點,本文選用了 GeNie 軟體及其提供的 Smile. net 軟體包,進行 BN 模型構建、BN 學習及推理等工作。圖 2. 1 為 GeNie 2. 0 軟體的主界面。
圖 2. 1 Genie2. 0 主界面
Ⅳ 求應用貝葉斯網路的MATLAB程序實例(或R軟體程序實例)
希望有幫助,呵呵
Ⅵ 如何利用貪心法構建貝葉斯網路代碼
基於matlab的貝葉斯網路工具箱BNT是kevin p.murphy基於matlab語言開發的關於貝葉斯網路學習的開源軟體包,提供了許多貝葉斯網路學習的底層基礎函數庫,支持多種類型的節點(概率分布)、精確推理和近似推理、參數學習及結構學習、靜態模型和動態模型。
貝葉斯網路表示:BNT中使用矩陣方式表示貝葉斯網路,即若節點i到j有一條弧,則對應矩陣中(i,j)值為1,否則為0。
結構學習演算法函數:BNT中提供了較為豐富的結構學習函數,都有:
1. 學習樹擴展貝葉斯網路結構的TANC演算法learn_struct_tan().
2. 數據完整條件下學習一般貝葉斯網路結構的K2演算法learn_struct_k2()、貪婪搜索GS(greedy search)演算法learn_struct_gs()和爬山HC(hill climbing)演算法learn_struct_hc()等。
3. 缺失數據條件下學習一般貝葉斯網路結構的最大期望EM(expectation maximization)演算法learn_struct_EM()和馬爾科夫鏈蒙特卡羅MCMC(Markov Chain Monte Carlo)learn_struct_mcmc()演算法等。
參數學習演算法函數:BNT中也提供了豐富的參數學習函數,都有:
1. 完整數據時,學習參數的方法主要有兩種:最大似然估計learn_params()和貝葉斯方法bayes_update_params();
2. 數據缺失時,如果已知網路拓撲結構,用EM演算法來計算參數,倘若未知網路拓撲結構,使用結構最大期望SEM(structure EM)演算法learn_struct_SEM()。
推理機制及推理引擎:為了提高運算速度,使各種推理演算法能夠有效應用,BNT工具箱採用了引擎機制,不同的引擎根據不同的演算法來完成模型轉換、細化和求解。這個推理過程如下:
BNT中提供了多種推理引擎,都有:
1. 聯合樹推理引擎jtree_inf_engine();
2. 全局聯合樹推理引擎global_joint_inf_engine();
3. 信念傳播推理引擎 belprop_inf_engine();
4. 變數消元推理引擎 var_elim_inf_engine().
Ⅶ 用GeNIe2.0軟體如何構建貝葉斯網路各節點的先驗概率怎麼輸入到軟體中啊
滑鼠放在節點上,點擊右鍵,選擇 Node Properties,選擇 Definition 選項卡,,在該頁面內輸入條件概率。
Ⅷ 求遺傳演算法優化貝葉斯網路matlab代碼。。。感激涕零!!!
} catch (IOException e) {
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
response.setContentType("text/html;charaset=utf-8");
response.getWriter().write("{success:'true',fileURL:'"+basePath + uuid+"."+fileType + "'}");
}
Ⅸ 不好意思,打擾了。我想問一下您了解hugin expert軟體么它是基於hugin演算法么
Hugin是主要用於商業智能、風險預測、定價預測、風險分析、保險欺詐偵測、風險管理、犯罪行為分析、氣象氣候分析等的基於貝葉斯網路的一個決策開發工具。
這個你要先了解什麼是貝葉斯網路,然後在學這個軟體