实验2 贝叶斯分类判别法一、实验原理实验数据:IRIS 数据。
分为三种类型,每种类型中包括50个思维的向量。
实验模型:假设IRIS 数据是正态分布的。
实验准备:在每种类型中,选择部分向量作为训练样本,估计未知的均值和方差的参数。
实验方法:最小错误判别准则;最小风险判别准则。
实验原理:1.贝叶斯公式已知共有M 类别M i i ,2,1,=ω,统计分布为正态分布,已知先验概率)(i P ω及类条件概率密度函数)|(i X P ω,对于待测样品,贝叶斯公式可以计算出该样品分属各类别的概率,叫做后验概率;看X 属于哪个类的可能性最大,就把X 归于可能性最大的那个类,后验概率即为识别对象归属的依据。
贝叶斯公式为M i P X P P X P X P Mj jji i i ,2,1,)()|()()|()|(1==∑=ωωωωω该公式体现了先验概率、类条件概率、后验概率三者的关系。
其中,类条件概率密度函数)|(i X P ω为正态密度函数,用大量样本对其中未知参数进行估计,多维正态密度函数为)]()(21exp[)2(1)(12/12/μμπ---=-X S X SX P T n 式中,),,(21n x x x X =为n 维向量; ),,(21n μμμμ =为n 维均值向量; ]))([(TX X E S μμ--=为n 维协方差矩阵; 1-S是S 的逆矩阵;S 是S 的行列式。
大多数情况下,类条件密度可以采用多维变量的正态密度函数来模拟。
)]}()(21exp[)2(1ln{)|()(1)(2/12/i i X X S X X S X P i T in i ωωπω---=-i i T S n X X S X X i i ln 212ln 2)()(21)(1)(-----=-πωω )(i X ω为i ω类的均值向量。
2.最小错误判别准则① 两类问题有两种形式,似然比形式:⎩⎨⎧∈⇒⎩⎨⎧<>=211221)()()|()|()(ωωωωωωX P P X P X P X l其中,)(X l 为似然比,)()(12ωωP P 为似然比阈值。
对数形式:⎩⎨⎧∈⇒-⎩⎨⎧<>-211221)(ln )(ln )|(ln )|(ln ωωωωωωX P P X P X P② 多类问题本实验采取针对多累问题的解决方法。
在待测向量X 的条件下,看哪个类的概率最大,应该把X 归于概率最大的那个类。
因此,可以通过比较各个判别函数来确定X 的类型。
M i X X P P X P P i j j Mj i i ,2,1,)}|()({max )|()(1=∈⇒=≤≤ωωωωω对数形式为:M i X X P P X P P i j j Mj i i ,2,1,)}|(ln )({ln max )|(ln )(ln 1=∈⇒+=+≤≤ωωωωω所以此时正态分布的贝叶斯分类器判别函数为)()]}()(21exp[)2(1ln{)()|(ln )()(1)(2/12/i i T in i i i P X X S X X S P X P X h i i ωπωωωω---==-)(ln ln 212ln 2)()(21)(1)(i i i T P S n X X S X X i i ωπωω+-----=-3.最小风险判别准则对观测值X 条件下,各状态后验概率求加权和的方式,表示风险如下:∑==Mj j i X P j i L X R 1)|(),()(ω其中,),(j i L 为将第j 类判为第i 类的损失。
若判对i=j ,则),(j i L 取负值或零值,表示没有损失;若判对i ≠j ,则),(j i L 取正值,数值大小表示损失多少。
对得到的M 个类型的风险值M i X R i ,2,1),( 进行比较,得到使条件风险最小的类别,判别X 属于该类别。
二、实验过程实验环境:MA TLAB R2009a1.将txt 格式下的IRIS 数据导入实验环境中。
实验中设计了对话框,可直接选择存放该文件的路径并导入。
2.将读入的数据进行逐行录入,按行录入在1*150的数组iris 中,每一个元素中包含一个四维向量。
clear;%从irisdatas.txt 读取数据%[filename,filepath]=uigetfile('*.txt','导入数据'); file = [filepath filename];fid = fopen(file); %弹出对话框,选择录入的文件 if fid == -1 ('打开数据出错!') end3.通过计算,分别估计出三类的统计特征值,即正态分布的两个重要参数均值μ和方差2σ。
∑===501)()(i i x x E μ,]))([(T X X E S μμ--=。
以下程序段为第一类特征值求取过程,第二、三类相似,实验中,取第偶数个向量为训练样本。
%逐行存入数组iris 中% linenum=1; while 1tline = fgetl(fid); %读第一行if ~ischar(tline), break , end %下一行为空时跳出循环 iris{linenum} = sscanf(tline, '%f');%读取数据,存数组iris 中 linenum=linenum+1; end%估计第一类iris数据的统计特征%sum=0;for j=1:1:4for i=1:2:50yangben1=iris{i};sum=sum+yangben1(j,1);endmean1(j,1)=sum/25;%mean1是第一类数据的期望sum=0;endsigema=0;for i=1:2:50sigema=sigema+(iris{i}-mean1)*(iris{i}-mean1)';endsigema1=sigema/25;%sigema1为第一类数据的协方差矩阵4.已经估计出三类数据的统计特征。
首先使用最小错误判别准则进行分类,实验中采用对数形式计算,假设三种类型的先验概率相等,即均为1/3,在某一X下得到的三个后验概率的函数。
比较三个值的大小,哪个最大,就可判断X属于哪一类。
最后进行了分类器判据结果的验证。
%对150组数据进行分类,并验证结果的正确性%for i=1:1:150x=iris{i};%分别代入三个后验概率函数中%h1=-0.5*(x-mean1)'*inv(sigema1)*(x-mean1)-2*log(2*pi)-0.5*log(det(sigema1))+log(1/3);h2=-0.5*(x-mean2)'*inv(sigema2)*(x-mean2)-2*log(2*pi)-0.5*log(det(sigema2))+log(1/3);h3=-0.5*(x-mean3)'*inv(sigema3)*(x-mean3)-2*log(2*pi)-0.5*log(det(sigema3))+log(1/3);h(1)=h1;h(2)=h2;h(3)=h3;%比较三个数据的大小,并判断属于哪一类%max=h(1);class=1;for j=1:1:3if h(j)>maxmax=h(j);class=j;endend%对分类器决策的结果进行验证并输出结果%if (i<=50 & class~=1) | (i>50 & i<=100 & class~=2) | (i>100 & class~=3)fprintf('对于“判断第%d个数据属于第%d类”的分类是错误的!\n',i,class);elsefprintf('判断第%d个数据属于第%d类\n',i,class);endend5.再使用最小风险判别准则进行分类,实验中扔采用对数形式计算,假设三种类型的先验概率相等,即均为1/3。
设计出风险参数矩阵L,该数据可根据实际损失的情况需要进行修改。
将X代入得到三个数值,哪个最小,即为风险最小,便属于该类型。
最后同样进行了判别结构的验证。
三、实验结果与分析1.最小错误判别准则判断第1个数据属于第1类判断第2个数据属于第1类判断第3个数据属于第1类判断第4个数据属于第1类%对150组数据进行分类,并验证结果的正确性%hw1=log(1/3);hw2=log(1/3);hw3=log(1/3);%三个类型的先验函数相等L=[0,1,1;1,0,1;1,1,0];%设计风险参数矩阵,可根据损失多少进行改变for i=1:1:150x=iris{i};%先计算先验概率%hxw1=-0.5*(x-mean1)'*inv(sigema1)*(x-mean1)-2*log(2*pi)-0.5*log (det(sigema1));hxw2=-0.5*(x-mean2)'*inv(sigema2)*(x-mean2)-2*log(2*pi)-0.5*log (det(sigema2));hxw3=-0.5*(x-mean3)'*inv(sigema3)*(x-mean3)-2*log(2*pi)-0.5*log (det(sigema3));%再计算含有风险因子的后验概率%r(1)=L(1,1)*(hxw1+hw1)+L(1,2)*(hxw2+hw2)+L(1,3)*(hxw3+hw3); r(2)=L(2,1)*(hxw1+hw1)+L(2,2)*(hxw2+hw2)+L(2,3)*(hxw3+hw3); r(3)=L(3,1)*(hxw1+hw1)+L(3,2)*(hxw2+hw2)+L(3,3)*(hxw3+hw3);%比较三类风险大小,属于风险最小的那一类%min=r(1);class=1;for j=1:1:3if r(j)<minmin=r(j);class=j;endend%验证分类结果的正确性%if (i<=50 & class~=1) | (i>50 & i<=100 & class~=2) | (i>100 & class~=3)fprintf('对于“判断第%d个数据属于第%d类”的分类是错误的!\n',i,class);elsefprintf('判断第%d个数据属于第%d类\n',i,class);endend判断第6个数据属于第1类判断第7个数据属于第1类判断第8个数据属于第1类判断第9个数据属于第1类判断第10个数据属于第1类判断第11个数据属于第1类判断第12个数据属于第1类判断第13个数据属于第1类判断第14个数据属于第1类判断第15个数据属于第1类判断第16个数据属于第1类判断第17个数据属于第1类判断第18个数据属于第1类判断第19个数据属于第1类判断第20个数据属于第1类判断第21个数据属于第1类判断第22个数据属于第1类判断第23个数据属于第1类判断第24个数据属于第1类判断第25个数据属于第1类判断第26个数据属于第1类判断第27个数据属于第1类判断第28个数据属于第1类判断第29个数据属于第1类判断第30个数据属于第1类判断第31个数据属于第1类判断第32个数据属于第1类判断第33个数据属于第1类判断第34个数据属于第1类判断第35个数据属于第1类判断第36个数据属于第1类判断第37个数据属于第1类判断第38个数据属于第1类判断第39个数据属于第1类判断第40个数据属于第1类判断第41个数据属于第1类判断第42个数据属于第1类判断第43个数据属于第1类判断第44个数据属于第1类判断第46个数据属于第1类判断第47个数据属于第1类判断第48个数据属于第1类判断第49个数据属于第1类判断第50个数据属于第1类判断第51个数据属于第2类判断第52个数据属于第2类判断第53个数据属于第2类判断第54个数据属于第2类判断第55个数据属于第2类判断第56个数据属于第2类判断第57个数据属于第2类判断第58个数据属于第2类判断第59个数据属于第2类判断第60个数据属于第2类判断第61个数据属于第2类判断第62个数据属于第2类判断第63个数据属于第2类判断第64个数据属于第2类判断第65个数据属于第2类判断第66个数据属于第2类判断第67个数据属于第2类判断第68个数据属于第2类判断第69个数据属于第2类判断第70个数据属于第2类对于“判断第71个数据属于第3类”的分类是错误的!判断第72个数据属于第2类判断第73个数据属于第2类判断第74个数据属于第2类判断第75个数据属于第2类判断第76个数据属于第2类判断第77个数据属于第2类判断第78个数据属于第2类判断第79个数据属于第2类判断第80个数据属于第2类判断第81个数据属于第2类判断第82个数据属于第2类判断第83个数据属于第2类的分类是错误的!判断第85个数据属于第2类判断第86个数据属于第2类判断第87个数据属于第2类判断第88个数据属于第2类判断第89个数据属于第2类判断第90个数据属于第2类判断第91个数据属于第2类判断第92个数据属于第2类判断第93个数据属于第2类判断第94个数据属于第2类判断第95个数据属于第2类判断第96个数据属于第2类判断第97个数据属于第2类判断第98个数据属于第2类判断第99个数据属于第2类判断第100个数据属于第2类判断第101个数据属于第3类判断第102个数据属于第3类判断第103个数据属于第3类判断第104个数据属于第3类判断第105个数据属于第3类判断第106个数据属于第3类判断第107个数据属于第3类判断第108个数据属于第3类判断第109个数据属于第3类判断第110个数据属于第3类判断第111个数据属于第3类判断第112个数据属于第3类判断第113个数据属于第3类判断第114个数据属于第3类判断第115个数据属于第3类判断第116个数据属于第3类判断第117个数据属于第3类判断第119个数据属于第3类判断第120个数据属于第3类判断第121个数据属于第3类判断第122个数据属于第3类判断第123个数据属于第3类判断第124个数据属于第3类判断第125个数据属于第3类判断第126个数据属于第3类判断第127个数据属于第3类判断第128个数据属于第3类判断第129个数据属于第3类判断第130个数据属于第3类判断第131个数据属于第3类对于“判断第132个数据属于第2类”的分类是错误的!判断第133个数据属于第3类对于“判断第134个数据属于第2类”的分类是错误的!判断第135个数据属于第3类判断第136个数据属于第3类判断第137个数据属于第3类判断第138个数据属于第3类判断第139个数据属于第3类判断第140个数据属于第3类判断第141个数据属于第3类判断第142个数据属于第3类判断第143个数据属于第3类判断第144个数据属于第3类判断第145个数据属于第3类判断第146个数据属于第3类判断第147个数据属于第3类判断第148个数据属于第3类判断第149个数据属于第3类判断第150个数据属于第3类第一类中没有出现判决错误,第二、三类中出现了个别的错误,分类正确率较高,如果要提高正确率,可以选取更多的样本进行训练。