结合构建的简单贝叶斯分类器谈谈认识
来源:互联网 发布:自学淘宝美工教程视频 编辑:程序博客网 时间:2024/05/18 00:24
毕业论文阶段性汇报2008-3-27
结合构建的简单贝叶斯分类器谈谈认识
贝叶斯网络原理
它是一个有向无环图,由代表变量结点、连接这些结点的有向边构成。
变量是问题的抽象,用来代表感兴趣事物的状态或属性等,具有一定的物理意义。有向边表示变量之间的依赖或因果关系的方向性,结点之间若无连接边表示结点之间是条件独立的,其对应问题领域的定性描述。条件概率表(CPT)列出了每个结点相对于其父结点所有可能的条件概率,其对应问题领域的定量描述。
贝叶斯网络可以将具体问题中复杂的变量关系在一个网络结构表示,通过网络模型反映问题领域中变量的依赖关系。
贝叶斯网络分类器:
在贝叶斯网络中将其中代表类别变量的结点作为根结点,其余所有的变量结点都作为该类别变量结点的子结点,则贝叶斯网络就变成了贝叶斯网络分类器。
构造分类器需要根据给定训练样本数据集(训练集)作为输入,通过对训练集进行训练,归纳出分类器,利用分类器对没有分类的数据进行分类。
―――――――――――――――――――――――――――――――――――――――
―――――――
贝叶斯网络的构建:
构建贝叶斯网络包括以下三个步骤:
(1)变量的定义;
推荐镜片、年龄、视力、散光、流泪量
(2)定义网络结构;
N = 5;
dag = zeros(N,N); %邻接矩阵
B1 = 1;B2 = 2;B3 = 3;B4 = 4;A = 5;
dag(A,[B1 B2 B3 B4]) = 1;
ns = [3 2 2 2 3];
% ns(i) is the number of values node i can take on,
% or the length of node i if i is a continuous-valued vector.
bnet = mk_bnet(dag, ns);
%初始化条件概率分布
bnet.CPD{B1} = tabular_CPD(bnet, B1, [0.3 0.3 0.3 0.3 0.3 0.3 0.4 0.4 0.4]);
bnet.CPD{B2} = tabular_CPD(bnet, B2, [0.5 0.5 0.5 0.5 0.5 0.5]);
bnet.CPD{B3} = tabular_CPD(bnet, B3, [0.5 0.5 0.5 0.5 0.5 0.5]);
bnet.CPD{B4} = tabular_CPD(bnet, B4, [0.5 0.5 0.5 0.5 0.5 0.5]);
bnet.CPD{A} = tabular_CPD(bnet, A, [0.3 0.3 0.4]);
我们所关注的是更新后的而并非是初始值。
(3)参数学习。
贝叶斯网络的参数学习实质上是在已知网络结构的条件下,根据训练实例来学习每个节点的概率分布表。
%evidence(1,:)年龄:1-青年,2-中年,3-老年
%evidence(2,:)视力:1-近视,2-远视
%evidence(3,:)散光:1-否,2-是
%evidence(4,:)流泪量:1-正常,2-少
L=24;
evidence=ones(N,L);
。。。。。。。。。。。。%输入训练数据集
bnet = learn_params(bnet, evidence);
―――――――――――――――――――――――――――――――――――――――
推论(分类)
engine = jtree_inf_engine(bnet);%建立推论引擎
ev = cell(1,N);
ev{B1} = 3;
ev{B2} = 2;
ev{B3} = 2;
ev{B4} = 1;
engine = enter_evidence(engine, ev);
mA = marginal_nodes(engine, A);%A的后验概率返回
subplot
bar(mA.T)
―――――――
输出结果
测试数据
序号
年龄
视力
散光
流泪量
推荐镜片
1
青年1
近视1
否1
少2
(none1)
2
青年1
远视2
是2
正常1
(hard3)
3
中年2
近视1
是 2
少2
(none1)
4
老年3
远视2
否1
正常1
(soft2)
下一步计划
根据研究目标构建网络模型
分模块进行数据处理
---------------------------------------------------------
源代码
clear all;
clc;
%BNetTest 基于贝叶斯网络的隐形眼镜诊断
%初始贝叶斯网络结构、参数
N = 5;
dag = zeros(N,N);
B1 = 1;B2 = 2;B3 = 3;B4 = 4;A = 5;
dag(A,[B1 B2 B3 B4]) = 1;
ns = [3 2 2 2 3]; %
bnet = mk_bnet(dag, ns);
%初始化条件概率分布
bnet.CPD{B1} = tabular_CPD(bnet, B1, [0.3 0.3 0.3 0.3 0.3 0.3 0.4 0.4 0.4]);
bnet.CPD{B2} = tabular_CPD(bnet, B2, [0.5 0.5 0.5 0.5 0.5 0.5]);
bnet.CPD{B3} = tabular_CPD(bnet, B3, [0.5 0.5 0.5 0.5 0.5 0.5]);
bnet.CPD{B4} = tabular_CPD(bnet, B4, [0.5 0.5 0.5 0.5 0.5 0.5]);
bnet.CPD{A} = tabular_CPD(bnet, A, [0.3 0.3 0.4]);
%参数学习
%engine = jtree_inf_engine(bnet);
%evidence(1,:)年龄:1-青年,2-中年,3-老年
%evidence(2,:)视力:1-近视,2-远视
%evidence(3,:)散光:1-否,2-是
%evidence(4,:)流泪量:1-正常,2-少
L=24;
evidence=ones(N,L);
evidence(:,1)=[1 1 1 2 1]';
evidence(:,2)=[1 1 1 1 2]';
evidence(:,3)=[1 1 2 2 1]';
evidence(:,4)=[1 1 2 1 3]';
evidence(:,5)=[1 2 1 2 1]';
evidence(:,6)=[1 2 1 1 2]';
evidence(:,7)=[1 2 2 2 1]';
evidence(:,8)=[1 2 2 1 3]';
evidence(:,9)=[2 1 1 2 1]';
evidence(:,10)=[2 1 1 1 2]';
evidence(:,11)=[2 1 2 2 1]';
evidence(:,12)=[2 1 2 1 3]';
evidence(:,13)=[2 2 1 2 1]';
evidence(:,14)=[2 2 1 1 2]';
evidence(:,15)=[2 2 2 2 1]';
evidence(:,16)=[2 2 2 1 1]';
evidence(:,17)=[3 1 1 2 1]';
evidence(:,18)=[3 1 1 1 1]';
evidence(:,19)=[3 1 2 2 1]';
evidence(:,20)=[3 1 2 1 3]';
evidence(:,21)=[3 2 1 2 1]';
evidence(:,22)=[3 2 1 1 2]';
evidence(:,23)=[3 2 2 2 1]';
evidence(:,24)=[3 2 2 1 1]';
%engine = learn_params_em(engine, evidence);
bnet = learn_params(bnet, evidence);
engine = jtree_inf_engine(bnet);
ev = cell(1,N);
ev{B1} = 1;
ev{B2} = 1;
ev{B3} = 1;
ev{B4} = 2;
engine = enter_evidence(engine, ev);
mA = marginal_nodes(engine, A);
%fprintf('P(E|c)=%5.3f, P(B|c)=%5.3f/n', mE.T(1), mB.T(1))
subplot(2,2,1)
bar(mA.T)
%subplot(2,2,2)
%bar(mB1.T)
%subplot(2,2,3)
%bar(mB2.T)
%subplot(2,2,4)
%bar(mB3.T)
ev{B1} = 1;
ev{B2} = 2;
ev{B3} = 2;
ev{B4} = 1;
engine = enter_evidence(engine, ev);
mA = marginal_nodes(engine, A);
%fprintf('P(E|c)=%5.3f, P(B|c)=%5.3f/n', mE.T(1), mB.T(1))
subplot(2,2,2)
bar(mA.T)
ev{B1} = 2;
ev{B2} = 1;
ev{B3} = 2;
ev{B4} = 2;
engine = enter_evidence(engine, ev);
mA = marginal_nodes(engine, A);
%fprintf('P(E|c)=%5.3f, P(B|c)=%5.3f/n', mE.T(1), mB.T(1))
subplot(2,2,3)
bar(mA.T)
ev{B1} = 3;
ev{B2} = 2;
ev{B3} = 1;
ev{B4} = 1;
engine = enter_evidence(engine, ev);
mA = marginal_nodes(engine, A);
%fprintf('P(E|c)=%5.3f, P(B|c)=%5.3f/n', mE.T(1), mB.T(1))
subplot(2,2,4)
bar(mA.T)
- 结合构建的简单贝叶斯分类器谈谈认识
- 谈谈对Jenkins持续构建的认识
- 结合数据挖掘分类谈谈对信息熵的理解
- 使用Pylearn2构建一个简单的分类器
- 使用Pylearn2构建一个简单的分类器
- 简单学习了MVP模式,谈谈自己的认识
- 谈谈对计算机的认识
- 谈谈设计模式的认识
- 谈谈对RAC的认识
- 谈谈对数据库的认识
- 谈谈对uboot的认识?
- 谈谈对mvc的认识
- 谈谈对MVC的认识
- 谈谈对HTML5的认识。
- 谈谈分类算法的选择
- 《机器学习实战》基于朴素贝叶斯分类算法构建文本分类器的Python实现
- 构建基于词典的Lucene分类器
- servlet初认识,结合例子简单认识servlet
- 为了延长页面等待时间,不至于页面断开连接,后台程序仍然正常运行。
- final关键字到底修饰了什么
- 研究润乾报表的实现
- 最基本财务基础知识
- 关于Big-Endian 和Little-Endian
- 结合构建的简单贝叶斯分类器谈谈认识
- Linux下C语言编程的注意事项
- 用于时间操作的函数
- 控件的生命周期
- web.config
- CSS
- log4j 配置方案
- response.write
- 属性