(1)以身高为例,画出男女生身高的直方图并做对比;
(2)采用最大似然估计方法,求男女生身高以及体重分布的参数;
(3)采用贝叶斯估计方法,求男女生身高以及体重分布的参数
(4)采用最小错误率贝叶斯决策,画出类别判定的决策面。并对样本的身高体重分别为(160,45)及(178,70)时进行分类判别。
这里重点是要从样本数据.xls中分别读取到男生女生的身高,并记录到相应数据中然后在直方图中分别显示男女身高频数。
本程序采用for循环方法将男生女生身高体重分别读取到man_h,man_w,woman_h,woman_w,最后用hist函数显示频数直方图。
Matlab 代码:
%--------------------------数据读取--------------------------------- clear all; [n,t,r]= xlsread('样本数据'); l=1;m=1; for k=1:149 %样本容量为149 if n(k,2)==1 man_h(l)=n(k,4); man_w(l)=n(k,5); l=l+1; else woman_h(m)=n(k,4); woman_w(m)=n(k,5); m=m+1; end end %-------------------------------------------------------------------- %------------------------男女生身高的直方图对比------------------------- figure(1) subplot(2,1,1), hist(man_h), title('男生身高直方图'),xlabel('身高/cm'),ylabel('频数'); subplot(2,1,2), hist(woman_h), title('女生身高直方图'),xlabel('身高/cm'),ylabel('频数'); %--------------------------------------------------------------------结果如下图所示:
图2.1 男生女生身高频数直方图
从图中可以看出男生女生身高近似与正态分布,可知在大容量样本空间中分布将更接近于正态分布。
假定男生女生身高体重服从正态分布N(μ,σ^2),经计算可知,在极大似然估计的条件下,对μ估计结果为样本均值,对σ^2估计结果为样本方差。
%---------采用最大似然估计方法,求男女生身高以及体重分布的参数------------ %假定男女身高体重服从正态分布,此时极大似然估计对均值的估计结果为样本均值,即 man_h_u=mean(man_h);woman_h_u=mean(woman_h); %男女身高均值 man_w_u=mean(man_w);woman_w_u=mean(woman_w); %男女体重均值 man_h_S=0;man_w_S=0;woman_h_S=0;woman_w_S=0; for m1=1:l-1 man_h_S=man_h_S+(man_h(m1)-man_h_u)^2; %男生身高与均值差值平方和 man_w_S=man_w_S+(man_w(m1)-man_w_u)^2; %男生体重与均值差值平方和 end for w1=1:m-1 woman_h_S=woman_h_S+(woman_h(w1)-woman_h_u)^2; %女生身高与均值差值平方和 woman_w_S=woman_w_S+(woman_w(w1)-woman_w_u)^2; %女生体重与均值差值平方和 end %极大似然估计对方差的估计结果为样本方差,即 sigma1=man_h_S/(l-1); sigma2=man_w_S/(l-1); sigma3=woman_h_S/(m-1); sigma4=woman_w_S/(m-1); fprintf('男生身高极大似然估计均值为%f,方差为%f\n',man_h_u,sigma1); fprintf('男生体重极大似然估计均值为%f,方差为%f\n',man_w_u,sigma2); fprintf('女生身高极大似然估计均值为%f,方差为%f\n',woman_h_u,sigma3); fprintf('女生体重极大似然估计均值为%f,方差为%f\n',woman_w_u,sigma4); %--------------------------------------------------------------------结果如下图所示:
图2.2男生女生身高体重极大似然估计
先假定概率密度服从极大似然估计量所求分布,即 p(u1)~N(u1,sigma1^2),...并设置均值u的先验分布的方差均为10:
sigmax1=10; sigmax2 =10; sigmax3 =10; sigmax4 =10;
求得男生女生身高体重贝叶斯估计。
%先假定概率密度服从极大似然估计量所求分布,即 p(u1)~N(man_h_u,sigma1)... %设置均值u的先验分布的方差均为10 sigmaX1=10; sigmaX2=10; sigmaX3=10; sigmaX4=10; %下面采用贝叶斯估计方法求男女身高集体中分布的 u=uN %由于p(u/X)~N(uN,sigmaN) %最小错误率贝叶斯估计所估计出的均值为 uN1=(sigma1*sum(man_h)+sigmaX1*man_h_u)/(sigma1*length(man_h)+sigmaX1); uN2=(sigma2*sum(man_w)+sigmaX2*man_w_u)/(sigma2*length(man_w)+sigmaX2); uN3=(sigma3*sum(woman_h)+sigmaX3*woman_h_u)/(sigma3*length(woman_h)+sigmaX3); uN4=(sigma4*sum(woman_w)+sigmaX4*woman_w_u)/(sigma4*length(woman_w)+sigmaX4); fprintf('\n\n\n'); fprintf('下面采用贝叶斯估计方法,求男女生身高以及体重分布的参数\n'); fprintf('设置均值u的先验分布的方差均为10,即sigmaX1=10,sigmaX2=10,sigmaX3=10,sigmaX4=10\n'); fprintf('最小错误率贝叶斯估计所估计出的均值为%f,%f,%f,%f\n',uN1,uN2,uN3,uN4); 结果:图2.3.1男生女生身高体重贝叶斯估计
把极大似然估计值与贝叶斯估计值对比后发现贝叶斯估计值与极大似然估计值相等,不论改变方差取值为多少,值恒等不变。
此时观察贝叶斯估计计算公式发现此时公式可以化简,最后结果就为u0,即极大似然估计值.
如下图所示:
图2.3.2 男生女生身高体重贝叶斯估计
于是改变概率密度分布,假定其分别服从正态分布
N(173,34),N(65,110),N(162,14),N(50,17),
且设置均值的先验分布的方差均为10,即
sigmax1=10; sigmax2 =10; sigmax3 =10; sigmax4 =10;
得到结果与上次有了明显差别。
估计结果如下图所示:
图2.3.3 重新设定参数后男生女生身高体重贝叶斯估计
为求决策面方程需先求协方差矩阵,主对角元素的值已经知晓,只需求次对角线元素,并且次对角线两个元素值相等,所以只需求一个即可。
得到协方差矩阵后,利用公式:
可求得决策面函数g(x),之后在使用h=ezplot(g,[120,200,20,100])画出贝叶斯估计决策面图像。
%--------------采用最小错误率贝叶斯决策,画出类别判定的决策面---------------- %协方差矩阵的计算过程,主对角元素即为sigma1,sigma2及sigma3,sigma4, %只需求次对角线元素sigma12,sigma21及sigma34,sigma43,并且次对角线元素值相等sigma12=sigma21,sigma34=sigma43 %这里系数取N C12=0;C34=0; for m2=1:length(man_h) C12=C12+(man_h(m2)-man_h_u)*(man_w(m2)-man_w_u); end for w2=1:length(woman_h) C34=C34+(woman_h(w2)-woman_h_u)*(woman_w(w2)-woman_w_u); end sigma12=C12/m2; sigma34=C34/w2; %于是所求协方差矩阵为 sigma_man=[sigma1,sigma12;sigma12,sigma2]; sigma_woman=[sigma3,sigma34;sigma34,sigma4]; %且易知先验概率为 p_man=m1/(m1+w1); p_woman=1-p_man; syms x1 x2 %定义矩阵x的两个元素 N_1=[x1-man_h_u,x2-man_w_u]; %(x-u1) N_2=[x1-woman_h_u,x2-woman_w_u];%(x-u2) %得决策面方程为 g=0.5*N_1*(sigma_man^(-1))*N_1'-0.5*N_2*(sigma_woman^(-1))*N_2'+0.5*log(det(sigma_man)/det(sigma_woman))-log(p_man/p_woman); %图表2—最小错误率贝叶斯决策类别判定决策面图,及对样本判断。 figure(2) %图表2:决策面 h=ezplot(g,[120,200,20,100]);title('决策面函数图像'),xlabel('身高/cm'),ylabel('体重/Kg'); set(h,'Color','r') %将决策面边界标为红色 hold on; %标出样本中男生身高体重数据(蓝色点) for m3=1:l-1 x=man_h(m3);y=man_w(m3);plot(x,y,'.'); end %标出样本中女生身高体重数据(洋红色点) for w3=1:m-1 x=woman_h(w3);y=woman_w(w3);plot(x,y,'m.'); end %判断样本的身高体重分别为(160,45) x=160;y=45; plot(x,y,'c*'); %判断样本的身高体重分别为(178,70) x=178;y=70; plot(x,y,'g*'); hold off; grid on; %--------------------------------------------------------------------
并在图中画出样本分布点,并用蓝色点代表男生身高体重数据,酒红色点代表女生身高体重数据,由图可见,男生数据大部分分布在决策面之外,而女生数据大部分分布于决策面之内,分类较为准确。
图 2.4.1 决策面图像
接下来判断两样本数据(160,45),(178,70)分类。
有两种方法,一种是通过决策方程直接计算。
第二种是由图像观察其相对于决策面的位置。
这里采用第二种方法,样本数据(178,70)在图中用绿色“*”表示,样本数据(160,45)用天蓝色“*”表示,可以明显看出(178,70)位于决策面之外,可以判定为男生,(160,45)位于决策面内,可以判定为女生。
判定如下图所示:
图2.4.2 判定样本身高体重为(178,70)
图2.4.3 判定样本身高体重为(160,45)