題目:貝葉斯網路綜合應用
截止到現在,已經討論了貝葉斯網路結構學習、貝葉斯網路引數學習、貝葉斯網路推理,現在應該可以應用貝葉斯網路建模了。實際中,出發點一般是乙個資料集,根據資料集首先學得貝葉斯網路結構(有向無環圖dag),進而學得貝葉斯網路引數(條件概率表cpt),完成貝葉斯網路學習;根據學得的貝葉斯網路,可以完成一些推理。
貝葉斯系列的目錄:
貝葉斯網路結構學習:
貝葉斯網路結構學習方法簡介
貝葉斯網路結構學習若干問題解釋
貝葉斯網路結構學習之k2演算法(基於fullbnt-1.0.4的matlab實現)
貝葉斯網路結構學習之mcmc演算法(基於fullbnt-1.0.4的matlab實現)
貝葉斯網路結構學習(基於bdagl工具箱的matlab實現)
貝葉斯網路結構學習之連續引數處理方法
貝葉斯網路引數學習:
貝葉斯網路引數學習(基於fullbnt-1.0.4的matlab實現)
貝葉斯網路推理:
貝葉斯網路與最大可能解釋(mpe)問題
貝葉斯網路推理演算法簡單羅列
貝葉斯網路推理之最大可能解釋問題(基於fullbnt-1.0.4的matlab實現)
貝葉斯網路推理之後驗概率問題(基於fullbnt-1.0.4的matlab實現)
這裡我們採用網路上公開的天氣資料集,該資料集很小,裡面的資料純屬虛構。天氣資料集列舉了在何種天氣條件下可以進行體育運動,資料集中的樣本由五個屬性值來表示,通過測量不同天氣四個指標得到樣本。天氣問題的四個指標是:天氣趨勢(outlook)、溫度(temperature)、濕度(humidity)和颳風(windy)。最後乙個屬性表示樣本的類別,即在四個天氣指標的前提下得到是否可運動(play)的結論。該資料集僅有14個樣本,其中,天氣趨勢的屬性值分別為sunny, overcast, rainy;溫度的屬性值分別為hot,mild, cool;濕度的屬性值分別為high, normal;颳風的屬性值分別為true, false;是否可運動的屬性值分別為yes和no。(此部分主要摘自《袁梅宇. 資料探勘與機器學習 : weka應用技術與實踐[m]. 2版. 清華大學出版社, 2016.》1.5.1節第29頁)
天氣資料集如下:
sunny,hot,high,false,no
sunny,hot,high,true,no
overcast,hot,high,false,yes
rainy,mild,high,false,yes
rainy,cool,normal,false,yes
rainy,cool,normal,true,no
overcast,cool,normal,true,yes
sunny,mild,high,false,no
sunny,cool,normal,false,yes
rainy,mild,normal,false,yes
sunny,mild,normal,true,yes
overcast,mild,high,true,yes
overcast,hot,normal,false,yes
rainy,mild,high,true,no
為了能夠在matlab中處理,我們對屬性值作了如下轉換:
sunny-->1
overcast-->2
rainy-->3
cool-->1
mild-->2
hot-->3
normal-->1
high-->2
false-->1
true-->2
no-->1
yes-->2
程式如下:
%created by jbb0523@20180304pm
clear all;close all;clc;
%% (0)dataset
data=[
1,3,2,1,1;
1,3,2,2,1;
2,3,2,1,2;
3,2,2,1,2;
3,1,1,1,2;
3,1,1,2,1;
2,1,1,2,2;
1,2,2,1,1;
1,1,1,1,2;
3,2,1,1,2;
1,2,1,2,2;
2,2,2,2,2;
2,3,1,1,2;
3,2,2,2,1;
];data = data';
%% (1)learn bayes network struct
dag = learn_struct_mcmc_basic(data);
%% (2)learn bayes network parameters
ns = [3,3,2,2,2];
% make a tabula rasa
bnet = mk_bnet(dag, ns);
seed = 0;
rand('state', seed);
bnet.cpd = tabular_cpd(bnet, 1, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);
bnet.cpd = tabular_cpd(bnet, 2, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);
bnet.cpd = tabular_cpd(bnet, 3, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);
bnet.cpd = tabular_cpd(bnet, 4, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);
bnet.cpd = tabular_cpd(bnet, 5, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);
% find mles from fully observed data
bnet1 = learn_params(bnet, data);
%% (3)bayes network inference
evidence = cell(1,5);
evidence = 1;%sunny
evidence = 2;%mild
evidence = 1;%normal
evidence = 2;%true
engine = jtree_inf_engine(bnet1);
%most probable explanation
mpe = find_mpe(engine, evidence);
disp('mpe:');disp(mpe);
%posterior probability
engine1 = enter_evidence(engine, evidence);
prob = marginal_nodes(engine1, 5);
disp('probability:');disp(prob.t);
注:第24行呼叫了個人對learn_struct_mcmc進行了二次封裝處理所得的learn_struct_mcmc_basic.m,詳情參見《貝葉斯網路結構學習之mcmc演算法(基於fullbnt-1.0.4的matlab實現)》,執行程式時一定要有函式learn_struct_mcmc_basic.m。
執行結果如下:
程式中,我們根據資料集學得了貝葉斯網路結構和引數,然後進行推理:**當天氣晴朗(sunny)、溫度溫暖(mild)、溫度正常(normal)、颳風(true)的天氣條件下是否可以運動,mpe輸出結果為2(yes),後驗概率結果yes概率等於1,no概率等於0,因此二者的結論是相同的,可以運動。
貝葉斯網路
1.貝葉斯網路的定義 貝葉斯網路 bayesian network 又稱信念網路 belief network 或有向無環圖模型 directed acyclic graphical model 是一種概率圖模型,於1985年由judea pearl首先提出。它是一種模擬人類推理過程中因果關係的不確...
貝葉斯網路
一 貝葉斯網路,由乙個有向無環圖 dag 和條件概率表 cpt 組成。貝葉斯網路通過乙個有向無環圖來表示一組隨機變數跟它們的條件依賴關係。它通過條件概率分布來引數化。每乙個結點都通過p node pa node 來引數化,pa node 表示網路中的父節點。乙個簡單的貝葉斯網路,其對應的全概率公式為...
建立貝葉斯網路
博文內容源自 定義貝葉斯網路,必須知道圖形結構和相應引數。考慮下圖的圖形結構 指定上圖的有向無環圖,我們建立乙個屬性矩陣。clc clear 建立貝葉斯網路結構 四個節點號如下 cloudy 1,sprinkler 2,rain 3,wetgrass 4.節點號必須按照拓撲順序編號,即父節點在前子節...