实验三 最小错误率的贝叶斯分类

一、实验说明
贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。也就是说,贝叶斯分类器是最小错误率意义上的优化,它遵循“多数占优”这一基本原则。

二、 实验内容
利用贝叶斯后验概率确定分类:
实验三 最小错误率的贝叶斯分类

设有19人进行体检,结果如下表。但事后发现4人忘了写性别,试问,这4人是男是女?
实验三 最小错误率的贝叶斯分类
C=2。男—1类,女—2类。

三、贝叶斯分类器
一个贝叶斯分类器可以简单自然地表示成以上网络结构。贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。在具有模式的完整统计知识条件下,按照贝叶斯决策理论进行设计的一种最优分类器。分类器是对每一个输入模式赋予一个类别名称的软件或硬件装置,而贝叶斯分类器是各种分类器中分类错误概率最小或者在预先给定代价的情况下平均风险最小的分类器。它的设计方法是一种最基本的统计分类方法。

对于贝叶斯分类器,其判别函数的选择并不是唯一的,我们可以将所有的判别函数乘上相同的正常数或者加上一个相同的常量而不影响其判决结果;在更一般的情况下,如果将每一个gi (x)替换成f(gi (x)),其中f(∙)是一个单调递增函数,其分类的效果不变。特别在对于最小误差率分类,选择下列任何一种函数都可以得到相同的分类结果,但是其中一些比另一些计算更为简便。

四、实验步骤
1、以身高为例,画出男女生身高的直方图并做对比:
这里重点是要从样本数据.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

2、采用最大似然估计方法,求男女生身高以及体重分布的参数
假定男生女生身高体重服从正态分布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); 

3、 采用贝叶斯估计方法,求男女生身高以及体重分布的参数
先假定概率密度服从极大似然估计量所求分布,即 p(u1)~N(u1,sigma1^2),…并设置均值u的先验分布的方差均为10:
sigmax1=10; sigmax2 =10; sigmax3 =10; sigmax4 =10;
求得男生女生身高体重贝叶斯估计。

<span style="font-size:14px;">%先假定概率密度服从极大似然估计量所求分布,即 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');
fprintf('设置均值u的先验分布的方差均为10,即sigmaX1=10,sigmaX2=10,sigmaX3=10,sigmaX4=10\n');
fprintf('最小错误率贝叶斯估计所估计出的均值为%f,%f,%f,%f\n',uN1,uN2,uN3,uN4);</span>

4、采用最小错误率贝叶斯决策,画出类别判定的决策面。并对样本的身高体重分别为(160,45)及(178,70)时进行分类判别

--------------采用最小错误率贝叶斯决策,画出类别判定的决策面----------------
%协方差矩阵的计算过程,主对角元素即为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;
上一篇:Linux下报 No manual entry for 的解决方法


下一篇:stat命令的实现-mysate(必做)