贝叶斯模式分类硕937班姓名:刘月雷学号:3109091012一、实验目的通过本次实验初步了解贝叶斯公式和最小错误率贝叶斯判别准则,并深入掌握正态分布模式的贝叶斯分类器及其判别函数的计算方法,观察各种因素及参数对分类错误概率的影响。二、实验原理模式识别的分类问题是根据识别对象特征的观察值将其分到某个类别中去,统计决策理论是处理模式分类问题的基本理论之一,它对模式分析和分类器的设计有着实际的指导意义。贝叶斯决策理论方法是统计模式识别中的一个基本方法,用这个方法进行分类时要求:分类别总体的概率分布是已知的;决策分类的类别数是一定的。在模式分类问题中,人们往往希望尽量减少分类的错误,从这样的要求出发,利用概率论中的贝叶斯公式,就能得出使错误率为最小的分类规则,称之为基于最小错误率的贝叶斯决策。应用贝叶斯最小错误概率判别原则来分类,可使得分类器发生分类错误的概率最小。(1)判别函数的确定:对于两类模式集的分类,即对于两个类别1和2,要确定x是属于1类还是2类,这应由x来自1类或2类的后验概率来判断,其中x是d维观测向量,表示为:如)|()|(21xxPP,则1x(1-1)如)|()|(21xxPP,则2x在通常情况下后验概率很难得到,然而利用贝叶斯公式,后验概率)|(xiP可由类别i的先验概率)(iP和条件概率)|(iPx算出,即)()()|(|xxxPPPPiii由式(1-1),判别规则可表示为:如果)()|()()|(2211PPPPxx,则1x;如果)()|()()|(2211PPPPxx,则2x;对于具有正态分布的两类模式来说,多元正态分布的密度函数为:xxxT()(21exp{)2(1)(212iidCCP式中Tx],,,[21dxxx是d维列向量;T],,,d是d维均值向量;iC是dd维协方差矩阵,iC是iC的逆矩阵,iC是iC的行列式;Tx(是x(的转置,且x;}TxxiC对于正态分布的两类模式来说:)}()(21exp{)2(1)|(1212iiiidiCCPxxxT2,1i根据类别判别函数:)()|()(iiiPPxdx对于两类问题,判别规则如下:0)()(21xxdd,则1x;0)()(21xxdd,则2x对于正态密度函数,由对数函数的单调性,对判别函数)(xdi取自然对数:)(ln)]|(ln[)(iiiPPdxx代入)|(iPx得:)(lnln212ln2)()(21)(1iiiiiiPCdCdxxxT2,1i忽略常数项判别函数)(lnln21)()(21)(1iiiiiiPCCdxxxT2,1i※※判别界面d1(x)-d2(x)=0是X的线性函数,为一超界面。(2)概率密度函数的参数估计:在已得到样本的情况下,均值向量和协方差矩阵往往通过最大自然估计法而得到。1111iiNiijjNTTiijijijiMXNCXXMN※※三、实验步骤实验中使用Iris数据,选取每组前50个数据作为样本。对三组正态分布模式的数据进行两两分类。本实验既需要考虑选择相应的训练样本构建贝叶斯分类器,同时还需要考虑选择相应的检验样本估计分类器的错误率。因此在试验中考虑三个参数的影响:1训练样本的选择2检验样本的选择3先验概率的影响。具体步骤:(1)将三组样本两两分类,在每组中选择不同的样本数N,对三组原始数据分别计算它们的均值向量和协方差矩阵及其判别函数)(xid,还是选择同样的N个样本做检验样本,根据判别函数分别在任两组数据间进行分类。设定一个变量用于记录分类错误的数据个数,每分错一个数据,变量加1。在N值不同的情况下,计算分类的正确率。(2)设定不同的先验概率,只选择2,3两类重复1,重新计算其判别函数)(xid,进行分类。(3)选择不同的样本数N做检验样本,用剩下的样本做训练样本,其余过程重复1。(4)只选择2,3两类随机的选择N个样本做训练样本,全部样本做检验样本,其余过程重复1.四.实验结果与分析1.已知有三组数据,每组分别有50个样本模式,样本是4维的。在这里我们先假设21)|()|(21wxpwxp,即两个类别的概率相同。对于第一类和第二类数据在不同训练样本下的错误率:正态分布的两类X1与X2之间的分类输入学习的数据个数5152030404550X1的分类错误率0000000X2的分类错误率0000000对于第一类和第三类数据在不同训练样本下的错误率:正态分布的两类X1与X3之间的分类输入学习的数据个数5152030404550X1的分类错误率0000000X3的分类错误率0000000对于第二类和第三类数据在不同训练样本下的错误率:正态分布的两类X2与X3之间的分类输入学习的数据个数5152030404550X2的分类错误率0.060.040.080.060.060.060.06X3的分类错误率0.340.1000.020.020.02随着输入学习样本的增多,我们可以看到正确率在不断的上升。通过这些数据,我们可以清晰的看到,对于正态分布模式的X1与X2,以及X1与X3,根据贝叶斯分类公式,能够正确地分开他们,其正确率都达到100%。前提是需要随机输入的学习数据的个数要达到一定的数量,因为这是一个四维的空间,为了保证1iC存在,iC的秩要大于或等于4,因此所取得模式的个数至少是4个。理论上分析,随着输入样本的增加,系统验证的正确率越高。实际上我们选择了两类之间的概率密度相等,所以在比较少的模式的情况下,也能基本上正确判断其他的样本。通过以上数据,验证了对正态分布模式进行贝叶斯分类的过程。对于X2与X3之间的分类,由表中可见,当输入样本数为20时,仍然无法完全将X2与X3分开,这说明X2与X3两类数据之间区分的程度不高,或者说两类数据有相似性。因此在学习样本数量较小时无法将两类数据完全分开,但分类正确率会随着样本数的增加而提高。结论:(1)分类正确率随着学习样本数的增加而提高,并最后达到1,因此贝叶斯分类器可以在利用有限个样本进行学习后进行模式识别。(2)利用贝叶斯分类器,第一类与第二类,第一类与第三类数据仅需几个样本便可以较好的区分,但第二类与第三类数据不能很好的区分,可能两类数据之间界限比较模糊。2、对于第一类和第二类以及第一类和第三类数据,由于各类之间具有比较明显的界限,使得)(lniP的取值对)(xid影响不大,因此取不同的先验概率值时,实验结果相差不大。这里对X2和X3取不同先验概率值进行分类观察实验结果。设第二类数据X2的先验概率为0.7,而第三类数据X3的先验概率为0.3,试验结果如下表所示:正态分布的两类X2与X3之间的分类输入学习的数据个数5152030404550X2的分类错误率00000.040.040.06X3的分类错误率00000.020.020.02由实验结果可见,第二类数据的分类正确率提高而第三类数据的分类正确率降低,这是因为)(lniP的变化而使得判决门限发生变化。这样,原来判决为第三类的某些数据现在被判决为第二类。由于第二类数据的先验概率较高,即数据属于第二类的事件更容易发生,因此,判决器采用最小错误判别原则,判断的结果偏向先验概率大的那一方。3.每组两类还是选用相同的先验概率,分别取为1/2对于第一类和第二类数据在不同训练样本下的错误率:正态分布的两类X1与X2之间的分类输入学习的数据个数5152030404550X1的分类错误率0000000X2的分类错误率0000000对于第一类和第三类数据在不同训练样本下的错误率:正态分布的两类X1与X3之间的分类输入学习的数据个数5152030404550X1的分类错误率0000000X3的分类错误率0000000对于第二类和第三类数据在不同训练样本下的错误率:正态分布的两类X2与X3之间的分类输入学习的数据个数5152030404550X2的分类错误率0.060.040.060000X3的分类错误率0.340.1000000五、实验小结:通过本次实验,使我对贝叶斯公式有了更深刻的理解,对公式的推导以及其用于模式识别的判别准则都有了进一步认识,对正态分布模式的贝叶斯分类器及其应用有了一定了解,通过编程并改变程序中的参数观察到贝叶斯分类器中的各种参数对分类结果的影响。六、实验程序clearall;clc;array1=xlsread('data1.xls');%从excel文件中读取待分类数据。array2=xlsread('data2.xls');array3=xlsread('data3.xls');N=input('请输入每类训练样本数(样本数不大于50)N=');aver1=mean(array1(1:N,:));%提取样本的统计特征值,均值和协方差aver2=mean(array2(1:N,:));aver3=mean(array3(1:N,:));vari1=cov(array1(1:N,:));vari2=cov(array2(1:N,:));vari3=cov(array3(1:N,:));C1=inv(vari1);C2=inv(vari2);C3=inv(vari3);Err12=0;Err13=0;Err23=0;Err21=0;Err31=0;Err32=0;M=input('请输入检验样本的起始行数M=');Q=input('请输入检验样本的终止行数Q=');display('对第1、2类数据进行分类');Pw1=input('请输入第1类数据的先验概率Pw1=');Pw2=input('请输入第2类数据的先验概率Pw2=');fori=M:Qd1=log(Pw1)-0.5*log(det(vari1))-(array1(i,:)-aver1)*C1*(array1(i,:)-aver1)'*0.5;d2=log(Pw2)-0.5*log(det(vari2))-(array1(i,:)-aver2)*C2*(array1(i,:)-aver2)'*0.5;ifd1d2Err12=Err12+1;endd1=log(Pw1)-0.5*log(det(vari1))-(array2(i,:)-aver1)*C1*(array2(i,:)-aver1)'*0.5;d2=log(Pw2)-0.5*log(det(vari2))-(array2(i,:)-aver2)*C2*(array2(i,:)-aver2)'*0.5;ifd1d2Err21=Err21+1;endendErr12=Err12/50;Err21=Err21/50;display('对第1类数据进行分类错分为第2类的出错概率:');Err12display('对第2类数据进行分类错分为第1类的出错概率:');Err21display('对第1、3类数据进行分类');Pw1=input('请输入第1类数据的先验概率Pw1=');Pw3=input('请输入第3类数据的先验概率Pw3=');fori=1:50d1=log(Pw1)-0.5*log(det(vari1))-(array1(i,:)-aver1)*C1*(array1(i,:)-aver1)'*0.5;d3=log(Pw3)-0.5*log(det(vari3))-(array1(i,:)-aver3)*C3*(array1(i,:)-aver3)'*0.5;ifd1d3Err13=Err13+1;endd1=log(Pw1)-0.5*log(det(vari1))-(array3(i,:)-aver1)*C1*(array3(i,:)-aver1)'*0.5;d3=log(Pw3)-0.5*log(det(vari3))-(array3(i,:)-aver3)*C3*(array3(i