模式识别 实验三 最新错误的贝叶斯分类

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

实验内容:
利用贝叶斯后验概率确定分类:
在这里插入图片描述
设有19人进行体检,结果如下表。但事后发现4人忘了写性别,试问,这4人是男是女?
在这里插入图片描述
C=2。男—1类,女—2类。

代码实现:

M=50;% M为最大的类数
% 已知类别样本15个 (身高,体重,类别)。1-男,2-女
 
n=15;
pattern=[170,68,1;
		130,66,2;
		180,71,1;
		190,73,1;
		160,70,2;
		150,66,1;
		190,68,1;
		210,76,1;
		100,58,2;
		170,75,1;
		140,62,1;
        150,64,2;
        120,66,2;
        150,66,1;
		130,65,1];
     % 未知类别样本4个
X=    [140,70,0;
	   150,60,0;
	   190,68,0;
	   160,75,0];
K=4;  % 未知类别样本个数
 
pattern   % 显示pattern
X         % 显示未知类别的样本
C=2; % 类别总数C=2
num=zeros(1,C);
%数组 num(i)存放第i类的样本数(i=1...C
for i=1:n % 统计每类样本数
	num(pattern(i,3))=num(pattern(i,3))+1;
end
for i=1:C % 输出每类样本数
		fprintf('%d 类样本数= %d \n',i,num(i))
end
 
% 计算每类的先验概率
 
for i=1:C
  P(i)=num(i)/n;
  % 输出每类的先验概率
  fprintf('%d 类的先验概率=%.2f \n',i,P(i))
end
 
% float PW1[M],PW2[M];  存放后验概率数组
% float height,weight;  身高-体重
% 对未知类别的样本进行分类判断
for  k=1:K	% 对未知类别样本数据:身高-体重加以处理
   fprintf('第%d 个样本:%d,%d\n',k,X(k,1),X(k,2))
   height=X(k,1);
   weight=X(k,2);
   
   num1=0;
   for i=1:n
     if (pattern(i,1)==height&pattern(i,3)==1)
			num1=num1+1;
     end
   end
   if (num1==0)  % 防止 0 概率,分子分母均作处理:分子加1,分母加类别数或不同取值个数
	    PW1(1)=1/(num(1)+2);
    else
        PW1(1)=(num1+1)/(num(1)+2);
   end
   
   num1=0;
   for i=1:n
     if (pattern(i,2)==weight&pattern(i,3)==1)
			num1=num1+1;
     end
   end
   if (num1==0)  % 防止 0 概率,分子分母均作处理:分子加1,分母加类别数或不同取值个数
	    PW1(2)=1/(num(1)+2);
    else
        PW1(2)=(num1+1)/(num(1)+2);
   end
     
   
   num2=0;
   for i=1:n 
	   if (pattern(i,1)==height&pattern(i,3)==2)
			 num2=num2+1;
       end
   end
   if (num2==0)
	  PW2(1)=1/(num(2)+2);
	 else
      PW2(1)=(num2+1)/(num(2)+2); 
   end
   
   num2=0;
   for i=1:n 
	   if (pattern(i,2)==weight&pattern(i,3)==2)
			 num2=num2+1;
       end
   end
   if (num2==0)
	  PW2(2)=1/(num(2)+2);
	 else
      PW2(2)=(num2+1)/(num(2)+2); 
   end
   
   
   PWT1=PW1(1)*PW1(2)*P(1); % 计算属于第一类的似然概率*先验概率
   PWT2=PW2(1)*PW2(2)*P(2); % 计算属于第二类的似然概率*先验概率
   fprintf('   属于第一类的似然概率*先验概率(后验概率*P(X))= %.2f \n',PWT1)
   fprintf('   属于第二类的似然概率*先验概率(后验概率*P(X))= %.2f \n',PWT2)
   if (PWT1>PWT2)
	   fprintf('   %d -th pattern belongs to 1\n',k)
	elseif (PWT1<PWT2)
       fprintf('   %d -th pattern belongs to 2\n',k)
	 else 
	   fprintf('   %d -th pattern belongs to 1 or 2 is equal\n',k) 
     end
 end

实验结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值