西安交通大学《模式识别》实验一——IRIS正态分布假设下的贝叶斯分类吴娟梅硕20813112313030西安交大-《模式识别》实验一吴娟梅实验原理对于具有多个特征参数的样本(如本实验的iris数据样本有4d个参数),其正态分布的概率密度函数可定义为112211()exp()()2(2)Tdpxxμxμ式中,12,,,dxxxx是d维行向量,12,,,dμ是d维行向量,是dd维协方差矩阵,1是的逆矩阵,是的行列式。本实验我们采用最小错误率的贝叶斯决策,使用如下的函数作为判别函数()(|)(),1,2,3iiigpPixx(3个类别)其中()iP为类别i发生的先验概率,(|)ipx为类别i的类条件概率密度函数。由其判决规则,如果使()()ijggxx对一切ji成立,则将x归为i类。我们根据假设:类别i,i=1,2,……,N的类条件概率密度函数(|)ipx,i=1,2,……,N服从正态分布,即有(|)ipx~(,)iiNμ,那么上式就可以写为1122()1()exp()(),1,2,32(2)TiidPgixx-μx-μ对上式右端取对数,可得111()()()ln()lnln(2)222TiiiidgPiixx-μx-μ上式中的第二项与样本所属类别无关,将其从判别函数中消去,不会改变分类结果。则判别函数()igx可简化为以下形式111()()()ln()ln22TiiiigPiixx-μx-μ西安交大-《模式识别》实验一吴娟梅实验过程1.用部分数据来估计均值、协方差首先读入数据clearallclc%原始数据导入,原数据以文本的形式存储,iris是一个L*12的矩阵,L为数据长度iris=load('C:\DocumentsandSettings\Administrator\IRIS_Data.txt');%求出数据长度Ldisplay('数据长度为')L=length(iris)%iris是一个L*12的矩阵,12列共分为三类数据,每类占4列%将数据分类存储于三个数组w1=iris(1:L,1:4);w2=iris(1:L,5:8);w3=iris(1:L,9:12);然后选取训练样本估计均值、协方差。训练样本的选取有很多种方法,我们采用两种较为常见的方法进行选取。方法一是顺序选取。分别试取[1:10]、[11:50]两组数据进行训练,用于对比训练数据多寡对于分类效果的影响。%顺序选取,参数可调,待输入选取的训练样本的起始点和截止点display('请输入每类训练样本在顺序选取时的');N0=input('数据起始点(大于0小于L的整数)N0=');Nj=input('数据截止点(大于N0小于L的整数)Nj=');display('则训练样本长度为')N=Nj-N0+1%提取样本的统计特征值,均值和协方差display('用上述部分数据估计的三类样本均值、协方差依次为');mean1=mean(w1(N0:Nj,:))mean2=mean(w2(N0:Nj,:))mean3=mean(w3(N0:Nj,:))cov1=cov(w1(N0:Nj,:))cov2=cov(w2(N0:Nj,:))cov3=cov(w3(N0:Nj,:))方法二是随机选取N个数据。试随机取N=10、N=40两组数据进行训练。同样也是用于比对训练数据的多寡对分类器的性能有何影响。clearallclc%原始数据导入,原数据以文本的形式存储,iris是一个L*12的矩阵,L为数据长度iris=load('C:\DocumentsandSettings\Administrator\IRIS_Data.txt');%求出数据长度Ldisplay('数据长度为')L=length(iris)%iris是一个L*12的矩阵,12列共分为三类数据,每类占4列%将数据分类存储于三个数组w1=iris(1:L,1:4);w2=iris(1:L,5:8);w3=iris(1:L,9:12);%随机选取,参数可调,待输入选取的训练样本的个数NN=input('请输入每类训练样本在随机选取时的样本长度为N=');西安交大-《模式识别》实验一吴娟梅%随机选取N个训练样本,即产生N个不大于数据长度L的不重复的整数作为其样本序号Numberranddata=randperm(L);Number1=randdata(1:N);Number=sort(Number1);%提取样本的统计特征值,均值和协方差display('用上述部分数据估计的三类样本均值、协方差依次为');mean1=mean(w1(Number,:))mean2=mean(w2(Number,:))mean3=mean(w3(Number,:))cov1=cov(w1(Number,:))cov2=cov(w2(Number,:))cov3=cov(w3(Number,:))2.用后验概率去判断数据的类型首先选取测试分类数据。令先验概率可变,即选取不同的测试数据组数进行实验。试取测试数据组数为10、10、10,正常取值,来考查前述训练样本数对分类结果的影响。再试取数据组数为试取数据组数为4、40、50;45、4、3进行分类。研究当先验概率很小时对分类效果的影响。%选取w1[N10:N1j],w2[N20:N2j],w3[N30:N3j]用作每类测试的分类样本,可变先验概率%顺序选取,参数可调,待输入选取的测试分类样本的起始点和截止点%1类测试分类数据display('请输入1类测试分类样本在顺序选取时的');N10=input('数据起始点(大于0小于L的整数)N10=');N1j=input('数据截止点(大于N0小于L的整数)N1j=');display('则1类测试分类样本长度为')N1=N1j-N10+1test1=w1(N10:N1j,:);%2类测试分类数据display('请输入第2类测试分类样本在顺序选取时的');N20=input('数据起始点(大于0小于L的整数)N20=');N2j=input('数据截止点(大于N0小于L的整数)N2j=');display('则第2类测试分类样本长度为')N2=N2j-N20+1test2=w1(N20:N2j,:);%3类测试分类数据display('请输入第3类测试分类样本在顺序选取时的');N30=input('数据起始点(大于0小于L的整数)N30=');N3j=input('数据截止点(大于N0小于L的整数)N3j=');display('则第3类测试分类样本长度为')N3=N3j-N30+1test3=w1(N30:N3j,:);%选取的测试分类数据存入一个数组testtest=[test1;test2;test3];然后分别两两分组,第1&2类、第2&3类、第1&3类,计算判别函数,判别分类正确率。%计算协方差阵的行列式和逆cov1_det=det(cov1);cov2_det=det(cov2);cov3_det=det(cov3);cov1_inv=inv(cov1);cov2_inv=inv(cov2);西安交大-《模式识别》实验一吴娟梅cov3_inv=inv(cov3);%进行第1次实验,即第1&2分组实验display('对一二分组时第一、二类测试数据的先验概率(%)依次为');pw11=N1/(N1+N2)pw12=1-pw11rate11=0.0;rate12=0.0;fori=1:(N1+N2)g11=(-0.5)*(test(i,:)-mean1)*cov1_inv*(test(i,:)'-mean1')-0.5*log(abs(cov1_det))+log(pw11);g12=(-0.5)*(test(i,:)-mean2)*cov2_inv*(test(i,:)'-mean2')-0.5*log(abs(cov2_det))+log(pw12);ifg11g12ifi(N1+1)rate11=rate11+1;endelseifiN1rate12=rate12+1;endendenddisplay('对一二分组时第一、二类测试数据的分类正确率(%)依次为为');rate11=rate11/N1*100rate12=rate12/N2*100%进行第2次实验,即第2&3分组实验display('对二三分组时第二、三类测试数据的先验概率(%)依次为');pw22=N2/(N2+N3)pw23=1-pw22rate22=0.0;rate23=0.0;fori=(N1+1):(N1+N2+N3)g22=(-0.5)*(test(i,:)-mean2)*cov2_inv*(test(i,:)'-mean2')-0.5*log(abs(cov2_det))+log(pw22);g23=(-0.5)*(test(i,:)-mean3)*cov3_inv*(test(i,:)'-mean3')-0.5*log(abs(cov3_det))+log(pw23);ifg22g23ifi(N1+N2+1)rate22=rate22+1;endelseifi(N1+N2)rate23=rate23+1;endendenddisplay('对二三分组时第二、三类测试数据的分类正确率(%)依次为');rate22=rate22/N2*100rate23=rate23/N3*100%进行第3次实验,即第1&3分组实验display('对一三分组时第一、三类测试数据的先验概率(%)依次为');pw31=N1/(N1+N3)pw33=1-pw31rate31=0.0;rate33=0.0;fori=[1:N1,N1+N2+1:N1+N2+N3]g31=(-0.5)*(test(i,:)-mean1)*cov1_inv*(test(i,:)'-mean1')-0.5*log(abs(cov1_det))+log(pw31);g33=(-0.5)*(test(i,:)-mean3)*cov3_inv*(test(i,:)'-mean3')-0.5*log(abs(cov3_det))+log(pw33);ifg31g33ifi(N1+1)rate31=rate31+1;endelseifi(N1+N2)rate33=rate33+1;endendenddisplay('对一三分组时第一、三类测试数据西安交大-《模式识别》实验一吴娟梅的分类正确率(%)依次为');rate31=rate31/N1*100rate33=rate33/N3*100西安交大-《模式识别》实验一吴娟梅结果分析与结论结果分析一:试取测试数据组数为10、10、10,正常取值,来考查前述训练样本数对分类结果的影响。方法一是顺序选取。分别试取[1:10]、[11:50]两组数据进行训练,用于对比训练数据多寡对于分类效果的影响。结果显示正确率都非常高,试验了几组数据都是100%的正确率。这可能是因为实验数据本身的正态分布比较集中。方法二是随机选取N个数据。试随机取N=10、N=40两组数据进行训练。同样也是用于比对训练数据的多寡对分类器的性能有何影响。结果显示,当训练数据较小时,正确率会有所下降。但是当数据多时,正确率又会接近100%。结论一:两种训练数据选取方法的不同得出不同的结果,说明训练数据的选择对分类器的性能是有影响的。由于随机选取数据的波动性可能会大一些,故我认为在实际设计分类器时尽量不要使用随机选取训练数据。结果分析二:再试取数据组数为试取数据组数为4、40、50;45、4、2进行分类。研究当先验概率很小时对分类效果的影响。结果显示,当先验概率很小时,其对应类的分类正确率可能会有所下降,这也不是绝对的。结论二:我们在分类时如果某类数据在总的数据中所占的比例很小,那么它被误分的可能性会增大。这