1实验报告(例1)课程名称:模式识别实验名称:贝叶斯分类提交时间:专业:计算机应用技术年级:2009级姓名:一、实验目的和要求目的:掌握利用贝叶斯公式进行设计分类器的方法。要求:分别做出协方差相同和不同两种情况下的判别分类边界。二、实验环境、内容和方法环境:windowsXP,matlabR2007a内容:根据贝叶斯公式,给出在类条件概率密度为正态分布时具体的判别函数表达式,用此判别函数设计分类器。数据随机生成,比如生成两类样本(如鲈鱼和鲑鱼),每个样本有两个特征(如长度和亮度),每类有若干个(比如20个)样本点,假设每类样本点服从二维正态分布,随机生成具体数据,然后估计每类的均值与协方差,在两类协方差相同的情况下求出分类边界。先验概率自己给定,比如都为0.5。如果可能,画出在两类协方差不相同的情况下的分类边界。画出图形。方法:贝叶斯分类三、实验过程描述1.产生第一类数据:x1是第一类数据,x2是第二类数据,每一列代表一个样本(两个特征)x1(1,:)=normrnd(12,4,1,20);x1(2,:)=normrnd(20,4,1,20);x2(1,:)=normrnd(18,4,1,20);x2(2,:)=normrnd(10,4,1,20);2.均值的估计为11ˆnkkxn协方差的估计为11ˆˆˆ()()nTkkkkkxxn。两类协方差相同的情况下的分类边界为:0()0twxx,ijw2)()(P)(Pln)(21xjiji2ji2ji0两类协方差不相同的情况下的判别函数为:0111ii0()111()222ttiiiitiiiiiiiiigxxWxwxwP四、结果分析在协方差相同的情况下,判别分类边界其实就是线性分类器产生的边界。在协方差不同的情况下的二次线性分类边界有时会出现奇怪的形状,这应该是求得的解只是两个解中一个解的原因。下面是得到比较好的结果:0510152025303551015202530五、附录代码%主代码clear;clc;randseed;x1(1,:)=normrnd(12,4,1,20);x1(2,:)=normrnd(20,4,1,20);plot(x1(1,:),x1(2,:),'ro',...'LineWidth',2,...'MarkerEdgeColor','k',...'MarkerFaceColor',[100],...'MarkerSize',10)x2(1,:)=normrnd(18,4,1,20);3x2(2,:)=normrnd(10,4,1,20);pw1=0.5;pw2=0.5;holdon;plot(x2(1,:),x2(2,:),'bo',...'LineWidth',2,...'MarkerEdgeColor','k',...'MarkerFaceColor',[010],...'MarkerSize',10)u1=sum(x1,2)/20;u2=sum(x2,2)/20;x1count=size(x1,2);x1t=x1-kron(u1,ones(1,x1count));S1t=x1t*x1t'/x1count;x2count=size(x2,2);x2t=x2-kron(u2,ones(1,x2count));S2t=x2t*x2t'/x2count;St=(S1t+S2t)/2;w=St^(-1)*(u1-u2);x0=(u1+u2)/2-log(pw1/pw2)/((u1-u2)'*inv(St)*(u1-u2))*(u1-u2);k=-w(1)/w(2);b=x0(2)-k*x0(1);x=[5,23];plot(x,k*x+b,'g-.','LineWidth',3);S1tinv=inv(S1t);S2tinv=inv(S2t);W1=-1/2*S1tinv;W2=-1/2*S2tinv;w1=S1tinv*u1;w2=S2tinv*u2;w10=-1/2*u1'*S1tinv*u1-1/2*log(det(S1t))+log(pw1);w20=-1/2*u2'*S2tinv*u2-1/2*log(det(S2t))+log(pw2);t2=[]fort1=1:23tt2=fsolve('bayesian_fun',5,[],t1,W1,W2,w1,w2,w10,w20);t2=[t2,tt2];endplot(1:23,t2,'b','LineWidth',3);%下面是bayesian_fun函数functionf=bayesian_fun(t2,t1,W1,W2,w1,w2,w10,w20)x=[t1,t2]';f=x'*W1*x+w1'*x+w10-(x'*W2*x+w2'*x+w20);%f=bayesian_fun.mfunctionf=bayesian_fun(t2,t1,W1,W2,w1,w2,w10,w20)x=[t1,t2]';4f=x'*W1*x+w1'*x+w10-(x'*W2*x+w2'*x+w20);