两类正态分布模式的贝叶斯判别硕633 3106036072 赵杜娟一.实验目的1.理解贝叶斯判别原则,编写两类正态分布模式的贝叶斯分类程序; 2.了解正态分布模式的贝叶斯分类判别函数; 3.通过实验,统计贝叶斯判别的正确率。
二.实验原理(1)贝叶斯判别原则对于两类模式集的分类,就是要确定x 是属于1ω类还是2ω类,这要看x 来自1ω类的概率大还是来自2ω类的概率大,根据概率的判别规则,可以得到: 如果)|()|(21x P x P ωω> 则 1ω∈x如果)|()|(21x P x P ωω< 则 2ω∈x (1.1) 利用贝叶斯定理,可得 )()()|()|(x p P x p x P i i i ωωω=式中,)|(i x p ω亦称似然函数。
把该式代入(1.1)式,判别规则可表示为: )()|()()|(2211ωωωωP x p P x p > 则 1ω∈x )()|()()|(2211ωωωωP x p P x p < 则 2ω∈x 或写成: )()()|()|()(122112ωωωωP P x p x p x l >=则 1ω∈x )()()|()|()(122112ωωωωP P x p x p x l <=则 2ω∈x (1.2) 这里,12l 称为似然比,2112)()(θωω=P P 称为似然比的判决阈值。
该式称为贝叶斯判别。
(2)正态分布模式的贝叶斯分类器判别原理具有M 种模式类别的多变量正态分布的概率密度函数为:)]()(21exp[)2(1)|(1212i i T i in i m x C m x C x P ---=-πω 2,1=i (1.3)式中,x 是n 维列向量; i m 是n 维均值向量; i C 是n n ⨯协方差矩阵;i C 为矩阵i C 的行列式。
且有 {}i i m E x =; ()(){}Ti i i i m x m x E C --=;{}iE x 表示对类别属于i ω的模式作数学期望运算。
可见,均值向量i m 由n 个分量组成,协方差矩阵i C 由于其对称性故其独立元素只有2)1(+n n 个,所以多元正态密度函数完全由2)1(++n n n 个独立元素所确定。
取自一个正态总体的样本模式的分布是聚集于一个集群之内,其中心决定于均值向量,而其分布形状决定于其协方差矩阵,分布的等密度点的轨迹为超椭圆,椭圆的主轴与协方差矩阵的本征向量的方向一致,主轴的长度与相应的协方差矩阵的本征值成正比。
类别的判别函数可表示为:)()|()(i i i P x P x d ωω= 对于正态密度函数,可对判别函数取自然对数,即:)(ln )]|(ln[)(i i i P x P x d ωω+=将(1.3)代入上式,简化后可以得到:{})()(21ln 21)(ln )(1i i T i i i i m x C m x C P x d ----=-ω这是正态分布模式的贝叶斯判别函数。
显然,上式表明)(x d i 是超二次曲面,所以对于两类正态分布模式的贝叶斯分类器,两个模式类别之间用一个二次判别界面分开,就可以求得最优的分类效果。
对于两类问题,判别界面方程为:()()120d x d x -= 即:)()|(11ωωP x P 0)()|(22=-ωωP x P判别条件为: 如果0)()(21>-x d x d , 则1ω∈x如果0)()(21≤-x d x d , 则2ω∈x应指出,贝叶斯分类规则是基于统计的概念,因此要有大量的模式样本,才能获得最优的结果。
三实验内容及结果分析1.根据实验要求,在本实验中将三组分别服从不同参数的正态分布数据两两进行分类,利用贝叶斯原理首先设定其先验概率,并从每组数据中随机抽取一定的训练样本数来进行参数估计,从而得到三组数据各自的条件概率。
2.根据条件概率,利用贝叶斯判别原则进行分类实验,得到结果。
3.实验结果分析分别对x1,x2和x3两两进行实验,每次选取不同的先验概率和不同的训练样本数,进行训练,且训练样本是随机选取的,即在每次相同的训练样本个数的情况下所抽取的样本是不一样的。
然后按照训练后的结果得到的每组的条件概率,对全部数据进行分类。
各自在选取相同训练样本个数的条件下进行50次分类,然后求出50次分类的平均正确率,可得下表:分析表格,可以得到:x1和x2之间的分类,无论先验概率是多少,在选取的样本数m=5时,分类的正确率都比较低,m=15时,正确率接近100%,样本数再大,正确率就会达到100%。
这说明x1和x2之间的分类,在训练样本数较小时,分类效果较差;在样本数选取较大时,分类效果比较理想。
x2和x3之间的分类,在训练样本数较小时,分类正确率很低,仅有70%左右,随着训练样本数的增多,正确率增大,直到选取45个训练样本时正确率大于95%,但达不到100%。
这说明x2和x3这两组数据很接近,无论先验概率选取多少,训练样本数是多少,分类效果都不太理想。
x1和x3之间的分类,无论先验概率选取多少,在训练样本数m=5时,分类正确率较小,当训练样本数达到15时,分类正确率已经达到了100%。
这说明x1和x3之间的分类相对来说比较容易达到,只要选取的训练样本数较大,分类效果都比较理想。
4.实验中的问题(1).为了得到随机抽取的训练样本,采用randsperm函数,先产生1~50内随机排序的数字,然后取其前m行(m为训练样本数),就可以得到随机的训练样本。
(2).在随机选取训练样本时,当所选训练样本数很少时(比如m=5),所选样本的协方差矩阵的行列式很可能为0,这样的话就得不到条件概率密度函数,也就无法进行分类判断了。
解决的方法是:给协方差矩阵加上一个对角线上元素值很小(0.000001)的对角阵,然后再对所得结果矩阵求行列式,然后再求概率密度函数进行分类判断。
四.实验程序部分clear all;close all;clc;load('data.mat'); %%读入实验数据P1=input('please input P1:'); %输入先验概率P2=1-P1;s1=input('s1='); %选择实验模式类s2=input('s2=');m=input('训练样本数m='); %输入训练样本数T1=zeros(m,4);T2=zeros(m,4);T3=zeros(m,4);r=zeros(1,50);p=1;while p<=50 %进行50次分类,以便进行统计分类的正确性%随机抽取m个训练样本index=randperm(50);for i=1:1:m %得到随机的训练样本T1(i,:)=k1(index(i),:);T2(i,:)=k2(index(i),:);T3(i,:)=k3(index(i),:);end%由训练样本计算均值和协方差me1=mean(T1);me2=mean(T2);me3=mean(T3);co1=cov(T1);co2=cov(T2);co3=cov(T3);%判断是对哪两类模式要进行分类if (isequal(k1,s1)==1&&isequal(k2,s2)==1)m1=me1;c1=co1;m2=me2;c2=co2;elseif (isequal(k2,s1)==1&&isequal(k1,s2)==1)m1=me2;c1=co2;m2=me1;c2=co1;elseif (isequal(k2,s1)==1&&isequal(k3,s2)==1)m1=me2;m2=me3;c1=co2;c2=co3;elseif (isequal(k3,s1)==1&&isequal(k2,s2)==1)m1=me3;m2=me2;c1=co3;c2=co2;elseif (isequal(k3,s1)==1&&isequal(k1,s2)==1)m1=me3;m2=me1;c1=co3;c2=co1;elseif (isequal(k1,s1)==1&&isequal(k3,s2)==1)m1=me1;m2=me3;c1=co1;c2=co3;end%两类的正态分布模式的贝叶斯判别if det(c1)==0||det(c2)==0 %当协方差矩阵行列式为0时给它加一个极小值,再进行分类l=size(c1);I=eye(l(1),l(1));I=I*0.000001;c1=I+c1;c2=I+c2;endn=1;t1=0;while n<=100if rem(n,2)==1 %奇数次输入s1x=s1((n+1)/2,:);d1=log(P1)-0.5*log(det(c1))-0.5*(x-m1)*(inv(c1))*(x-m1)';d2=log(P2)-0.5*log(det(c2))-0.5*(x-m2)*(inv(c2))*(x-m2)';% Pw1=1/(2*pi)^2/(det(c1))*exp(-0.5*(x-m1)*(inv(c1))*(x-m1)')*P1;% Pw2=1/(2*pi)^2/(det(c2))*exp(-0.5*(x-m2)*(inv(c2))*(x-m2)')*P2;n=n+1;% if Pw1>Pw2if d1>d2 %判断条件 d1>d2判为w1类t1=t1+1; %t1是判断正确次数,若判断正确,则加1endendif rem(n,2)==0 %偶数次输入s2x=s2(n/2,:);d1=log(P1)-0.5*log(det(c1))-0.5*(x-m1)*(inv(c1))*(x-m1)';d2=log(P2)-0.5*log(det(c2))-0.5*(x-m2)*(inv(c2))*(x-m2)';% Pw1=1/(2*pi)^2/(det(c1))*exp(-0.5*(x-m1)*(inv(c1))*(x-m1)')*P1; % Pw2=1/(2*pi)^2/(det(c2))*exp(-0.5*(x-m2)*(inv(c2))*(x-m2)')*P2; n=n+1;% if Pw1<Pw2if d1<d2 %判断条件 d1<d2判为w2类t1=t1+1;endendendr(p)=t1; %r存放每进行一个循环的判断中判断正确的次数p=p+1;endra=sum(r)/50/100 %计算50次分类后的正确率。