贝叶斯分类器的MATLAB实现

本文通过Matlab代码实现了一个简单的贝叶斯分类器,并通过生成的两类正态分布随机数进行了分类演示。实验结果显示,部分样本点被误分类,说明该分类器的准确性有待提高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       贝叶斯分类器是一种简单的模式分类器,它是以特征值的统计概率为基础的,简单的讲,例如已知两个类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个样本分类');

运行结果如下图所示:



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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值