




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、转贝叶斯分类器、算法部分源代码转自星海流浪者& 博客在具有模式的完整统计知识条件下,按照贝叶斯 决策理论进行设计的一种最优分类器。分类器是对每一个输 入模式赋予一个类别名称的软件或硬件装置,而贝叶斯分类 器是各种分类器中分类错误概率最小或者在预先给定代价 的情况下平均风险最小的分类器。它的设计方法是一种最基 本的统计分类方法。最小错误概率贝叶斯分类器 。把代表模式的特征向量X分到c个类别(3 1 , 3 2,., 3 c)中某一类的最基本方法是 计算在X的条件下,该模式属于各类的概率,用符号 P( 3 1|X),P( 3 2|X),.,P( 3 C|X)表示。比较这些条件概率,最大数值
2、 所对应的类别 3 i 就是该模式所属的类。例如表示某个待查 细胞的特征向量 X 属于正常细胞类的概率是 0.2,属于癌变 细胞类的概率是 0.8,就把它归类为癌变细胞。上述定义的 条件概率也称为后验概率, 在特征向量为一维的情况下 ,一般 有图中的变化关系。当x=x*时,P(3 1|x)=P( 3 2|x)对于xX*的区域,由于 P(3 2|x)>P( 3 1|x)因此x属3 2类对于X<;X* 的区域,由于 P( 3 1|X)>P( 3 2|x) , X 属 3 1 类,X* 就相 当于区域的分界点。图中的阴影面积就反映了这种方法的错 误分类概率, 对于以任何其他的 X 值
3、作为区域分界点的分类方法都对应一个更大的阴影面积,因此贝叶斯分类器是一种最小错误概率的分类器 一般情况下,不能直接得到后验 概率而是要通过贝叶斯公式进行计算。式中的P(x I 3 i)为在模式属于3i类的条件下出现x的概率密度,称为x的类条 件概率密度;P(3 i)为在所研究的识别问题中出现3 i类的概率,又称先验概率;P(x)是特征向量x的概率密度。分类器在 比较后验概率时,对于确定的输入x, P(x)是常数,因此在实 际应用中,通常不是直接用后验概率作为分类器的判决函数 gi(x)(见线性判别函数)而采用下面两种形式:对所有的c个类计算gi(x)(i=1,2,c)。与gi(x)中最大值相对
4、应的类别就是 x 的所属类别。最小风险贝叶斯分类器 由于客观事物的复杂性,分 类器作出各种判决时的风险是不一样的。例如将癌细胞误判 为正常细胞的风险就比将正常细胞误判为癌细胞的风险大。 因此,在贝叶斯分类器中引入了风险的概念。在实际应用中 根据具体情况决定各种风险的大小,通常用一组系数 Cij 来 表示。Cij表示分类器将被识别样本分类为3 i,而该样本的真正类别为 3 j 时的风险。设计最小风险分类器的基本思想 是用后验概率计算将 x分类为3 i的条件风险比较各 Ri(x) 的大小 ,与最小值对应的类别是分类的结果。 评价这种分类器 的标准是平均风险,它的平均风险最小。在实际应用时,后 验概
5、率是难以获得的,根据模式类别的多少和 Cij 的取值方式 ,可设计出各种分类器, 例如模式为两类时, 判别函数为如 果选择C11和C22为零,C12和C21为1,它就是两类最小 错误概率分类器。实际上,最小错误概率分类器是最小风险 分类器的一种特殊情况。设计贝叶斯分类器的关键是要知道样本特征x 的各种概率密度函数。条件概率密度函数为多元正态分布是研究得 最多的分布。这是由于它的数学表达式易于分析,在实际应 用中也是一种常见的分布形式。经常使用参数方法来设计正 态分布的判别函数。参考书目福永圭之介著 ,陶笃纯译:统计图形识别导论 ,科学出版社,北京,1978。 /*源代*/贝叶斯分类器所需函数的
6、声明: 2006/11/13 #ifndef _BAYES_H#define _BAYES_H#includematrix.h /正态分布的监督参数估计:最大似然估计 /此函数用于求样本的均值向量U/参数 X 代表一类样本集, X 是一个 n x d 的矩阵 /代表 n 个 特征空间维数为 d 的样本 /每行代表一个样本Matrix getU(const Matrix &X);/ 正态分布的监督参数估 计:最大似然估计/此函数用于求样本的协方差矩阵 E/参数 X 代表一类样本集, X 是一个 n x d 的矩阵/代表 n 个 特征空间维数为 d 的样本/每行代表一个样本/参数 U 是该
7、样本的均值向量,可用上面的 getU() 函数求 得Matrix getE(const Matrix &X, const Matrix &U);/ 多 元正态概率型下的最小错误率贝叶斯判别函数/Ui 为每个类的均值向量/Ei 为每个类的协方差矩阵/Pwi 为某类样本的先验概率/X 为要判别的样本/其返回值为样本类别的代号, 范围是 1, 2, ., c,c 为类别数 int bayesFun(const Matrix U, const Matrix E,const double Pw,const Matrix &X, int c);/ 贝叶 斯分类器/Xc 为总体样本集
8、 ,每个数组元素为一个类的样本集/X 为要判别的样本c:类别数void bayesDepart(const Matrix X, const double Pw,const Matrix &x, int c, char* name);/下面是此贝叶斯分类器需要给定的参数/这里只作声明,相应的定义在bayesapp.cpp 中extern int c;/类别数extern char* name;/ 类别名称extern double Pw;/每类样本的先验概率extern Matrix X; /总体样本集, 数组中的每个矩阵代表 类样本集,/矩阵中的每一行代表此类样本集的一个样本#endi
9、f/ 贝叶斯分类器中相应函数的实现: 2006/11/13 #include<iostream.h>#include<math.h>#includebayes.h#includematrix.h#include<stdlib.h>/ 计算均值向量 UMatrix getU(const Matrix &X)int d = X.getCol();int n = X.getRow();Matrix U(d, 1);U=(u1,u2,.,ud)T ,/用 d x 1 的矩阵表示for(int k=0; k<n; k+) /k 代表第 k 个样本for(
10、int j=0; j<d; j+) /j 代表样本的第 j 个特征值U.set(j, 0, U.get(j,0)+X.get(k,j);/这里要注意对矩阵元素的访问下标是从 0 开始的 return 1.0/n * U; /U 是所有样本的均值,故加和后除以样本 总数/ 计算协方差矩阵 EMatrix getE(const Matrix &X, const Matrix &U)int d = X.getCol(); /X 的列数代表特征空间维数int n = X.getRow(); /X 的每一行代表一个样本Matrix E(d, d); /E 是 d x d 维矩阵,
11、d 为每个样本 特征空间数/ 故此处可以用 X 列数来初始化它 double *ar = new doubled; /此数组用于从矩阵中提取行, 创建新矩阵/从而可以进行下面的矩阵运算for(int k=0; k<n; k+) /k 代表第 k 个样本for(int j=0; j<d; j+)arj = X.get(k, j);/ 将 X 的一行元素值放入数组 ar中 Matrix Xk(d, 1, ar); / 利用 ar 创建矩阵E = E + (Xk - U) * trv(Xk - U); (X-U) * (X -UTdelete ar; / 释放动态分配的数组空间/E 是
12、n 个矩阵 ( (Xk - U) 与其转置的乘积)的算术平均return 1.0/n * E;/ 贝叶斯判别函数int bayesFun(const Matrix U, const Matrix E,const double Pw,const Matrix &X, int c)double testPw = 0;for(int w=0; w<c; w+)if(Pww <= 0)cout << Wrong Pwin; exit(0); testPw += Pww;if(det(Ew) = 0)cout << Check input, E <<
13、; w <<=0!n;exit(0); if(testPw != 1)cout << Wrong Pwin; exit(0); / 对于贝叶斯判别 函数中的 -d/2 * ln(2*PI) 项因与 i 无关故可去掉/另外(X-U)(EA-1)(X-U)AT的计算结果虽然是一个数,但在这里/其表示为一个一行一列的矩阵,因此需要对其求行列式值 后才能/赋给左边的 double maxgdouble maxg = -1.0/2 * det( trv(X-U0) * inv(E0) * (X-U0) )-1.0/2 * log(det(E0) + log(Pw0);int co
14、de = 0; /用来返回类别代号 /求使得贝叶斯判别函数取 得最大值类for(int i=1; i<c; i+)double g = -1.0/2 * det( trv(X-Ui) * inv(Ei) * (X-Ui) )-1.0/2 * log(det(Ei) + log(Pwi);if(g > maxg) maxg = g;code = i;/for ireturn code;/bayesFun()/ 贝叶斯分类器 void bayesDepart(const Matrix X, const double Pw, const Matrix &x, int c, cha
15、r* name)Matrix* U = new Matrixc;Matrix* E = new Matrixc;/ 先求出每个类的均值向量和协方 差矩阵for(int i=0; i<c; i+)Ui = getU(Xi);Ei = getE(Xi, Ui);/调用贝叶斯判别函数,判断 X 所属类别,输出类别名称 cout << namebayesFun(U,E,Pw,x,c);/ 贝叶斯分类器: 2006/11/13 #include<iostream.h>#include<conio.h>#includebayes.h/ 这个宏仅为了少写些代码#de
16、fine test(arx) for(int i=0; i<25; i+)Matrix x(d,1,arxi);bayesDepart(X, Pw, x, c, name); cout << ; if(i+1)%5 = 0) cout << endl; cout << n; void main()cout << n=n;/样本集分为 2 个类别,特征空间维数为 2,每个类别 个样本const int c = 2, d = 2, n = 25; /类别名称分别为 w1 和 w2 char* namec = w1, w2;/两个类别的先验概率,
17、可以给予不同的值,观察结果变化 double Pwc = 0.5, 0.5 ;/数组 Xi 为 i 类别的样本集, X 为总样本集 Matrix* X = new Matrixc;/ 类别 w1 的样本数据, /特征值 1 集中在 4|5 附近,特征值 2 集中在 13 附近 double ar0 = 1,11.45, 2,12.46, 3,13.78, 3,13.62, 4,13.84,4,11.26, 4,15.28, 4,17.29, 4,21.36, 5,15.46,5,13.63, 5,13.78, 5,12.29, 5,14.55, 5,21.73,5,14.12, 5,15.34
18、, 6,13.66, 6,13.21, 6,14.02,7,12.16, 7,19.88, 7,10.21, 8,12.29, 9,15.52 ;/类别 w2 的样本数据/特征值 1 集中在 7|8 附近,特征值 2 集中在 19 附近 double ar1 = 1,19.76, 2,21.43, 3,18.79, 4,19.84, 5,18.75,5,21.45, 5,18.78, 6,19.72, 7,19.04, 7,21.27,7,20.01, 7,18.99, 7,19.67, 8,17.98, 8,14.26,8,18.99, 8,15.67, 8,22.01, 8,21.91,
19、8,19.03,9,18.97, 9,18.92, 9,19.34, 9,19.28, 9,17.63 ;/将两个类别的样本数组构造为矩阵Matrix X0(n,d,ar0);Matrix X1(n,d,ar1);/放入总样本集中便于下面的参数传递X0 = X0;X1 = X1;/ 测试样本数据,其中前两个与原样本相同,第三个为随机输入/可以改变第三个样本中的数据值,观察结果变化double arx0252 = 1,11.45, 2,12.46, 3,13.78, 3,13.62, 4,13.84,4,11.26, 4,15.28, 4,17.29, 4,21.36, 5,15.46,5,13
20、.63, 5,13.78, 5,12.29, 5,14.55, 5,21.73,5,14.12, 5,15.34, 6,17.66, 6,13.21, 6,14.02,7,12.16, 7,19.88, 8,10.21, 9,12.29, 10,15.52 ; double arx1252 = 1,19.76, 2,21.43, 3,18.79, 4,19.84, 5,18.75,5,21.45, 5,18.78, 6,19.72, 7,19.04, 7,21.27,7,20.01, 7,18.99, 7,19.67, 8,17.98, 8,14.26,8,18.99, 8,15.67, 8,22.01, 8,21.91, 8,19.03,9,18.97, 9,18.92, 10,19.34,10,19.28,11,17.63 ;double arx2252 = 3,14.56, 5,12.35, 7,19.8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国三基色管数据监测研究报告
- 校园能源管理与绿色教育实践
- 水域用地居间合作协议
- 2025年度主播与影视公司解除合同书
- 2025年农村房屋赠与合同及农村电商合作框架协议
- 二零二五年度附条件生效的赠与合同涉及文化产业园建设与合作
- 北欧风格家装保修协议模板
- 2025年重组人胰岛素项目规划申请报告模范
- 2025年非线性编辑设备项目规划申请报告模稿
- 一件代发协议书范本
- 战地卫生与救护教案培训讲学
- 2022版《义务教育数学课程标准》测试题
- 全面介绍现货中远期交易
- 公安系防暴安全03安检
- 四年级下册音乐课件第一课时-感知音乐中的旋律三
- 教科版 二年级下册科学教学计划
- 部编版六年级道德与法治下册《学会反思》教案
- DB32-T 2860-2015散装液体化学品槽车装卸安全作业规范-(高清现行)
- 部编版四年级下册语文教案(完整)
- T∕CIS 71001-2021 化工安全仪表系统安全要求规格书编制导则
- 福利院装修改造工程施工组织设计(225页)
评论
0/150
提交评论