用身高和体重数据进行性别分类的实验报告_第1页
用身高和体重数据进行性别分类的实验报告_第2页
用身高和体重数据进行性别分类的实验报告_第3页
用身高和体重数据进行性别分类的实验报告_第4页
用身高和体重数据进行性别分类的实验报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

z.z.用身高和体重数据进行性别分类的实验报告(二)一、 基本要求1、试验非参数估计,体会与参数估计在适用情况、估计结果方面的异同。2、试验直接设计线性分类器的方法,与基于概率密度估计的贝叶斯分类器进行比较。3、体会留一法估计错误率的方法和结果。二、具体做法1、在第一次实验中,挑选一次用身高作为特征,并且先验概率分别为男生0.5,女生0.5的情况。改用Parzen窗法或者k近邻法估计概率密度函数,得出贝叶斯n分类器,对测试样本进行测试,比较与参数估计基础上得到的分类器和分类性能的差别。2、 同时采用身高和体重数据作为特征,用Fisher线性判别方法求分类器,将该分类器应用到训练和测试样本,考察训练和测试错误情况。将训练样本和求得的决策边界画到图上,同时把以往用Bayes方法求得的分类器也画到图上,比较结果的异同。3、 选择上述或以前实验的任意一种方法,用留一法在训练集上估计错误率,与在测试集上得到的错误率进行比较。三、原理简述及程序框图1、挑选身高(身高与体重)为特征,选择先验概率为男生0.5女生0.5的一组用Parzen窗法来求概率密度函数,再用贝叶斯分类器进行分类。以身高为例

本次实验我们组选用的是正态函数窗,即€(u)„ u2h„h/JN(h是调节的参量,N是样本个数)V„hd,(d表示维度)。因为区-—(、J-—(、J二NV'\h丿

i„1N N域是一维的,所以体积为V„h。Parzen公式为P故女生的条件概率密度为心^N1'1i故女生的条件概率密度为心^N1'1i„1、x-x J丿n、x-x 4\h2丿n男生的条件概率密度为p2„丄'-€N2VN2

i„1根据贝叶斯决策规则g(x)=p(x/w)p(w)-p(x/w)p(w)知'11‘22如果pl*p”p2*(1-p),x•“,否则,x•“。2流程图如下:2、要求是同时采用身高和体重数据作为特征,用Fisher线性判别方法求分类器,将该分类器应用到训练和测试样本,考察训练和测试错误情况。将训练样本和求得的决策边界画到图上,同时把以往用Bayes方法求得的分类器也画到图上,比较结果的异同。说明,取男生和女生的先验概率分别为0.5,0.5。在设计贝叶斯分类器时,首先求各类样本均值向量,及m= 'x,i=1,2,然后求各个样本的来内离散度矩阵,iNixec°/及s='(x-mXx-mi=1,2,再求出样本的总类内离散度,及i i ix•wiS“=pQ).+p(^2<S2,根据公式“—=汇1(m1-化)求出把二维*空间投影到一维Y空间的最好的投影方向。再求出一维Y空间中各类样本均值'=1',=1,2叫=ny,i=1,2,其中y=“**x,本次实验的分界阈值我们用如下方法7咛Nm'€Nm'得到:y0二1N€N彳,最后,将测试样本中的值代入,求出y,并将其与12y0来进行比较来分类。根据课本对Fisher线性判别法的介绍,得到的算法流程图如下:3、选择上述或以前实验的任意一种方法,用留一法在训练集上估计错误率,与在测试集上得到的错误率进行比较。这里我们选择Fisher线性判别法,用留一法来估计它在训练集上的错误率,并将结果与Fisher线性判别法对测试集进行判别时得到的错误率进行比较。具体流程图如下:四、实验结果及分析总结1、得到结果如下表以身高作为特征

最大似然Bayes0.250.75206.667%0.50.5279%0.750.256020%以身高与体重作为特征h=7计方法、\、\、女生先验概率男生先验概率男生错误个数女生错误个数总错误男生错误率女生错误率总错误率Parzen窗法0.250.757222914%8.8%9.67%0.50.53824015.2%4%13.33%0.750.252464818.4%4%16%最大似然Bayes0.250.7586143.2%12%4.67%0.50.52933211.6%6%10.67%0.750.25916023.6%2%20%分析:通过比较可知,在用最大似然估计这种参数估计方法和Parzen这种非参数估计方法来进行分类时,最大似然估计判别的错误率低。2、得到结果如下1)、用Fisher线性判别方法求分类器,将分类器应用到训练和测试样本上,比

较其错误率判别\对象\男生错误个数女生错误个数总错误男生错误率女生错误率总错误率测试样本2722910.8%4%9.67%训练样本841216%8%12%分析:用训练样本得到的分类器测试测试样本时错误率低,测试结果较好,但测试训练样本时,其错误率较高,测试结果不好。(2)、将训练样本和求得的决策边界画到图上先验概略为0.5,0.5从图中我们可以直观的比较出对训练样本Fisher判别比最大似然Bayes判别效果更好。3、留一法测试结果如下:\\男生错女生错错误率判别\误个数误个数对象\分析:用留一法在训练样本机上估计错误率时,错误率小于它在测试样本集上得到的错误率,且留一法在测试样本集上女生错误个数远低于男生错误个数。五、体会这次实验,我们组用了接近三天的时间,首先,我们对题目要求进行认真分析,在确保对题目完全理解的基础上,开始一步一步分析,求解。对每个小题,及其每一问,我们都经过查书,查资料,编代码这几个步骤,仔细分析每一步算法,得出流程图。经过第一次作业的编程,本次编程我们都觉得轻松了很多,但还会出现一些细节上的错误,不过,这些在我们经过不断的调试之后都会被发现并解决。总体而言,本次试验,让我们对Parzen窗法求类条件概率密度,以及Fisher线性判别法都有了更大的了解。代码:%特征是身高,先验概率为0.5、0.5时用Parzen窗法,贝叶斯分类器。clc;clearall;[FHFW]=te*tread('C:\Users\*uyd\Desktop\homework\FEMALE.t*t','%f%f');z.z.errorboyrate=0;z.errorboyrate=0;z.[MHMW]=te*tread('C:\Users\*uyd\Desktop\homework\MALE.t*t','%f%f');FA=[FHFW];MA=[MHMW];N1=ma*(size(FA));h1=4;hn1=h1/(sqrt(N1));VN1=h1/(sqrt(N1));N2=ma*(size(MA));h2=4;hn2=h2/(sqrt(N2));VN2=h2/(sqrt(N2));[tHtW]=te*tread('C:\Users\*uyd\Desktop\homework\test2.t*t','%f%f%*s');*=[tHtW];[MN]=size(*);s=zeros(M,1);A=[*(:,1)*(:,2)s];error=0;errorgirl=0;errorboy=0;errorrate=0;errorgirlrate=0;girl=0;boy=0;bad=0;fork=1:M%测试集*=A(k);p=0.5;%p为属于女生的先验概率,则1-p为男生的先验概率fori=1:N1pp①=1/sqrt(2*pi)*e*p(-0.5*(abs(*-FA(i)))入2/(hn1入2));%pp(i)是窗函数endp1=sum(1/VN1*pp');y1=1/N1*p1;%是女生的条件概率密度函数forj=1:N2qq(j)=1/sqrt(2*pi)*e*p(-0.5*(abs(*-MA(j)))入2/(hn2入2));endq1=sum(1/VN2*qq');y2=1/N2*q1;%男生的概率密度函数,即其条件概率g=p*y1-(1-p)*y2;%g为判别函数ifg>0ifk<=50s(k,1)=0;%判为女生girl=girl+1;elseerrorgirl=0;z.errorgirl=0;z.errorboyrate=errorboy/250z.errorboyrate=errorboy/250z.errorboy=errorboy+1;endelseifg<0ifk<=50errorgirl=errorgirl+1;elses(k,1)=1;%判为男生boy=boy+1;endelses(k,1)=-2;%不能判别是指等于0时的情况bad=bad+1;endenderrorgirlerrorboybadgirl=errorboy+girlboy=boy+errorgirlerror=errorgirl+errorboyerrorgirlrate=errorgirl/50errorrate=error/M%特征是身高与体重,先验概率为0.5、0.5时用Parzen窗法,贝叶斯分类器。clc;clearall;[FHFW]=te*tread('C:\Users\*uyd\Desktop\homework\FEMALE.t*t','%f%f');[MHMW]=te*tread('C:\Users\*uyd\Desktop\homework\MALE.t*t','%f%f');FA=[FHFW];MA=[MHMW];N1=ma*(size(FA));h1=7;hn1=h1/(sqrt(N1));VN1二hn"2;N2=ma*(size(MA));h2=7;hn2=h2/(sqrt(N2));VN2=hn2^2;[tHtW]=te*tread('C:\Users\*uyd\Desktop\homework\test2.t*t','%f%f%*s');*=[tHtW];[MN]=size(*);s=zeros(M,1);error=0;z.z.errorboy=0;errorrate=0;errorgirlrate=0;errorboyrate=0;girl=0;boy=0;bad=0;fork=1:MA=[*(k,1)*(k,2)];*=A;p=0.5;%p为属于女生的先验概率,则1-p为男生的先验概率pp=0;fori=1:N1fa=[FA(i,1)FA(i,2)];n=1/sqrt(2*pi)*e*p(-0.5*abs((*-fa)*(*-fa)')/(hn1入2));pp=pp+n;endp1=1/VN1*pp';y1=1/N1*p1;%是女生的条件概率密度函数qq=0;forj=1:N2ma=[MA(j,1)MA(j,2)];m=1/sqrt(2*pi)*e*p(-0.5*abs((*-ma)*(*-ma)')/(hn2入2));qq=m+qq;endq1=sum(1/VN2*qq');y2=1/N2*q1;%男生的概率密度函数,即其条件概率g二p*y1-(1-p)*y2;%g为判别函数ifg>0ifk<=50s(k,1)=0;%判为女生girl=girl+1;elseerrorboy=errorboy+1;endelseifg<0ifk<=50errorgirl=errorgirl+1;elses(k,1)=1;%判为男生boy=boy+1;endelses(k,1)=-2;%不能判别是指等于0时的情况bad=bad+1;endenderrorgirlerrorboybadgirl=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]=size(A);[k2,l2]=size(B);M1=sum(AA);M1=M1';M1二M1/11;%男生均值向量M2=sum(BB);errorboyrate=0;z.errorboyrate=0;z.m2=sum(Y2)/l2;z.m2=sum(Y2)/l2;z.M2=M2';M2二M2/12;%女生均值向量S1=zeros(k1,k1);%建立矩阵S2=zeros(k2,k2);fori=1:l1S1二S1+(A(:,i)-M1)*((A(:,i)-M1).');%男生的类内离散度矩阵endfori=1:l2S2=S2+(B(:,i)-M2)*((B(:,i)-M2).');%女生的类内离散度矩阵endSw=0.5*S1+0.5*S2;%总类内离散度矩阵,先验概率0.5w=inv(Sw)*(M1-M2);%两列wT=w';%wT就是使Fisher准则函数JF(w)取极大值时的解,也就是宀维*空间到1维Y空间的最好的投影方向fori=1:l1Y1①二wT(1,1)*A(1,i)+wT(1,2)*A(2,i);%求出二维男生样本集映射到一维时的量endfori=1:l2Y2①二wT(1,1)*B(1,i)+wT(1,2)*B(2,i);%求出二维女生样本集映射到一维时的量endm1=sum(Y1)/l1;y0=(l1*m1+l2*m2)/(l1+l2);%%用fisher线性判别函数来判断clcclearall[filename,pathname,filterinde*]=uigetfile('*.t*t','请读入男生训练集');fileAddrs=[pathname,filename];[A1A2]=te*tread(fileAddrs,'%f%f');[filename,pathname,filterinde*]=uigetfile('*.t*t','请读入女生训练集');fileAddrs=[pathname,filename];[B1B2]=te*tread(fileAddrs,'%f%f');AA=[A1A2];BB=[B1B2];[w,y0]=fisher(AA,BB);wT=w';girl=0;boy=0;bad=0;errorgirl=0;errorboy=0;error=0;errorgirlrate=0;z.z.errorrate=0;[filename,pathname,filterinde*]=uigetfile('*.t*t','请读入测试集');fileAddrs=[pathname,filename];[T1T2]=te*tread(fileAddrs,'%f%f%*s');TT=[T1T2];T=TT[k3l3]=size(T);fork=1:50y(k)=wT*T(:,k);ify(k)>y0errorgirl=errorgirl+1;elseify(k)<y0girl=girl+1;elsebad=bad+1;endendendfork=51:300y(k)=wT*T(:,k);ify(k)>y0boy=boy+1;elseify(k)<y0errorboy=errorboy+1;elsebad=bad+1;endendenderrorgirlerrorboybadgirl=errorboy+girlboy=boy+errorgirlerror=errorgirl+errorboyerrorgirlrate=errorgirl/50errorboyrate=errorboy/250errorrate=error/l3%画图[filename,pathname,filterinde*]=uigetfile('*.t*t','请读入男生训练集');fileAddrs=[pathname,filename];[A1A2]=te*tread(fileAddrs,'%f%f');[filename,pathname,filterinde*]=uigetfile('*.t*t','请读入女生训练集');fileAddrs=[pathname,filename];[B1B2]=te*tread(fileAddrs,'%f%f');AA=[A1A2];BB=[B1B2];A=AA';B=BB';[k1,l1]=size(A);[k2,l2]=size(B);[w,y0]=fisher(AA,BB);fori=1:l1*=A(1,i);y二A(2,i);%*是身高,y是体重plot(*,y,'R.');holdonendfori=1:l2*=B(1,i);y=B(2,i);plot(*,y,'G.');holdonenda1=min(A(1,:));%男生身高最小值a2=ma*(A(1,:));%男生身高最大值b1=min(B(1,:));%女生身高最小值b2二ma*(B(1,:));%女生身高最大值a3二min(A(2,:));%男生体重最小值a4=ma*(A(2,:));%男生体重最大值b3=min(B(2,:));%女生体重最小值b4=ma*(B(2,:));%女生体重最大值ifa1<b1a=a1;elsea=b1;%a是所有人中身高最小值endifa2>b2b=a2;elseb=b2;%b是所有人中身高最大值endifa3<b3c=a3;elsec=b3;%c是所有人中体重最小值endifa4>b4d=a4;elsed二b4;%d为所有人中体重最大值end*=a:0.01:b;y=(y0-**w(1,1))/w(2,1);plot(*,y,'B');holdon;%身高体重相关,判别测试样本%手动先验概率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);W2=-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*;symsy;h=[*y]';h1=h'*W1*h+w1'*h+w10;h2=h'*W2*h+w2'*h+w20;h=h1-h2;ezplot(h,[130,200,30,100])%功能:应用Fisher准则判断一个身高体重二维数据的性别vector=[*;y];yy=(w.')*vector;ifyy>y0value=2;%表示样本是男生elsevalue=1;%表示样本是女生end%功能:使用留一法求训练样本错误率[A1A2]=te*tread('C:\Users\Administrator\Desktop\模式识另U\homework\MALE.t*t','%f%f');[B1B2]=te*tread('C:\Users\Administrator\Desktop\模式识别\homework\FEMALE.t*t','%f%f');AA=[A1A2];BB=[B1B2];A=AA';B=BB';m1=2;m2=2;n1=50;n2=50;tempA=zeros(m1,n1-1);count=0;fori=1:n1forj=1:(i-1)tempA(:,j)=A(:,j);endforj=(i+1):n1tempA(:,j-1)=A(:,j);end[w,y0]=fisher((tempA.'),BB);flag=classify_CH(A(1,i),A(2,i),w,y0);ifflag==1cou

温馨提示

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

评论

0/150

提交评论