贝叶斯分类器的MATLAB实现

时间:2022-03-07 22:30:13

       贝叶斯分类器是一种简单的模式分类器,它是以特征值的统计概率为基础的,简单的讲,例如已知两个类w1和w2,一个未知样本x,这里说的未知,就是不知道它属于w1类还是属于w2类,然后根据统计方法分别计算得到x属于w1类的概率,即P(w1|x)和属于w2类的概率,即P(w2|x),如果P(w1|x)> P(w2|x),则x属于w1,反之则属于w2。

其matlab代码如下:

clear;
%clc;
n=100;
m1=0;
m2=0;
num1=0;%用于计数
num2=0;%用于计数
num3=0;%用于计数
num4=0;%用于计数
mu1=[1 3];
sigma1=[1.5 0;0 1];
r1=mvnrnd(mu1,sigma1,n);%生成模式类1
mu2=[3 1];
sigma2=[1 0.5;0.5 2];
r2=mvnrnd(mu2,sigma2,n);%生成模式类2
subplot(1,2,1);
plot(r1(:,1),r1(:,2),'ro',r2(:,1),r2(:,2),'b*');
title('图1:两个模式类各生成个100正态分布的随机数二维散点图');
p1=normpdf(r1(:,1),mu1(:,1),sqrt(1.5));
p2=normpdf(r1(:,1),mu2(:,1),1);
p3=normpdf(r2(:,1),mu1(:,1),sqrt(1.5));
p4=normpdf(r2(:,1),mu2(:,1),1);

for i=1:1:100
if (p1(i)*0.5)>=(p2(i)*0.5)%进行模式判别
num1=num1+1;
m1=m1+1;
a1(m1,:)=r1(i,:);%分到模式类1
else
num2=num2+1;
m2=m2+1
a2(m2,:)=r1(i,:);%分到模式类2
end

if (p3(i)*0.5)<=(p2(i)*0.5)
num3=num3+1;
m1=m1+1;
a1(m1,:)=r2(i,:);%分到模式类1
else
num4=num4+1;
m2=m2+1;
a2(m2,:)=r2(i,:);%分到模式类2
end
end
subplot(1,2,2);
plot(a1(:,1),a1(:,2),'ro',a2(:,1),a2(:,2),'b*');
title('图2:以第一特征分量对200个样本分类');

运行结果如下图所示:

贝叶斯分类器的MATLAB实现


从运行结果可看出,模式类1的一些样本点被错误分到模式类2,模式类2的一些样本点被错误分到模式类1,也就是说,贝叶斯分类器的分类正确率不高。

下图为更全面的实验结果截图

贝叶斯分类器的MATLAB实现