贝叶斯分类器

摘要:贝叶斯分类器是在具有模式的完整统计知识条件下,按照贝叶斯策理论进行设计的一种最优分类器。本次实验做了基本的Bayes分类实验和进一步的Bayes实验。在基本的Bayes实验中分别利用一个或两个特征向量对样本进行分类,并比较各种分类结果的正确率。在进一步的Bayes分类器实验中是在假设分类数据均满足高斯分布的情况下,设计了一个判别分类器。分别在先验概率相等和不等的情况下,利用设计的分类器,对测试点进行分类。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述这里写图片描述
这里写图片描述
通过比较在先验概率相同和不相同时的实验结果,我们发现,当先验概率相对较大时,对分类的结果影响很大。
这里写图片描述

function Proj0201
%基本的Bayes分类实验
%生成两个模式类,每个模式类各生成100个随机样本
m1=[1 3];s1=[1.5 0;0 1];
r1=mvnrnd(m1,s1,100);
m2=[3 1];s2=[1 0.5;0.5 2];
r2=mvnrnd(m2,s2,100);
figure,
scatter(r1(:,1),r1(:,2),'r*');
hold on;
scatter(r2(:,1),r2(:,2),'bo');
title('2个模式类样本的二维散点图');

%仅用模式集合的第1个特征分量作为分类特征,统计正确分类的百分比
figure;
p1=((3*pi).^(-1/2))*exp((-1/2)*(((r1(:,1)-1).^(2))/1.5));
p2=((2*pi).^(-1/2))*exp((-1/2)*(((r1(:,1)-3).^(2))/1));
[ t1,f1,true1,false1 ] = classify( p1,p2,r1,100);
p1=((3*pi).^(-1/2))*exp((-1/2)*(((r2(:,1)-1).^(2))/1.5));
p2=((2*pi).^(-1/2))*exp((-1/2)*(((r2(:,1)-3).^(2))/1));
[ t2,f2,true2,false2 ] = classify( p2,p1,r2,100);
plot(true1(1:t1,1),true1(1:t1,2),'g*',...
    true2(1:t2,1),true2(1:t2,2),'g*',...
    false1(1:f1,1),false1(1:f1,2),'ro',...
    false2(1:f2,1),false2(1:f2,2),'ro');
t=t1+t2;per=double((t/200)*100);
xlabel(['仅用第1个特征分量正确分类的百分比为:',num2str(per),'%']);
title('绿色*代表正确分类,红色o代表错误分类');

%仅用模式集合的第2个特征分量作为分类特征,统计正确分类的百分比
figure;
p1=((2*pi).^(-1/2))*exp((-1/2)*(((r1(:,2)-3).^(2))/1));
p2=((4*pi).^(-1/2))*exp((-1/2)*(((r1(:,2)-1).^(2))/2));
[ t1,f1,true1,false1 ] = classify( p1,p2,r1,100);
p1=((2*pi).^(-1/2))*exp((-1/2)*(((r2(:,2)-3).^(2))/1));
p2=((4*pi).^(-1/2))*exp((-1/2)*(((r2(:,2)-1).^(2))/2));
[ t2,f2,true2,false2 ] = classify( p2,p1,r2,100);
plot(true1(1:t1,1),true1(1:t1,2),'g*',...
    true2(1:t2,1),true2(1:t2,2),'g*',...
    false1(1:f1,1),false1(1:f1,2),'ro',...
    false2(1:f2,1),false2(1:f2,2),'ro');
t=t1+t2;per=double((t/200)*100);
xlabel(['仅用第2个特征分量正确分类的百分比为:',num2str(per),'%']);
title('绿色*代表正确分类,红色o代表错误分类');

%同时2个分量作为分类特征,统计正确分类的百分比
figure;
for i=1:100
p1(i)= density( r1(i,:),m1,s1);
p2(i)= density( r1(i,:),m2,s2);
end
[ t1,f1,true1,false1 ] = classify( p1,p2,r1,100);
for i=1:100
p1(i)= density( r2(i,:),m1,s1);
p2(i)= density( r2(i,:),m2,s2);
end
[ t2,f2,true2,false2 ] = classify( p2,p1,r2,100);
plot(true1(1:t1,1),true1(1:t1,2),'g*',...
    true2(1:t2,1),true2(1:t2,2),'g*',...
    false1(1:f1,1),false1(1:f1,2),'ro',...
    false2(1:f2,1),false2(1:f2,2),'ro');
t=t1+t2;per=double((t/200)*100);
xlabel(['同时用2个特征分量的正确分类的百分比为:',num2str(per),'%']);
title('绿色*代表正确分类,红色o代表错误分类');
end
%-----------------------------------------------------------------------------------------------
function [ t,f,true,false ] = classify( p1,p2,r,m)
t=0;f=0;
true=zeros(m,2);
false=zeros(m,2);
for i=1:m
    if p1(i)>=p2(i)
        t=t+1;
        true(t,:)=r(i,:);
    else
        f=f+1;
       false(f,:)=r(i,:);
    end
end
end

%----------------------------------------------------------------------------------------------
function  p= density( x,m,s)
%x 多维向量
%m 均值向量
%s 协方差矩阵
d=length(x);%维数
x=x';
m=m';
mol=exp(-0.5*(x-m)'*inv(s)*(x-m));
den=(2*pi)^(d/2)*sqrt(det(s));
p=mol/den;
end
%-------------------------------------------------------------------------------------------------
function [g,r] = GauseBayes( x,p,m,s )
%输入:模板矢量x,正太分布的均值,协方差矩阵,先验概率p
%输出:判别函数值
x=x';m=m';
W=(-1/2)*inv(s);
w=inv(s)*m;
w0=-1/2*m'*inv(s)*m-1/2*log(det(s))+log(p);
g=x'*W*x+w'*x+w0;
r=(x-m)'*inv(s)*(x-m);
end
%------------------------------------------------------------------------------------------------
function Proj020102
%进一步的bayes分类器实验
%a,b,c为三类样本
a=[-5.01 -8.12 -3.68; -5.43 -3.48 -3.54; 1.08 -5.52 1.66; 0.86 -3.78 -4.11; -2.67 0.63 7.39;...
    4.94 3.29 2.08; -2.51 2.09 -2.59;-2.25 -2.13 -6.94; 5.56 2.86 -2.26; 1.03 -3.33 4.33];
b=[-0.91 -0.18 -0.05; 1.30 -0.206 -3.53; -7.75 -4.54 -0.95; -5.47 0.50 3.92; 6.14 5.72 -4.85;...
    3.60 1.26 4.36; 5.37 -4.63 -3.65; 7.18 1.46 -6.66; -7.39 1.17 6.30;-7.50 -6.32 -0.31];
c=[5.35 2.26 8.13; 5.12 3.22 -2.66; -1.34 -5.31 -9.87; 4.48 3.42 5.19; 7.11 2.39 9.21;...
    7.17 4.33 -0.98; 5.75 3.97 6.65; 0.77 0.27 2.41; 0.90 -0.43 -8.71; 3.52 -0.36 6.43];
%求均值和协方差
ma=mean(a),mb=mean(b),mc=mean(c)
sa=cov(a),sb=cov(b),sc=cov(c)
pa=double(1/3);pb=double(1/3);pc=double(1/3);
%对测试点进行分类
x=[1 2 1;5 3 2;0 0 0;1 0 0];
for i=1:4
[ga,ra]=GauseBayes( x(i,:),pa,ma,sa )
[gb,rb]=GauseBayes( x(i,:),pb,mb,sb )
[gc,rc]=GauseBayes( x(i,:),pc,mc,sc )
fenleiqi(ga,gb,gc);
end
pa=0.8;pb=0.1;pc=0.1;
for i=1:4
[ga,ra]=GauseBayes( x(i,:),pa,ma,sa )
[gb,rb]=GauseBayes( x(i,:),pb,mb,sb )
[gc,rc]=GauseBayes( x(i,:),pc,mc,sc )
fenleiqi(ga,gb,gc);
end
end
%--------------------------------------------------------------------------------------------------------
function fenleiqi(g1,g2,g3)
%比较判别函数的值
gmax=max(max(g1,g2),g3);
if g1==gmax
    display('The classification result is w1');
elseif g2==gmax
    display('The classification result is w2');
else 
    display('The classification result is w3');
end
end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值