模式识别实验二_第1页
模式识别实验二_第2页
模式识别实验二_第3页
模式识别实验二_第4页
模式识别实验二_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二 用身高和/或体重数据进行性别分类姓名:学号:班级:姓名:学号:班级:一、实验目的和要求(一)加深对非参数估计的认识,和对它与参数估计在适用情况、估计结果方面的异同的理解。(二)掌握直接设计线性分类器的方法,并与基于概率密度估计的贝叶斯分类器进行比较。(三)掌握留一法估计错误率的方法。二、实验内容(一)在第一次实验中,挑选一次用身高(身高与体重)作为特征,并且先验概率分别为男生0.5,女生0.5的情况。改用Parzen窗法或者kn近邻法估计概率密度函数,得出贝叶斯分类器,对测试样本进行测试,比较与参数估计(最大似然法)基础上得到的分类器和分类性能的差别。(二)同时采用身高和体重数据作为特

2、征,用Fisher线性判别方法求分类器,将该分类器应用到训练和测试样本,考察训练和测试错误情况。将训练样本和求得的决策边界画到图上,同时把以往用Bayes方法求得的分类器也画到图上,比较结果的异同。(三)选择上述Bayes分类器和Fisher分类器,用留一法在训练集上估计错误率,与在测试集上得到的错误率进行比较。三、原理简述及程序框图(一)挑选身高(身高与体重)为特征,选择先验概率为男生0.5女生0.5的一组1.用Parzen窗法来求概率密度函数,再用贝叶斯分类器进行分类。Parzen窗法,窗函数为,我们选用正态函数窗,窗宽为(h是调节的参量,N是样本个数) ,(d表示维度)。因为区域是一维的

3、,所以体积为。Parzen公式为。因此,女生的条件概率密度为 男生的条件概率密度为根据贝叶斯决策规则知:如果,则,否则,。2.流程图如下:选择窗函数及窗宽求出样本类别为男或女的类条件概率密度得出决策规则并对测试样本进行判别确定特征及先验概率(二)要求是同时采用身高和体重数据作为特征,用Fisher线性判别方法求分类器,将该分类器应用到训练和测试样本,考察训练和测试错误情况。将训练样本和求得的决策边界画到图上,同时把以往用Bayes方法求得的分类器也画到图上,比较结果的异同。1.取男生和女生的先验概率分别为0.5,0.5。在设计贝叶斯分类器时,首先求各类样本均值向量,然后求各个样本的类内离散度矩

4、阵,再求出样本的总类内离散矩阵,根据公式求出把二维X空间投影到一维Y空间的最好的投影方向。再求出一维Y空间中各类样本均值,其中。再根据决策规则,当时,当时,这样就可判断出x属于什么类别了。本次实验为二维,所以分界阈值我们用如下方法得到:。2.将测试样本中的值代入,求出一维空间投影y,并将其与分界阈值来进行比较来分类。3.根据课本对Fisher线性判别法的介绍,得到的算法流程图如下: 求各类样本均值向量求类内离散度矩阵用公式求最好的变换向量二维空间向一维y空间投影一维空间样本均值求取阈值决策判断计算各类样本的错误率(三)选择上述或以前实验的任意一种方法,用留一法在训练集上估计错误率,并与在测试集

5、上得到的错误率进行比较。1.用 Fisher线性判别法,并用留一法来估计它在训练集上的错误率,并将结果与Fisher线性判别法对测试集进行判别时得到的错误率进行比较。2.具体流程图如下:导入两个训练样本集依次将女生样本集中的每一个样本当做测试集,余下的所有样本做训练集用Fisher法判断被选出来的样本,若判断错误,计数一次将男生按照以上方法再进行判别,计数,得到错误率再将以上方法用以测试集,得到错误率四、实验结果及分析总结问题(一)实验结果及分析以下h为窗宽,若h过大,使估计量变成N个宽度较大且函数值变化缓慢的函数的叠加,从而使它是的一个平均的估计,使估计的分辨率降低;反之,若h很小,趋近于0

6、,则使就成了N个以样本为中心的尖峰函数的叠加,使估计的统计变动很大。因此,h的选取,对估计量有很大影响。经过多次测试,我们表1选择h=4,表2选择h=7.另外,先验概率的改变通过手动输入改变。训练样本为FEMALE.txt MALE.txt,测试样本为test2.txt表1.以身高为特征的各估计方法的判别错误率(h=4) 女生先验概率男生先验概率男生错误个数女生错误个数总错误个数男生错误率女生错误率总错误率Parzen窗法0.250.752283016%8.8%10%0.50.53443813.6%8%12.67%0.750.258028232%4%27.33%最大似然Bayes0.250.7

7、5 206.667%0.50.5279%0.750.256020%训练样本为FEMALE.txt MALE.txt,测试样本为test2.txt、表2.以身高与体重作为特征的各估计方法的判别错误率(h=7) 女生先验概率男生先验概率男生错误个数女生错误个数总错误个数男生错误率女生错误率总错误率Parzen窗法估计0.250.757222914%8.8%9.67%0.50.53824015.2%4%13.33%0.750.252464818.4%4%16%最大似然估计0.250.7586143.2%12%4.67%0.50.52933211.6%6%10.67%0.750.25916023.6%

8、2%20%分析:由表中数据可知,最大似然估计这种参数估计方法和Parzen窗这种非参数估计方法用来进行分类时,最大似然估计判别的错误率低。问题(二)实验结果及分析1.用Fisher线性判别方法求分类器,训练样本为MALE.txt,FAMALE.txt,将分类器分别应用到训练样本和测试样本(test2.txt)上,比较其错误率表3.用Fisher线性判别方法的错误率判别对象男生错误个数女生错误个数总错误个数男生错误率女生错误率总错误率测试样本2622910.8%4%9.6%训练样本831216%7%11%分析:由表中数据可以看出,用训练样本得到的分类器在对测试样本进行测试时错误率较低,测试结果较

9、好,但测试训练样本时,其错误率较高,测试结果不好。2.将训练样本和求得的决策边界画到图上(1)男生女生先验概为0.5,0.5;(曲线代表最大似然决策边界,直线代表fisher决策边界,红点和绿点分别表示训练样本中女生和男生)图1决策样本和决策边界分析:从图中可以看出,直线判错的曲线判错的个数少,我们可以比较得出对训练样本Fisher判别比最大似然判别效果更好。问题(三)实验结果及分析留一法测试结果如下:表4.留一法错误率判别对象男生错误个数女生错误个数错误率测试样本81328%训练样本8412%分析:由表中可以直接看出,用留一法在训练样本集上估计错误率时小于它在测试样本集上估计的错误率,此外留

10、一法在测试样本集上女生错误个数远低于男生错误个数。五、体会本次实验,我们用了接近三天的时间来完成。首先,我们了解了题目要求,在确保对题目完全理解的基础上,开始一步一步分析,求解。对每个小题,及其每一问,我们都经过查书,查资料,编代码几个步骤,仔细分析每一步算法,得出流程图。经过第一次作业的编程,本次编程我们觉得轻松了很多,但还会出现一些细节上的错误,不过,这些在我们经过不断的调试之后问题都被发现并解决。总体而言,本次试验,让我们对Parzen窗法求类条件概率密度,以及Fisher线性判别法都有了更大的了解。六、附录Matlab程序源代码:%特征是身高,先验概率为0.5、0.5时用Parzen窗

11、法,贝叶斯分类器。clc;clear all;FH FW=textread('FEMALE.txt','%f%f');MH MW=textread('MALE.txt','%f%f');FA=FH FW;MA=MH MW;N1=max(size(FA);h1=4;hn1=h1/(sqrt(N1);VN1=h1/(sqrt(N1);N2=max(size(MA);h2=4;hn2=h2/(sqrt(N2);VN2=h2/(sqrt(N2);tH tW=textread('test2.txt','%f%f%*s

12、');X=tH tW;M N=size(X);s=zeros(M,1);A=X(:,1) X(:,2) s;error=0;errorgirl=0;errorboy=0;errorrate=0;errorgirlrate=0;errorboyrate=0;girl=0;boy=0;bad=0;for k=1:M %测试集 x=A(k); p=0.5;%p为属于女生的先验概率,则1-p为男生的先验概率 for i=1:N1 pp(i)=1/sqrt(2*pi)*exp(-0.5*(abs(x-FA(i)2/(hn12);%pp(i)是窗函数 end p1=sum(1/VN1*pp'

13、;); y1=1/N1*p1;%是女生的条件概率密度函数 for j=1:N2 qq(j)=1/sqrt(2*pi)*exp(-0.5*(abs(x-MA(j)2/(hn22); end q1=sum(1/VN2*qq'); y2=1/N2*q1;%男生的概率密度函数,即其条件概率 g=p*y1-(1-p)*y2;%g为判别函数 if g>0 if k<=50 s(k,1)=0;%判为女生 girl=girl+1; else errorboy=errorboy+1; end elseif g<0 if k<=50 errorgirl=errorgirl+1; e

14、lse s(k,1)=1;%判为男生 boy=boy+1; end else s(k,1)=-2;%不能判别是指等于0时的情况 bad=bad+1; end end errorgirlerrorboybadgirl=errorboy+girlboy=boy+errorgirlerror=errorgirl+errorboyerrorgirlrate=errorgirl/50errorboyrate=errorboy/250errorrate=error/M %特征是身高与体重,先验概率为0.5、0.5时用Parzen窗法,贝叶斯分类器。clc;clear all;FH FW=textread(

15、'FEMALE.txt','%f%f');MH MW=textread('MALE.txt','%f%f');FA=FH FW;MA=MH MW;N1=max(size(FA);h1=7;hn1=h1/(sqrt(N1);VN1=hn12;N2=max(size(MA);h2=7;hn2=h2/(sqrt(N2);VN2=hn22;tH tW=textread('test2.txt','%f%f%*s');X=tH tW;M N=size(X);s=zeros(M,1);error=0;errorg

16、irl=0;errorboy=0;errorrate=0;errorgirlrate=0;errorboyrate=0;girl=0;boy=0;bad=0;for k=1:M A=X(k,1) X(k,2); x=A; p=0.5;%p为属于女生的先验概率,则1-p为男生的先验概率 pp=0; for i=1:N1 fa=FA(i,1) FA(i,2); n=1/sqrt(2*pi)*exp(-0.5*abs(x-fa)*(x-fa)')/(hn12); pp=pp+n; end p1=1/VN1*pp' y1=1/N1*p1;%是女生的条件概率密度函数 qq=0; for

17、j=1:N2 ma=MA(j,1) MA(j,2); m=1/sqrt(2*pi)*exp(-0.5*abs(x-ma)*(x-ma)')/(hn22); qq=m+qq; end q1=sum(1/VN2*qq'); y2=1/N2*q1;%男生的概率密度函数,即其条件概率 g=p*y1-(1-p)*y2;%g为判别函数 if g>0 if k<=50 s(k,1)=0;%判为女生 girl=girl+1; else errorboy=errorboy+1; end elseif g<0 if k<=50 errorgirl=errorgirl+1;

18、else s(k,1)=1;%判为男生 boy=boy+1; end else s(k,1)=-2;%不能判别是指等于0时的情况 bad=bad+1; end end errorgirlerrorboybadgirl=errorboy+girlboy=boy+errorgirlerror=errorgirl+errorboyerrorgirlrate=errorgirl/50errorboyrate=errorboy/250errorrate=error/M %用fisher线性判别法求阈值function w,y0=fisher(AA,BB)A=AA'B=BB'k1,l1=s

19、ize(A);k2,l2=size(B);M1=sum(AA);M1=M1'M1=M1/l1;%男生均值向量M2=sum(BB);M2=M2'M2=M2/l2;%女生均值向量S1=zeros(k1,k1);%建立矩阵S2=zeros(k2,k2);for i=1:l1 S1=S1+(A(:,i)-M1)*(A(:,i)-M1).');%男生的类内离散度矩阵endfor i=1:l2 S2=S2+(B(:,i)-M2)*(B(:,i)-M2).');%女生的类内离散度矩阵endSw=0.5*S1+0.5*S2;%总类内离散度矩阵,先验概率0.5w=inv(Sw)*

20、(M1-M2);%两列wT=w'%wT就是使Fisher准则函数JF(w)取极大值时的解,也就是d维X空间到1维Y空间的最好的投影方向for i=1:l1 Y1(i)=wT(1,1)*A(1,i)+wT(1,2)*A(2,i);%求出二维男生样本集映射到一维时的量endfor i=1:l2 Y2(i)=wT(1,1)*B(1,i)+wT(1,2)*B(2,i);%求出二维女生样本集映射到一维时的量endm1=sum(Y1)/l1;m2=sum(Y2)/l2;y0=(l1*m1+l2*m2)/(l1+l2);%用fisher线性判别函数来判断clcclear allfilename,pa

21、thname,filterindex = uigetfile('MALE.txt', '请读入男生训练集');fileAddrs = pathname,filename;A1 A2=textread(fileAddrs,'%f%f');filename,pathname,filterindex = uigetfile('FEMALE.txt', '请读入女生训练集');fileAddrs = pathname,filename;B1 B2=textread(fileAddrs,'%f%f');AA=

22、A1 A2;BB=B1 B2;w,y0=fisher(AA,BB);wT=w'girl=0;boy=0;bad=0;errorgirl=0;errorboy=0;error=0;errorgirlrate=0;errorboyrate=0; errorrate=0;filename,pathname,filterindex = uigetfile('test2.txt', '请读入测试集');fileAddrs = pathname,filename;T1 T2=textread(fileAddrs,'%f%f%*s');TT=T1 T2

23、;T=TT'k3 l3=size(T);for k=1:50 y(k)=wT*T(:,k); if y(k)>y0 errorgirl=errorgirl+1; else if y(k)<y0 girl=girl+1; else bad=bad+1; end endendfor k=51:300 y(k)=wT*T(:,k); if y(k)>y0 boy=boy+1; else if y(k)<y0 errorboy=errorboy+1; else bad=bad+1; end endenderrorgirlerrorboybadgirl=errorboy+

24、girlboy=boy+errorgirlerror=errorgirl+errorboyerrorgirlrate=errorgirl/50errorboyrate=errorboy/250errorrate=error/l3%画图filename,pathname,filterindex = uigetfile('MALE.txt', '请读入男生训练集');fileAddrs = pathname,filename;A1 A2=textread(fileAddrs,'%f%f');filename,pathname,filterindex

25、= uigetfile('FEMALE.txt', '请读入女生训练集');fileAddrs = pathname,filename;B1 B2=textread(fileAddrs,'%f%f');AA=A1 A2;BB=B1 B2;A=AA'B=BB'k1,l1=size(A);k2,l2=size(B);w,y0=fisher(AA,BB);for i=1:l1 x=A(1,i); y=A(2,i);%x是身高,y是体重 plot(x,y,'R.'); hold onendfor i=1:l2 x=B(1,

26、i); y=B(2,i); plot(x,y,'G.'); hold onenda1=min(A(1,:);%男生身高最小值a2=max(A(1,:);%男生身高最大值b1=min(B(1,:);%女生身高最小值b2=max(B(1,:);%女生身高最大值a3=min(A(2,:);%男生体重最小值a4=max(A(2,:);%男生体重最大值b3=min(B(2,:);%女生体重最小值b4=max(B(2,:);%女生体重最大值if a1<b1 a=a1;else a=b1;%a是所有人中身高最小值endif a2>b2 b=a2;else b=b2;%b是所有人中

27、身高最大值endif a3<b3 c=a3;else c=b3;%c是所有人中体重最小值endif a4>b4 d=a4;else d=b4;%d为所有人中体重最大值endx=a:0.01:b;y=(y0-x*w(1,1)/w(2,1);plot(x,y,'B');hold on;%身高体重相关,判别测试样本%自行输入先验概率P1=0.5;P2=0.5;FA=A;MA=B;a=cov(FA')*(length(FA)-1)/length(FA);b=cov(MA')*(length(MA)-1)/length(MA);W1=-1/2*inv(a);W

28、2=-1/2*inv(b);Ave1=(sum(FA')/length(FA)'Ave2=(sum(MA')/length(MA)'w1=inv(a)*Ave1;w2=inv(b)*Ave2;w10=-1/2*Ave1'*inv(a)*Ave1-1/2*log(det(a)+log(P1);w20=-1/2*Ave2'*inv(b)*Ave2-1/2*log(det(b)+log(P2); syms x ; syms y ; h=x y' h1=h'*W1*h+w1'*h+w10; h2=h'*W2*h+w2

29、9;*h+w20 ; h=h1-h2; ezplot(h,130,200,30,100)%功能:应用Fisher准则判断一个身高体重二维数据的性别vector=x;y;yy=(w.')*vector;if yy>y0 value=2;%表示样本是男生else value=1;%表示样本是女生end%功能:使用留一法求训练样本错误率A1 A2=textread('MALE.txt','%f%f');B1 B2=textread('FEMALE.txt','%f%f');AA=A1 A2;BB=B1 B2;A=AA'B=BB'm1=2;m2=2;n1=50;n2=50;tempA=zeros(m1,n1-1);count=0;for i=1:n1 for j=1:(i-1) tempA(:,j)=A(:,j); end for j=(i+1):n1 tempA(:,j-1)=A(:,j); end w,y0=fisher(tempA.'),BB);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论