利用matlab的贝叶斯工具箱BNT完成以下“过劳死”问题的建模:
使用BNT工具箱的贝叶斯结构、参数学习命令。
(t=ture; f=false )
参数学习代码:
%高级人工智能%
%BNT的参数学习%
N=5; % 4个节点分别为国家政策c、学校政策u、工作压力大w、身体不适b、过劳死d
Dag=Zeros(n,n ); %网络连接矩阵初始化
C=1; U=2; W=3; B=4; D=5; 初始化%节点顺序
Dag(c,u )=1; 定义%节点之间的连接关系
Dag(u,[WB] )=1;
Dag(w,d )=1;
Dag(b,d )=1;
discrete_nodes=1:N; %离散节点
node_sizes=2*Ones(1,n ); %节点状态数
%建立网络体系结构
bnet=MK_bnet(Dag,node_sizes,' names ',{ '国家政策(c ),'学校政策(u ),'工作压力大' w ),'身体不适' b ),'过劳死
%手动构建条件概率CPT表
bnet.CPD{c}=tabular_CPD(bnet,c,[0.50.5];
Bnet.CPD{u}=Tabular_CPD(Bnet,u,[0.950.010.050.99] );
bnet.CPD{w}=tabular_CPD(bnet,w,[0.90.050.10.95];
bnet.CPD{b}=tabular_CPD(bnet,b,[0.30.010.70.99];
bnet.CPD{d}=tabular_CPD(bnet,d,[0.3350.30.0500.6650.70.951];
%绘制构建的贝叶斯网络
图形
draw_graph(Dag )是
手动创建%示例数据samples :
nsamples=20000;
samples=cell(n,nsamples );
fori=1:nsamples
samples(3360,I )=sample _ bnet (bnet );
结束
data=cell2num(samples );
bnet2=MK_bnet(Dag,node_sizes,' discrete ',discrete_nodes );
%手动创建条件概率表cpt
seed=0;
rand(state )、seed );
bnet2.CPD{c}=tabular_CPD(bnet2,c );
bnet2.CPD{u}=Tabular_CPD(bnet2,u );
bnet2.CPD{w}=tabular_CPD(bnet2,w );
bnet2.CPD{b}=tabular_CPD(bnet2,b );
bnet2.CPD{d}=tabular_CPD(bnet2,d );
%将手动构建的示例作为训练集代入learn_params ()函数进行学习
bnet3=learn_Params(bnet2,data );
%查看学习后的参数
CPT3=cell(1,n );
fori=1:N
s=struct(Bnet3.CPD{I} );
CPT3{i}=s.CPT;
结束
fprintf (输出学习后的过劳死节点参数(n ) );
dispCPT{1}{2}CPT3{3};
%查看原始节点参数后的参数
CPT=cell(1,n );
fori=1:N
s=struct(Bnet.CPD{I} );
CPT{i}=s.CPT;
结束
fprintf (输出实际过劳死节点参数(n );
disp CPT {2} CPT {3} {4};
执行结果:
ans=
0.45000.55000.28330.61670.5500
输出学习后的过劳死节点参数:
11:0.32330.6767
21:0.24580.7542
12:0.04880.9512
22:0.00001.0000
输出实际过劳死节点参数:
11:0.33500.6650
21:0.30000.7000
12:0.05000.9500
22:0.00001.0000
结构学习代码:
N=5; % 4个节点分别为国家政策c、学校政策u、工作压力大w、身体不适b、过劳死d
Dag=Zeros(n,n ); %网络连接矩阵初始化
C=1; U=2; W=3; B=4; D=5; 初始化%节点顺序
Dag(c,u )=1; 定义%节点之间的连接关系
Dag(u,[WB] )=1;
Dag(w,d )=1;
Dag(b,d )=1;
discrete_nodes=1:N; %离散节点
node_sizes=2*Ones(1,n ); %节点状态数
%建立网络体系结构
bnet=MK_bnet(Dag,node_sizes,' names ',{ '国家政策(c ),'学校政策(u ),'工作压力大' w ),'身体不适' b ),'过劳死
%手动构建条件概率CPT表
bnet.CPD{c}=tabular_CPD(bnet,c,[0.50.5];
Bnet.CPD{u}=Tabular_CPD(Bnet,u,[0.950.010.050.99] );
bnet.CPD{w}=tabular_CPD(bnet,w,[0.90.050.10.95];
bnet.CPD{b}=tabular_CPD(bnet,b,[0.30.010.70.99];
bnet.CPD{d}=tabular_CPD(bnet,d,[0.3350.30.0500.6650.70.951];
%绘制构建的贝叶斯网络
%figure
是%draw_graph(Dag )
手动创建%示例数据samples :
nsamples=2000;
samples=cell(n,nsamples );
fori=1:nsamples
samples(3360,I )=sample _ bnet (bnet );
结束
data=cell2num(samples );
%结构学习
order=[12345]; %节点顺序
ns=[22222]; %节点属性值的个数
max_fan_in=2; %最大父节点数
dag2=learn_struct_K2(data,ns,order,' max_fan_in ',max_fan_in );
bnet2=MK_bnet(Dag2,node_sizes,' names ',{ '国家政策(c ),'学校政策(u ),'工作压力大' w ),'身体不适' B ),'过度劳累
%手动构建条件概率CPT表
bnet2.CPD{c}=tabular_CPD(bnet2,c,[0.50.5] );
bnet2.CPD{u}=Tabular_CPD(bnet2,u,[0.950.010.050.99] );
bnet2.CPD{w}=tabular_CPD(bnet2,w,[0.90.050.10.95];
bnet2.CPD{b}=tabular_CPD(bnet2,b,[0.30.010.70.99];
bnet2.CPD{d}=tabular_CPD(bnet2,d,[0.3350.30.0500.6650.70.951] );
图形
draw_graph(Dag ); %绘制构建的贝叶斯网络
CPT2=cell(1,n );
fori=1:N
s=struct(bnet2.CPD{I} );
CPT2{i}=s.CPT;
结束
fprintf (输出结构学习后过劳死节点参数(n );
dispCPT{1}{2}CPT2{3};
执行结果:
输出结构学习后的过劳死节点参数:
11:0.33500.6650
21:0.30000.7000
12:0.05000.9500
22:0.00001.0000