用身高和体重数据进行性别分类的实验报告.doc

上传人:小** 文档编号:16729849 上传时间:2020-10-22 格式:DOC 页数:18 大小:308KB
返回 下载 相关 举报
用身高和体重数据进行性别分类的实验报告.doc_第1页
第1页 / 共18页
用身高和体重数据进行性别分类的实验报告.doc_第2页
第2页 / 共18页
用身高和体重数据进行性别分类的实验报告.doc_第3页
第3页 / 共18页
点击查看更多>>
资源描述
用身高和体重数据进行性别分类的实验报告(二)一、 基本要求1、试验非参数估计,体会与参数估计在适用情况、估计结果方面的异同。2、试验直接设计线性分类器的方法,与基于概率密度估计的贝叶斯分类器进行比较。3、体会留一法估计错误率的方法和结果。二、具体做法1、在第一次实验中,挑选一次用身高作为特征,并且先验概率分别为男生0.5,女生0.5的情况。改用Parzen窗法或者kn近邻法估计概率密度函数,得出贝叶斯分类器,对测试样本进行测试,比较与参数估计基础上得到的分类器和分类性能的差别。2、同时采用身高和体重数据作为特征,用Fisher线性判别方法求分类器,将该分类器应用到训练和测试样本,考察训练和测试错误情况。将训练样本和求得的决策边界画到图上,同时把以往用Bayes方法求得的分类器也画到图上,比较结果的异同。3、选择上述或以前实验的任意一种方法,用留一法在训练集上估计错误率,与在测试集上得到的错误率进行比较。三、原理简述及程序框图1、挑选身高(身高与体重)为特征,选择先验概率为男生0.5女生0.5的一组用Parzen窗法来求概率密度函数,再用贝叶斯分类器进行分类。以身高为例本次实验我们组选用的是正态函数窗,即,窗宽为(h是调节的参量,N是样本个数) ,(d表示维度)。因为区域是一维的,所以体积为。Parzen公式为。故女生的条件概率密度为 男生的条件概率密度为根据贝叶斯决策规则知 如果,否则,。流程图如下: 2、要求是同时采用身高和体重数据作为特征,用Fisher线性判别方法求分类器,将该分类器应用到训练和测试样本,考察训练和测试错误情况。将训练样本和求得的决策边界画到图上,同时把以往用Bayes方法求得的分类器也画到图上,比较结果的异同。说明,取男生和女生的先验概率分别为0.5,0.5。在设计贝叶斯分类器时,首先求各类样本均值向量,及,然后求各个样本的来内离散度矩阵,及,再求出样本的总类内离散度,及,根据公式求出把二维X空间投影到一维Y空间的最好的投影方向。再求出一维Y空间中各类样本均值,其中,本次实验的分界阈值我们用如下方法得到:,最后,将测试样本中的值代入,求出y,并将其与y0来进行比较来分类。根据课本对Fisher线性判别法的介绍,得到的算法流程图如下: 3、选择上述或以前实验的任意一种方法,用留一法在训练集上估计错误率,与在测试集上得到的错误率进行比较。这里我们选择Fisher线性判别法,用留一法来估计它在训练集上的错误率,并将结果与Fisher线性判别法对测试集进行判别时得到的错误率进行比较。具体流程图如下:四、实验结果及分析总结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.75 206.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、留一法测试结果如下:判别对象男生错误个数女生错误个数错误率测试样本81328%训练样本8412%分析:用留一法在训练样本机上估计错误率时,错误率小于它在测试样本集上得到的错误率,且留一法在测试样本集上女生错误个数远低于男生错误个数。五、体会这次实验,我们组用了接近三天的时间,首先,我们对题目要求进行认真分析,在确保对题目完全理解的基础上,开始一步一步分析,求解。对每个小题,及其每一问,我们都经过查书,查资料,编代码这几个步骤,仔细分析每一步算法,得出流程图。经过第一次作业的编程,本次编程我们都觉得轻松了很多,但还会出现一些细节上的错误,不过,这些在我们经过不断的调试之后都会被发现并解决。总体而言,本次试验,让我们对Parzen窗法求类条件概率密度,以及Fisher线性判别法都有了更大的了解。代码:%特征是身高,先验概率为0.5、0.5时用Parzen窗法,贝叶斯分类器。clc;clear all;FH FW=textread(C:UsersxuydDesktophomeworkFEMALE.txt,%f%f);MH MW=textread(C:UsersxuydDesktophomeworkMALE.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(C:UsersxuydDesktophomeworktest2.txt,%f%f%*s);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); 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 g0 if k=50 s(k,1)=0;%判为女生 girl=girl+1; else errorboy=errorboy+1; end elseif g0 if k0 if k=50 s(k,1)=0;%判为女生 girl=girl+1; else errorboy=errorboy+1; end elseif g0 if ky0 errorgirl=errorgirl+1; else if y(k)y0 boy=boy+1; else if y(k)y0 errorboy=errorboy+1; else bad=bad+1; end endenderrorgirlerrorboybadgirl=errorboy+girlboy=boy+errorgirlerror=errorgirl+errorboyerrorgirlrate=errorgirl/50errorboyrate=errorboy/250errorrate=error/l3%画图filename,pathname,filterindex = uigetfile(*.txt, 请读入男生训练集);fileAddrs = pathname,filename;A1 A2=textread(fileAddrs,%f%f);filename,pathname,filterindex = uigetfile(*.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,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 a1b2 b=a2;else b=b2;%b是所有人中身高最大值endif a3b4 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);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 x ; syms y ; h=x 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=x;y;yy=(w.)*vector;if yyy0 value=2;%表示样本是男生else value=1;%表示样本是女生end%功能:使用留一法求训练样本错误率A1 A2=textread(C:UsersAdministratorDesktop模式识别homeworkMALE.txt,%f%f);B1 B2=textread(C:UsersAdministratorDesktop模式识别homeworkFEMALE.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); flag=classify_CH(A(1,i),A(2,i),w,y0); if flag=1 count=count+1; endendtempB=zeros(m2,n2-1);for i=1:n2 for j=1:(i-1) tempB(:,j)=B(:,j); end for j=(i+1):n2 tempB(:,j-1)=B(:,j); end w,y0=fisher(AA,(tempB.); flag=classify_CH(B(1,i),B(2,i),w,y0); if flag=2 count=count+1; endenderror_ratio=count/(n1+n2)%使用留一法求测试样本错误率T1 T2=textread(C:UsersAdministratorDesktop模式识别homeworktest2.txt,%f%f%*s);TT=T1 T2;T=TT;k3 l3=size(T);TG=zeros(2,50);TB=zeros(2,250);for i=1:50 TG(:,i)=T(:,i);endfor j=51:l3 TB(:,j-50)=T(:,j);endm1=2;m2=2;n1=50;n2=250;tempA=zeros(m1,n1-1);count=0;for i=1:n1 for j=1:(i-1) tempA(:,j)=TG(:,j); end for j=(i+1):n1 tempA(:,j-1)=TG(:,j); end w,y0=fisher(tempA.),TB); flag=classify_CH(TG(1,i),TB(2,i),w,y0); if flag=1 count=count+1; endendtempB=zeros(m2,n2-1);for i=1:n2 for j=1:(i-1) tempB(:,j)=TB(:,j); end for j=(i+1):n2 tempB(:,j-1)=TB(:,j); end w,y0=fisher(TG,(tempB.); flag=classify_CH(TB(1,i),TB(2,i),w,y0); if flag=2 count=count+1; endenderror_ratio=count/(n1+n2)
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!