模式识别——用身高和或体重数据进行性别分类
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用身高和/或体重数据进行性别分类
1、【实验目的】
(1)掌握最小错误率Bayes 分类器的决策规则 (2)掌握Parzen 窗法 (3)掌握Fisher 线性判别方法 (4)熟练运用matlab 的相关知识。
2、【实验原理】
(1)、最小错误率Bayes 分类器的决策规则
如果在特征空间中观察到某一个(随机)向量x = ( x 1 , x 2 ,…, x d )T
,已知类别状态的先验概率为:()i P w 和类别的条件概率密度为(|)1,2,3...i P x w i c =,根据Bayes 公式得到状态的后验概率 有:1
(|)()
(|)(|)()
i i i c
j
j
j p P P p P ωωωωω==
∑x x x
基本决策规则:如果1,...,(|)max (|)i j j c
P P ωω==x x ,则i ω∈x ,将 x 归属后验概率最大的类
别 。
(2)、掌握Parzen 窗法
对于被估计点X :
其估计概率密度的基本公式(x)N
k N
N N
p V =,设区域 R N 是以 h N 为棱长的 d 维超立方体,
则立方体的体积为d
N
N V h =;
选择一个窗函数(u)ϕ,落入该立方体的样本数为x x 1
(
)i
N
N
N h i k ϕ-==
∑,点 x 的概率密度:
x x 11
1(x)(
)N
i N
N
k N
N
N V h i N
p V N
ϕ-==
=∑
其中核函数:x x 1i K(x,x )(
)i N
N
V h ϕ-=
,满足的条件:i (1) K(x,x )0≥;i (2) K(x,x )dx 1=⎰。
(3)、Fisher 线性判别方法
Fisher 线性判别分析的基本思想:通过寻找一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,并且要求变换后的一维数据具有如下性质:同类样本尽可能聚集在一起,不同类的样本尽可能地远。
Fisher 线性判别分析,就是通过给定的训练数据,确定投影方向W 和阈值y0,即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。
线性判别函数的一般形式可表示成
0)(w X W X g T
+= ,其中⎪⎪⎪⎭⎫
⎝⎛=d x x X 1 ⎪
⎪⎪⎪⎪⎭
⎫
⎝⎛=d w w w W 21 根据Fisher 选择投影方向W 的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求,用以评价投影方向W 的函数为:
2
2
2122
1~~)~~()(S S m m W J F +-= )(211
*m m S W W -=-
上面的公式是使用Fisher 准则求最佳法线向量的解,该式比较重要。
另外,该式这种
形式的运算,我们称为线性变换,其中21m m -式一个向量,1-W S 是W S 的逆矩阵,如21m m -是d 维,W S 和1-W S 都是d ×d 维,得到的*
W 也是一个d 维的向量。
向量*
W 就是使Fisher 准则函数)(W J F 达极大值的解,也就是按Fisher 准则将d 维X 空间投影到一维Y 空间的最佳投影方向,该向量*
W 的各分量值是对原d 维特征向量求加权和的权值。
以上讨论了线性判别函数加权向量W 的确定方法,并讨论了使Fisher 准则函数极大的d 维向量0W 的计算方法,但是判别函数中的另一项0W 尚未确定,一般可采用以下几种方法确定
0W 如
2
~~2
10m m W +-= 或者 m N N m N m N W ~~~2122110=++-= 或当1
)(ωp 与2)(ωp 已知时可用[]⎥⎦⎤⎢⎣⎡-+-+=2)(/)(ln 2
~~212
1210N N p p m m W ωω
当W0确定之后,则可按以下规则分类:
2
010ωω∈→->∈→->X w X W X w X W T
T
3、【实验内容及要求】
(1)、实验对象
女生的身高、体重数据 男生的身高、体重数据
----- 训练样本集
328个同学的身高、体重、性别数据 124个同学的身高、体重、性别数据
----- 测试样本集
(2)基本要求:
(1) 用和的数据作为训练样本集,建立Bayes 分类器,用测试样本数据对该分类器进行测试。
调整特征、分类器等方面的一些因素,考察它们对分类器性能的影响,从而加深对所学内容的理解和感性认识。
(试验直接设计线性分类器的方法,与基于概率密度估计的贝叶斯分离器进行比较)
(2) 试验非参数估计,体会与参数估计在适用情况、估计结果方面的异同。
4、【实验结果与分析】
(1)、Bayes分类器的实验结果与分析
A、对于 328个同学的身高、体重、性别数据的测试样本集:
A1、当先验概率为:男,女时:
身高分类错误个数: 15 身高分类错误率为: %
体重分类错误个数: 15 体重分类错误率为: %
【实验结果:】
A2、当先验概率为:男,女时:
身高分类错误个数: 19 身高分类错误率为: %体重分类错误个数: 14 体重分类错误率为: %
B、对于 124个同学的身高、体重、性别数据的测试样本集:
B1、当先验概率为:男,女时:
身高分类错误个数: 16 身高分类错误率为: %
体重分类错误个数: 21 体重分类错误率为: %
【实验结果:】
B2、当先验概率为:男,女时:
身高分类错误个数: 31 身高分类错误率为: %
体重分类错误个数: 35 体重分类错误率为: %
【结果分析:】
样本数据集中,男女先验概率为();样本数据集中,男女先验概率为()。
对比实验结果,可以发现身高的分类错误率都小于体重的分类错误率,样本集越大,各个特征对应的分类错误率就越小。
假设先验概率为()的分类错误率小于假设先验概率为()的分类集,就算假设的先验概率与实际的很相近,可是结果不准确。
程序框图
导入样本数据
计算二维正态分布参数求类条件概率密度
计算先验概率和后验概率
构成分类器
测试训练样本
结果判断
满意不满意
调整参数
Bayes分类器源程序实验代码:
clear all;
load ;
load ;
%样本的分析
figure;
for i=1:250
if(i<79)
plot(datasetf1(i,2),datasetf1(i,1),'r+'); end
plot(datasetm1(i,2),datasetm1(i,1),'k*');
hold on;
end
title('样本数据');
xlabel('体重(Kg)'),ylabel('身高(cm)');
legend('男生','女生');
fid=fopen('','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 = ;
preM = ;
error = 0;
Nerror = 0;
%身高的决策
figure;
for i = 1:124
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(pFemale<pMale)
plot(i,test(i,1),'k*');
if (test(i,3)=='f')
Nerror = Nerror +1;
end
else
plot(i,test(i,1),'r+');
if (test(i,3)=='M')
Nerror = Nerror +1;
end
end
hold on;
end;
error = Nerror/124*100;
title('身高最小错误率Bayes分类');
xlabel('测试序号'),ylabel('身高(cm)');
sprintf('%s %d %s %%s','身高分类错误个数:',Nerror,'身高分类错误率为:',error,'%') %体重决策
figure;
error = 0;
Nerror = 0;
for j= 1:124
PFweight = 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(pwFemale<pwMale)
plot(j,test(j,2),'k*');
if (test(j,3)=='f')
Nerror = Nerror +1;
end
else
plot(j,test(j,2),'r+');
if (test(j,3)=='M')
Nerror = Nerror +1;
end
end
hold on;
end;
error = Nerror/124*100;
title('体重最小错误率Bayes分类');
xlabel('测试序号'),ylabel('体重(kg)');
sprintf('%s %d %s %%s','体重分类错误个数:',Nerror,'体重分类错误率为:',error,'%')
(2)、Parzen窗法的实验结果与分析(先验概率为、对于中有78个女生和250个男生,共328个同学的身高、体重、性别数据的测试样本集的结果:
女生人数为:84;男生人数为:244;拒分人数:0;
女生错分人数:4;男生错分人数:33;总的错分人数:37;
女生分类错误率:;男生分类错误率:;总的分类错误率:;
B、对于中有40个女生和84个男生,共124个同学的身高、体重、性别数据的测试样本集:
女生人数为:41;男生人数为:83;拒分人数:0;
女生错分人数:15;男生错分人数:6;总的错分人数:21;
女生分类错误率:;男生分类错误率:;总的分类错误率:;
结果分析:
Parzen窗法的分类结果比较准确,样本集越大,错误率就越小。
Parzen窗法的源程序代码:
clc;
clear all;
[FH FW]=textread('','%f%f');
[MH MW]=textread('','%f%f');
FA=[FH FW]; MA=[MH MW];
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;
[tH tW]=textread('','%f%f%*s');
X=[tH tW];
[M N]=size(X);
s=zeros(M,1);
error=0;
errorgirl=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=;%p为属于女生的先验概率,则1-p为男生的先验概率
pp=0;
for i=1:N1
fa=[FA(i,1) FA(i,2)];
n=1/sqrt(2*pi)*exp*abs((x-fa)*(x-fa)')/(hn1^2)); pp=pp+n;
end
p1=1/VN1*pp';
y1=1/N1*p1;%是女生的条件概率密度函数
qq=0;
for j=1:N2
ma=[MA(j,1) MA(j,2)];
m=1/sqrt(2*pi)*exp*abs((x-ma)*(x-ma)')/(hn2^2)); 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
else if g<0
if k<=50
errorgirl=errorgirl+1;
else
s(k,1)=1;%判为男生
boy=boy+1;
end
else
s(k,1)=-2;%不能判别是指等于0时的情况
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/M。