用身高和体重数据进行性别分类的实验报告.docx
- 文档编号:7167038
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:22
- 大小:314.63KB
用身高和体重数据进行性别分类的实验报告.docx
《用身高和体重数据进行性别分类的实验报告.docx》由会员分享,可在线阅读,更多相关《用身高和体重数据进行性别分类的实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
用身高和体重数据进行性别分类的实验报告
用身高和体重数据进行性别分类的实验报告
部门:
xxx
时间:
xxx
整理范文,仅供参考,可下载自行编辑
用身高和体重数据进行性别分类的实验报告<二)
一、基本要求
1、实验非参数估计,体会与参数估计在适用情况、估计结果方面的异同。
2、实验直接设计线性分类器的方法,与基于概率密度估计的贝叶斯分类器进行比较。
3、体会留一法估计错误率的方法和结果。
二、具体做法
1、在第一次实验中,挑选一次用身高作为特征,并且先验概率分别为男生0.5,女生0.5的情况。
改用Parzen窗法或者kn近邻法估计概率密度函数,得出贝叶斯分类器,对测试样本进行测试,比较与参数估计基础上得到的分类器和分类性能的差别。
b5E2RGbCAP
2、同时采用身高和体重数据作为特征,用Fisher线性判别方法求分类器,将该分类器应用到训练和测试样本,考察训练和测试错误情况。
将训练样本和求得的决策边界画到图上,同时把以往用Bayes方法求得的分类器也画到图上,比较结果的异同。
p1EanqFDPw
3、选择上述或以前实验的任意一种方法,用留一法在训练集上估计错误率,与在测试集上得到的错误率进行比较。
DXDiTa9E3d
三、原理简述及程序框图
1、挑选身高(身高与体重>为特征,选择先验概率为男生0.5女生0.5的一组用Parzen窗法来求概率密度函数,再用贝叶斯分类器进行分类。
RTCrpUDGiT
以身高为例
本次实验我们组选用的是正态函数窗,即
,窗宽为
, 因为区域是一维的,所以体积为 。 Parzen公式为 。 5PCzVD7HxA 故女生的条件概率密度为 男生的条件概率密度为 根据贝叶斯决策规则 知 如果 ,否则, 。 流程图如下: 2、要求是同时采用身高和体重数据作为特征,用Fisher线性判别方法求分类器,将该分类器应用到训练和测试样本,考察训练和测试错误情况。 将训练样本和求得的决策边界画到图上,同时把以往用Bayes方法求得的分类器也画到图上,比较结果的异同。 jLBHrnAILg 说明,取男生和女生的先验概率分别为0.5,0.5。 在设计贝叶斯分类器时,首先求各类样本均值向量,及 ,然后求各个样本的来内离散度矩阵,及 ,再求出样本的总类内离散度,及 ,根据公式 求出把二维X空间投影到一维Y空间的最好的投影方向。 再求出一维Y空间中各类样本均值 ,其中 本次实验的分界阈值我们用如下方法得到: 最后,将测试样本中的值代入,求出y,并将其与y0来进行比较来分类。 xHAQX74J0X 根据课本对Fisher线性判别法的介绍,得到的算法流程图如下: 3、选择上述或以前实验的任意一种方法,用留一法在训练集上估计错误率,与在测试集上得到的错误率进行比较。 LDAYtRyKfE 这里我们选择Fisher线性判别法,用留一法来估计它在训练集上的错误率,并将结果与Fisher线性判别法对测试集进行判别时得到的错误率进行比较。 Zzz6ZB2Ltk 具体流程图如下: 四、实验结果及分析总结 1、得到结果如下表 以身高作为特征 h=4 估计方法 女生先验概率 男生先验概率 男生错误个数 女生错误个数 总错误 男生错误率 女生错误率 总错误率 Parzen窗法 0.25 0.75 22 8 30 16% 8.8% 10% 0.5 0.5 34 4 38 13.6% 8% 12.67% 0.75 0.25 80 2 82 32% 4% 27.33% 最大似然Bayes 0.25 0.75 20 6.667% 0.5 0.5 27 9% 0.75 0.25 60 20% 以身高与体重作为特征 h=7 估计方法 女生先验概率 男生先验概率 男生错误个数 女生错误个数 总错误 男生错误率 女生错误率 总错误率 Parzen窗法 0.25 0.75 7 22 29 14% 8.8% 9.67% 0.5 0.5 38 2 40 15.2% 4% 13.33% 0.75 0.25 2 46 48 18.4% 4% 16% 最大似然Bayes 0.25 0.75 8 6 14 3.2% 12% 4.67% 0.5 0.5 29 3 32 11.6% 6% 10.67% 0.75 0.2 59 1 60 23.6% 2% 20% 分析: 通过比较可知,在用最大似然估计这种参数估计方法和Parzen这种非参数估计方法来进行分类时,最大似然估计判别的错误率低。 dvzfvkwMI1 2、得到结果如下 <1)、用Fisher线性判别方法求分类器,将分类器应用到训练和测试样本上,比较其错误率 判别 对象 男生错误个数 女生错误个数 总错误 男生错误率 女生错误率 总错误率 测试样本 27 2 29 10.8% 4% 9.67% 训练样本 8 4 12 16% 8% 12% 分析: 用训练样本得到的分类器测试测试样本时错误率低,测试结果较好,但测试训练样本时,其错误率较高,测试结果不好。 rqyn14ZNXI <2)、将训练样本和求得的决策边界画到图上 先验概略为0.5,0.5 从图中我们可以直观的比较出对训练样本Fisher判别比最大似然Bayes判别效果更好。 3、留一法测试结果如下: 判别 对象 男生错误个数 女生错误个数 错误率 测试样本 81 3 28% 训练样本 8 4 12% 分析: 用留一法在训练样本机上估计错误率时,错误率小于它在测试样本集上得到的错误率,且留一法在测试样本集上女生错误个数远低于男生错误个数。 EmxvxOtOco 五、体会 这次实验,我们组用了接近三天的时间,首先,我们对题目要求进行认真分析,在确保对题目完全理解的基础上,开始一步一步分析,求解。 对每个小题,及其每一问,我们都经过查书,查资料,编代码这几个步骤,仔细分析每一步算法,得出流程图。 经过第一次作业的编程,本次编程我们都觉得轻松了很多,但还会出现一些细节上的错误,不过,这些在我们经过不断的调试之后都会被发现并解决。 总体而言,本次实验,让我们对Parzen窗法求类条件概率密度,以及Fisher线性判别法都有了更大的了解。 SixE2yXPq5 代码: %特征是身高,先验概率为0.5、0.5时用Parzen窗法,贝叶斯分类器。 clc。 clearall。 [FHFW]=textread('C: \Users\xuyd\Desktop\homework\FEMALE.txt','%f%f'>。 6ewMyirQFL [MHMW]=textread('C: \Users\xuyd\Desktop\homework\MALE.txt','%f%f'>。 kavU42VRUs FA=[FHFW]。 MA=[MHMW]。 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>>。 [tHtW]=textread('C: \Users\xuyd\Desktop\homework\test2.txt','%f%f%*s'>。 y6v3ALoS89 X=[tHtW]。 [MN]=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。 fork=1: M%测试集 x=A(k>。 p=0.5。 %p为属于女生的先验概率,则1-p为男生的先验概率 fori=1: N1 pp(i>=1/sqrt(2*pi>*exp(-0.5*(abs(x-FA(i>>>^2/(hn1^2>>。 %pp end p1=sum(1/VN1*pp'>。 y1=1/N1*p1。 %是女生的条件概率密度函数 forj=1: N2 qq(j>=1/sqrt(2*pi>*exp(-0.5*(abs(x-MA(j>>>^2/(hn2^2>>。 0YujCfmUCw end q1=sum(1/VN2*qq'>。 y2=1/N2*q1。 %男生的概率密度函数,即其条件概率 g=p*y1-(1-p>*y2。 %g为判别函数 ifg>0 ifk<=50 s(k,1>=0。 %判为女生 girl=girl+1。 else errorboy=errorboy+1。 end elseifg<0 ifk<=50 errorgirl=errorgirl+1。 else s(k,1>=1。 %判为男生 boy=boy+1。 end else s(k,1>=-2。 %不能判别是指等于0时的情况 bad=bad+1。 end end errorgirl errorboy bad girl=errorboy+girl boy=boy+errorgirl error=errorgirl+errorboy errorgirlrate=errorgirl/50 errorboyrate=errorboy/250 errorrate=error/M %特征是身高与体重,先验概率为0.5、0.5时用Parzen窗法,贝叶斯分类器。 clc。 clearall。 [FHFW]=textread('C: \Users\xuyd\Desktop\homework\FEMALE.txt','%f%f'>。 eUts8ZQVRd [MHMW]=textread('C: \Users\xuyd\Desktop\homework\MALE.txt','%f%f'>。 sQsAEJkW5T FA=[FHFW]。 MA=[MHMW]。 N1=max(size(FA>>。 h1=7。 hn1=h1/(sqrt(N1>>。 VN1=hn1^2。 N2=max(size(MA>>。 h2=7。 hn2=h2/(sqrt(N2>>。 VN2=hn2^2。 [tHtW]=textread('C: \Users\xuyd\Desktop\homework\test2.txt','%f%f%*s'>。 GMsIasNXkA X=[tHtW]。 [MN]=size(X>。 s=zeros(M,1>。 error=0。 errorgirl=0。 errorboy=0。 errorrate=0。 errorgirlrate=0。 errorboyrate=0。 girl=0。 boy=0。 bad=0。 fork=1: M A=[X(k,1>X(k,2>]。 x=A。 p=0.5。 %p为属于女生的先验概率,则1-p为男生的先验概率 pp=0。 fori=1: N1 fa=[FA(i,1>FA(i,2>]。 n=1/sqrt(2*pi>*exp(-0.5*abs((x-fa>*(x-fa>'>/(hn1^2>>。 TIrRGchYzg pp=pp+n。 end p1=1/VN1*pp'。 y1=1/N1*p1。 %是女生的条件概率密度函数 qq=0。 forj=1: N2 ma=[MA(j,1>MA(j,2>]。 m=1/sqrt(2*pi>*exp(-0.5*abs((x-ma>*(x-ma>'>/(hn2^2>>。 7EqZcWLZNX qq=m+qq。 end q1=sum(1/VN2*qq'>。 y2=1/N2*q1。 %男生的概率密度函数,即其条件概率 g=p*y1-(1-p>*y2。 %g为判别函数 ifg>0 ifk<=50 s(k,1>=0。 %判为女生 girl=girl+1。 else errorboy=errorboy+1。 end elseifg<0 ifk<=50 errorgirl=errorgirl+1。 else s(k,1>=1。 %判为男生 boy=boy+1。 end else s(k,1>=-2。 %不能判别是指等于0时的情况 bad=bad+1。 end end errorgirl errorboy bad girl=errorboy+girl boy=boy+errorgirl error=errorgirl+errorboy errorgirlrate=errorgirl/50 errorboyrate=errorboy/250 errorrate=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/l1。 %男生均值向量 M2=sum(BB>。 M2=M2'。 M2=M2/l2。 %女生均值向量 S1=zeros(k1,k1>。 %建立矩阵 S2=zeros(k2,k2>。 fori=1: l1 S1=S1+(A(: i>-M1>*((A(: i>-M1>.'>。 %男生的类内离散度矩阵 end fori=1: l2 S2=S2+(B(: i>-M2>*((B(: i>-M2>.'>。 %女生的类内离散度矩阵 end Sw=0.5*S1+0.5*S2。 %总类内离散度矩阵,先验概率0.5 w=inv(Sw>*(M1-M2>。 %两列 wT=w'。 %wT就是使Fisher准则函数JF fori=1: l1 Y1(i>=wT(1,1>*A(1,i>+wT(1,2>*A(2,i>。 %求出二维男生样本集映射到一维时的量zvpgeqJ1hk end fori=1: l2 Y2(i>=wT(1,1>*B(1,i>+wT(1,2>*B(2,i>。 %求出二维女生样本集映射到一维时的量NrpoJac3v1 end m1=sum(Y1>/l1。 m2=sum(Y2>/l2。 y0=(l1*m1+l2*m2>/(l1+l2>。 % %用fisher线性判别函数来判断 clc clearall [filename,pathname,filterindex]=uigetfile('*.txt','请读入男生训练集'>。 1nowfTG4KI fileAddrs=[pathname,filename]。 [A1A2]=textread(fileAddrs,'%f%f'>。 [filename,pathname,filterindex]=uigetfile('*.txt','请读入女生训练集'>。 fjnFLDa5Zo fileAddrs=[pathname,filename]。 [B1B2]=textread(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。 errorboyrate=0。 errorrate=0。 [filename,pathname,filterindex]=uigetfile('*.txt','请读入测试集'>。 tfnNhnE6e5 fileAddrs=[pathname,filename]。 [T1T2]=textread(fileAddrs,'%f%f%*s'>。 TT=[T1T2]。 T=TT'。 [k3l3]=size(T>。 fork=1: 50 y(k>=wT*T(: k>。 ify(k>>y0 errorgirl=errorgirl+1。 elseify(k> girl=girl+1。 else bad=bad+1。 end end end fork=51: 300 y(k>=wT*T(: k>。 ify(k>>y0 boy=boy+1。 elseify(k> errorboy=errorboy+1。 else bad=bad+1。 end end end errorgirl errorboy bad girl=errorboy+girl boy=boy+errorgirl error=errorgirl+errorboy errorgirlrate=errorgirl/50 errorboyrate=errorboy/250 errorrate=error/l3 %画图 [filename,pathname,filterindex]=uigetfile('*.txt','请读入男生训练集'>。 HbmVN777sL fileAddrs=[pathname,filename]。 [A1A2]=textread(fileAddrs,'%f%f'>。 [filename,pathname,filterindex]=uigetfile('*.txt','请读入女生训练集'>。 V7l4jRB8Hs fileAddrs=[pathname,filename]。 [B1B2]=textread(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 x=A(1,i>。 y=A(2,i>。 %x是身高,y是体重 plot(x,y,'R.'>。 holdon end fori=1: l2 x=B(1,i>。 y=B(2,i>。 plot(x,y,'G.'>。 holdon end a1=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,: >>。 %女生体重最大值 ifa1 a=a1。 else a=b1。 %a是所有人中身高最小值 end ifa2>b2 b=a2。 else b=b2。 %b是所有人中身高最大值 end ifa3 c=a3。 else c=b3。 %c是所有人中体重最小值 end ifa4>b4 d=a4。 else d=b4。 %d为所有人中体重最大值 end x=a: 0.01: b。 y=(y0-x*w(1,1>>/w(2,1>。 plot(x,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>。 83lcPA59W9 w20=-1/2*Ave2'*inv(b>*Ave2-1/2*log(det(b>>+log(P2>。 mZkklkzaaP symsx。 symsy。 h=[xy]'。 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。 ifyy>y0 value=2。 %表示样本是男生 else value=1。 %表示样本是女生 end %功能: 使用留一法求训练样本错误率 [A1A2]=textread('C: \Users\Administrator\Desktop\模式识别\homework\MALE.txt','%f%f'>。 AVktR43bpw [B1B2]=textread('C: \Users\Administrator\Desktop\模式识别\homework\FEMALE.txt','%f%f'>。 ORjBnOwcEd 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: n1 forj=1: (i-1> tempA(: j>=A(: j>。 end forj=(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>。 ifflag==1 count=count+1。 end end tempB=zeros(m2,n2-1>。 fori=1: n2 forj=1: (i-1> tempB(: j>=B(: j>。 end forj=(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>。 ifflag==2 count=count+1。 end end error_ratio=count/(n1+n2> %使用留一法求测试样本
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 身高 体重 数据 进行 性别 分类 实验 报告