资源描述
院 系: 计算机科学学院 专 业: 智能科学与技术 年 级: 2012 级 课程名称: 模式识别 组 号: 13组 组 员: 徐灿 马卿 指导教师: 孙阳光老师 2014年12月30日年级2012级学号20122138552012213875专业智能科学与技术姓名徐灿马卿实验时间2014.10.8实验地点9#206实验名称用身高和/或体重数据进行性别分类的实验实验类型设计型综合型创新型实验目的或要求基本要求: 用PR_Exp1_Data_1.TXT 和PR_Exp1_Data_2.TXT 的数据作为训练样本集,建立Bayes 分类器,用PR_Exp1_Data_3.TXT测试样本数据对该分类器进行测试。调整特征、分类器等方面的一些因素,考察它们对分类器性能的影响,从而加深对所学内容的理解和感性认识。 具体做法: 1 应用单个特征进行实验:以(a)身高或者(b)体重数据作为特征,在正态 分布假设下利用最大似然法或者贝叶斯估计法估计分布密度参数(只利用训 练数据估计密度),建立最小错误率Bayes 分类器,写出得到的决策规则,将 该分类器应用到测试样本,考察测试错误情况。在分类器设计时可以考察采 用不同先验概率(如0.5 对0.5, 0.75 对0.25, 0.9 对0.1 等)进行实验,考察对 决策规则和错误率的影响。 2 应用两个特征进行实验:同时采用身高和体重数据作为特征,分别假设二者 相关或不相关,在正态分布假设下估计概率密度,建立最小错误率Bayes 分 类器,写出得到的决策规则,将该分类器应用到训练/测试样本,考察训练/ 测试错误情况。比较相关假设和不相关假设下结果的差异。在分类器设计时 可以考察采用不同先验概率(如0.5 vs. 0.5, 0.75 vs. 0.25, 0.9 vs. 0.1 等)进行 实验,考察对决策和错误率的影响。 3 自行给出一个决策表,采用最小风险的Bayes 决策重复上面的某个或全部实 验。 需要用到的数据文件: 训练和测试样本集: PR_Exp1_Data_1.txt 124 个同学的身高、体重、性别数据(40 个女生、84 个男生) PR_Exp1_Data_2.txt 328 个同学的身高、体重、性别数据(78 个女生、250 个男生) PR_Exp1_Data_3.txt 90 个同学的身高、体重、性别数据(16 个女生、74 个男生) 实验代码(身高或者体重)clear all;load datasetf1.txt; %读入样本数据男生load datasetm1.txt; %读入样本数据女生%样本的分析figure;for i=1:250 if(i79) plot(datasetf1(i,2),datasetf1(i,1),r+); end plot(datasetm1(i,2),datasetm1(i,1),k*); hold on;endtitle(样本数据);xlabel(体重(Kg),ylabel(身高(cm);legend(男生,女生);%打开文件(测试文件和训练文件)此处选择文件为第三组测试文件fid=fopen(dataset3.txt,r); test1=fscanf(fid,%f %f %s,3,inf);%文件读取格式test=test1;fclose(fid);Fmean = mean(datasetf1);Mmean = mean(datasetm1);Fvar = std(datasetf1);Mvar = std(datasetm1);preF = 0.5; %先验概率的设定和修改preM = 0.5;error = 0;Nerror = 0; %错误个数和错误率的设定%身高的决策sprintf(%s,样本数为90时P0.50.5:) %测试或者训练样本的个数figure;for i = 1:90 %测试或者训练样本的个数PFheight = normpdf(test(i,1),Fmean(1,1),Fvar(1,1) ; %得到男生身高的数据PMheight = normpdf(test(i,1),Mmean(1,1),Mvar(1,1) ; %得到女生身高的数据pFemale = preF*PFheight;pMale = preM*PMheight; if(pFemalepMale) plot(i,test(i,1),k*); if (test(i,3)=0) Nerror = Nerror +1; end 实验代码(身高或者体重)else plot(I,test(I,1),r+); if (test(I,3)=1) Nerror = Nerror +1; end end hold on;end;error = Nerror/90*100; %根据样本的选择来确定除以的样本个数title(身高最小错误率Bayes分类);xlabel(测试序号),ylabel(身高(cm);sprintf(%s %d %s %0.2f%s,身高分类错误个数:,Nerror,身高分类错误率为:,error,%)%体重决策figure;error = 0;Nerror = 0;for j= 1:90Pfweight = normpdf(test(j,2),Fmean(1,2),Fvar(1,2) ; %得到男生体重的数据Pmweight = normpdf(test(j,2),Mmean(1,2),Mvar(1,2) ; %得到女生体重的数据pwFemale = preF*Pfweight;pwMale = preM*Pmweight;if(pwFemalepwMale) plot(j,test(j,2),k*); if (test(j,3)=0) Nerror = Nerror +1; end else plot(j,test(j,2),r+); if (test(j,3)=1) Nerror = Nerror +1; end end hold on;end;error = Nerror/90*100; %根据样本的选择来确定除以的样本个数title(体重最小错误率Bayes分类);xlabel(测试序号),ylabel(体重(kg);sprintf(%s %d %s %0.2f%s,体重分类错误个数:,Nerror,体重分类错误率为:,error,%)实验代码(身高和体重的乘积)%以身高乘以体重计算(男生的身高乘以体重比值较大,女生较小)clear all;load datasetf1.txt; load datasetm1.txt;fid=fopen(dataset3.txt,r); %测试和训练样本test1=fscanf(fid,%f %f %s,3,inf);test=test1;fclose(fid);Fmean = mean(datasetf1); %求每一列的均值Mmean = mean(datasetm1);Fvar = std(datasetf1);%算出每一列的标准偏差。Mvar = std(datasetm1);preF = 0.5; %先验概率的设定,根据先验概率的不同修改preM = 0.5;error = 0;Nerror = 0;%身高的决策sprintf(%s,样本数为90时P0.50.5:) %测试或者训练样本的个数figure;for i = 1:90 %测试或者训练样本的个数PFheight = normpdf(test(i,1),Fmean(1,1),Fvar(1,1)*normpdf(test(i,2),Fmean(1,2),Fvar(1,2) ;%正态分布密度函数PMheight = normpdf(test(i,1),Mmean(1,1),Mvar(1,1)*normpdf(test(i,2),Mmean(1,2),Mvar(1,2) ;pFemale = preF*PFheight;pMale = preM*PMheight; if(pFemale0?X女生2实验结果分析样本分析的图像(此处把数据改成两类,男生的单独为一个文件,女生的单独为一个文件)P0.5-P0.5时328个样本的错误率分析P0.5-P0.5时124个样本的错误率分析P0.75-P0.25时328个样本的错误率分析P0.75-P0.25时124个样本的错误率分析P0.9-P0.1时328个样本的错误率分析P0.9-P0.1时124个样本的错误率分析表格 1身高和体重单独下各样本下各种概率的错误率分析样本概率为P0.5-P0.5误差概率概率P 0.75P0.25误差概率概率P 0.9P0.1误差概率328个样本身高错误个数: 33错误率为: 10.06%错误个数: 60错误率为: 18.29%错误个数: 81 错误率为: 24.70%体重错误个数: 45错误率为: 13.72%错误个数: 68错误率为: 20.73%错误个数: 89 错误率为: 27.13%124个样本身高错误个数: 16错误率为: 12.90%错误个数: 31错误率为: 25.00%错误个数: 34错误率为: 27.42%体重错误个数: 21错误率为: 16.94%错误个数: 35错误率为: 28.23%错误个数: 37错误率为: 29.84%根据表格内容,选择P0.5P0.5时的概率对样本3进行分析,得到的结果以身高乘以体重的算法来计算错误率分类时的结果P0.5-P0.5时328个样本的错误率分析P0.5-P0.5时124个样本的错误率分析P0.75-P0.25时328个样本的错误率分析 P0.75-P0.25时124个样本的错误率分析P0.9-P0.1时328个样本的错误率分析P0.9-P0.1时124个样本的错误率分析表格 2身高和体重乘积下各样本下各种概率的错误率分析样本概率为P0.5P0.5时的身高体重错误率概率为P0.75P0.25时的身高体重错误率概率为P0.9P0.1时的身高体重错误率样本为328时分类错误个数: 30 分类错误率为: 9.15%分类错误个数: 37 分类错误率为: 11.28%分类错误个数: 49 分类错误率为: 14.94%样本为124时分类错误个数: 17 分类错误率为: 13.71%分类错误个数: 19分类错误率为: 15.32%分类错误个数: 23分类错误率为: 18.55%根据表格内容,选择P0.5P0.5时的概率对样本3进行分析,得到的结果 年级2012级学号20122138552012213875专业智能科学与技术姓名徐灿马卿实验时间2014.11.8实验地点9#206实验名称用身高/体重数据进行性别分类的实验(二)实验类型设计型综合型创新型实验目的或要求基本要求:_试验利用Fisher线性判别方法获取分类器。_试验直接设计线性分类器的方法,与基于概率密度估计的贝叶斯分离器进行比较。具体做法:1同时采用身高和体重数据作为特征,用Fisher线性判别方法求分类器,将该分类器应用到训练和测试样本,考察训练和测试错误情况。2将训练样本和求得的决策边界画到图上,同时把以往用Bayes方法求得的分类器也画到图上,比较结果的异同。需要用到的数据文件:训练样本集:PR_Exp2_Data_1.txtPR_Exp2_Data_2.txtPR_Exp2_Data_3.txtPR_Exp2_Data_4.txtPR_Exp2_Data_5.txtPR_Exp2_Data_6.txt测试样本集:实验(一)中的样本集。要求:参见实验(一)。Fisher线性判别函数%用fisher线性判别函数来判断clcclear allfilename,pathname,filterindex = uigetfile(FEMALE.txt, 请读入男生训练集);fileAddrs = pathname,filename;A1 A2=textread(fileAddrs,%f%f);filename,pathname,filterindex = uigetfile(MALE.txt, 请读入女生训练集);fileAddrs = pathname,filename;B1 B2=textread(fileAddrs,%f%f);AA=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;Fisher线性判别函数(样本数为90时的判断和错误率分析)%以测试数据为90的样本为例子filename,pathname,filterindex = uigetfile(dataset3.txt, 请读入测试集);fileAddrs = pathname,filename;T1 T2=textread(fileAddrs,%f%f%*s);TT=T1 T2;T=TT;k3 l3=size(T);for k=1:16 y(k)=wT*T(:,k); if y(k)y0 girl=girl+1; end endendfor k=16:90 y(k)=wT*T(:,k); if y(k)y0 errorboy=errorboy+1; bad=bad+1; end endenderrorgirlerrorboybadgirl=errorboy+girlboy=boy+errorgirlerror=errorgirl+errorboyerrorgirlrate=errorgirl/16errorboyrate=errorboy/74errorrate=error/90调用函数%用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);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)*(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);%function value=classify_CH(x,y,w,y0)%程序:模式识别%功能:应用Fisher准则判断一个身高体重二维数据的性别vector=x;y;yy=(w.)*vector;if yyy0 value=2;%表示样本是男生else value=1;%表示样本是女生endFisher分类器画图%fisher分类器画图filename,pathname,filterindex = uigetfile(datasetf1*.txt, 请读入男生训练集);fileAddrs = pathname,filename;A1 A2=textread(fileAddrs,%f%f);filename,pathname,filterindex = uigetfile(datasetm1*.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是所有人中身高最大值endFisher分类器画图if 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=B;MA=A;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方法求分界线clcclear all;load FEMALE.txt;load MALE.txt;FEMALE=FEMALE; %特征为列向量MALE=MALE;fid=fopen(dataset3.txt,r); test1=fscanf(fid,%f %f %s,3,inf);test=test1;fclose(fid);FS=0 0;0 0;MS=0 0;0 0;Fmean = mean(FEMALE);Mmean = mean(MALE);figure;for i=1:16FS1=(FEMALE(:,i)-Fmean)*(FEMALE(:,i)-Fmean);MS2=(MALE(:,i)-Mmean)*(MALE(:,i)-Mmean);FS = FS1+FS;MS = MS2+MSend; SW=FS+MS;Sb=(Fmean-Mmean)*(Fmean-Mmean);w=inv(SW)*(Fmean-Mmean);mu1=w*Fmean;mu2=w*Mmean;b=(mu1+mu2)/2;for i=1:90 if (test(i,3)=102)plot(test(i,1),test(i,2),r+); end; if (test(i,3)=109) plot(test(i,1),test(i,2),k*); end; hold on;end;x=test(:,1); y=(b-w(1,1)*x)/w(2,1);plot(x,y);title(Fisher方法求分界线);xlabel(身高(cm),ylabel(体重(kg)Bayes(贝叶斯)判别性别时的概率分类线clcclear all;X=120:0.1:200pw1=0.5;pw2=0.5sample1=textread(FEMALE.txt)samplew1=zeros(1,length(sample1(:,1);u1=mean(sample1(:,1);m1=std(sample1(:,1);y1=normpdf(X,u1,m1);figure(1);subplot(2,1,1);plot(X,y1);title(身高条件先验概率);hold onsample2=textread(MALE.txt)samplew2=zeros(1,length(sample2(:,1)u2=mean(sample2(:,1);m2=std(sample2(:,1);y2=normpdf(X,u2,m2);subplot(2,1,2);plot(X,y2);D=(pw1*y1+pw2*y2)E1=pw1*y1;E2=pw2*y2P1=E1./DP2=E2./Dfigure(2)subplot(2,1,1);plot(X,P1);title(身高条件后验概率)subplot(2,1,2);plot(X,P2);title(最小风险bayes概率分布曲线);figure(3)subplot(3,1,1);plot(X,E1)subplot(3,1,2);plot(X,E2)subplot(3,1,3);plot(X,E1,X,E2)sample=textread(all sample.txt)result=bayes(sample1(:,1),sample2(:,1),pw1,pw2)实验原理实验思路1.得到fisher函数和分界线选择合适的样本和对应的先验概率,然后运用到测试样本中。(1) 先选择相应的概率分布P0.5p0.5对328个样本进行分析(2) 先选择相应的概率分布P0.5p0.5对90个样本进行分析(3) 得到fisher分类线2.将bayes方法得到的概率分布曲线和fisher分界线放在一起比较,观察其中的容错分析。将fisher分界线和bayes概率分布线放在一起比较,从概率分布曲线得到概率分布的重合部分看出易错的部分。代码来源:Fisher的第一个分类器是在网上找的,fisher匪类起的第二个程序是自己改编的,里面没有女生画出来的那一个分界线。Bayes的男生女生概率分布曲线分类器是在网上搜索的代码。求各类样本均值向量求类内离散度矩阵用公式求最好的变换向量二维空间向一维y空间投影一维空间样本均值求取阈值决策判断计算各类样本的错误率 导入两个训练样本集依次将女生样本集中的每一个样本当做测试集,余下的所有样本做训练集用Fisher法判断被选出来的样本,若判断错误,计数一次将男生按照以上方法再进行判别,计数,得到错误率再将以上方法用以测试集,得到错误率实验结果分析根据样本得到的fisher分界线样本为328时的错误率分析:样本为90时的错误率分析 身高和体重相关时的bayes(贝叶斯)判别性别时的分类线身高条件先验概率分布曲线身高条件后验概率分布曲线最小风险时bayes分类器概率分布曲线根据样本得到的fisher分界线最小风险时bayes分类器概率分布曲线结果分析;由两个图可以看出,由fisher分类法得到的错误率比bayes的错误率低很多,但是当样本的数据分布不均时,使用fisher分类法得到的错误率会比bayes分类法得到的错误率高。所以可以根据合适的样本数据选择两种方法进行比较,选出比较合适的方法。年级2012级学号20122138552012213875专业智能科学与技术姓名徐灿马卿实验时间2014.11.8实验地点9#206实验名称用身高/体重数据进行性别分类的实验(三)实验类型设计型综合型创新型实验目的或要求 基本要求: 用*_FAMALE_*.TXT、*_MALE_*.TXT的数据作为本次实验使用的样本集,利用C 均值和分级聚类方法对样本集进行聚类分析,对结果进行分析,从而加深对所学内容的理解和感性认识。 具体做法: 1 把实验数据文件中任意两个*_FAMALE_*.TXT 和*_MALE_*.TXT 两个文件合并成一个(实验报告中应指明具体是采用那个数据文件进行的实验),同时采用身高和体重数据作为特征,设类别数为2,利用C 均值聚类方法对数据进行聚类,并将聚类结果表示在二维平面上。尝试不同初始值对此数据集是否会造成不同的结果。 2 (选做)对1 中的数据利用C 均值聚类方法分别进行三类、四类、五类聚类,画出聚类指标与类别数之间的关系曲线,探讨是否可以确定出合理的类别数目。 3 (选做)利用某两个*_FAMALE_*.TXT 和*_MALE_*.TXT的文件数据,与把全部数据文件相应合并在一起,重复上述各实验,考察结果是否有变化,对观察到的现象进行分析,写出体会。 需要用到的数据文件: PR_Exp3_Data_FAMALE_1.txt PR_Exp3_Data_MALE_2.txt PR_Exp3_Data_FAMALE_3.txt PR_Exp3_Data_MALE_4.txtPR_Exp3_Data_FAMALE_5.txt PR_Exp3_Data_MALE_5.txt实验原理clc;clear all;FH FW=textread(FEMALE.txt,%f %f); %读取合并的数据MH MW=textread(MALE.txt,%f %f);FA=FH FW;FA=FA;MA=MH MW;MA=MA;for k=1:134 %数据里面男生人数 NT(:,k)=FA(:,k)end for k=135:542 %数据里面女生人数 NT(:,k)=MA(:,k-134); end z1=NT(:,1);z2=NT(:,135); for k=1:542 %数据里面总人数 a=z1,b=z2 G1=zeros(2,100);G2=zeros(2,100); for i=1:542 d1=sqrt(NT(1,i)-z1(1,1)2+(NT(2,i)-z1(2,1)2); d2=sqrt(NT(1,i)-z2(1,1)2+(NT(2,i)-z2(2,1)2); if d1d2 G1(:,i)=NT(:,i); else G2(:,i)=NT(:,i); end end G1(:,find(sum(abs(G1),1)=0)=; G2(:,find(sum(abs(G2),1)=0)=; z1=mean(G1,2); z2=mean(G2,2);if isequal(a,z1)=1&isequal(z2,b)=1 break end end z1,z2,G1,G2,size(G1,2),size(G2,2)for i=1:size(G1,2) %标记男生的点x=G1(1,i);y=G1(2,i);plot(x,y,m*);hold on end for i=1:size(G2,2) %标记女生的点x=G2(1,i);y=G2(2,i);plot(x,y,co);hold on endplot(z1(1,1),z1(2,1),B+) %标记男生的均值类聚hold onplot(z2(1,1),z2(2,1),B+) %标记女生的均值类聚hold on实验原理代码来源:C 均值聚类的代码是在网上搜索的,然后所有的代码都是根据源代码更改的。后面的样本整合是把所有的样本整合在一起分成男生女生两类。自己画了一个关于男生女生的身高体重的关系图,然后整体得到的均值点在关系线上。实验结果分析心得体会使用数据一二得到的C值分聚类 (165.2348,53.5303) (176.5255,70.1633)使用数据三四得到的C值分聚类(162.50,51.6979)(175.3158,66.7039)使用数据五六得到的C值分聚类(168.3023,54.9651)(177.4894,70.7021)使用6组数据得到的C值分聚类使用数据123456合并得到的C值分聚类( 165.7438,53.8512)(176.6767, 70.0783)实验三第3小题分析额为接近平均水平。取值样本越多时,整体的聚类点越为接近平均水平。,组数据表现出身高与体重呈现一定的关系,当所有的样本聚集起来之后,可以发现最后得到的聚类点在前面的三在这个关系之上更是前面三个样本的聚类点的平均点。所以当样本数据越庞大时,越能得到正确的结果。成绩评定教师签名: 年 月 日心得体会成绩评定教师签名: 年 月 日心得体会成绩评定教师签名: 年 月 日
展开阅读全文