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

一、实验目的

本次实验的主要内容是编程实现一个可以对两类模式样本进行分类的贝叶斯分类器,其中假设两个模式类的条件概率分布均为高斯分布。本次实验自定义一个函数self_mvnrnd(varargin) ,输入8个参数,其中,参数1,2,3,4分别为一类模式样本的均值矢量,协方差矩阵,样本数,先验概率,参数5,6,7,8分别为另一类模式样本的均值矢量,协方差矩阵,样本数,先验概率。最后,调用self_mvnrnd()函数可以用最小错误率贝叶斯分类器对其进行分类,统计正确分类的百分比,并在二维图上用不同的颜色画出正确分类和错分的样本。

二、实验内容

利用贝叶斯后验概率确定分类:

实验三 最小错误率的贝叶斯分类_第1张图片

 

设有19人进行体检,结果如下表。但事后发现4人忘了写性别,试问,这4人是男是女?

序号

身高

体重

性别

序号

身高

体重

性别

1

170

68

11

140

62

2

130

66

12

150

64

3

180

71

13

120

66

4

190

73

14

150

66

5

160

70

15

130

65

6

150

66

16

140

70

α?

7

190

68

17

150

60

β?

8

210

76

18

145

65

γ?

9

100

58

19

160

75

δ?

10

170

75

C=2。男—1类,女—2类。

三、实验过程

Matlab代码如下:

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;

   145,65,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

       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

四、实验结果

实验三 最小错误率的贝叶斯分类_第2张图片

实验三 最小错误率的贝叶斯分类_第3张图片

 

 

你可能感兴趣的:(机器学习,matlab)