贝叶斯分类器的matlab实现.docx
《贝叶斯分类器的matlab实现.docx》由会员分享,可在线阅读,更多相关《贝叶斯分类器的matlab实现.docx(5页珍藏版)》请在冰点文库上搜索。
贝叶斯分类器的matlab实现
贝叶斯分类原理:
1)在已知P(Wi),P(X|Wi)(i=1,2)及给出待识别的X的情况下,根据贝叶斯公式计算出后验概率P(Wi|X);
2)根据1)中计算的后验概率值,找到最大的后验概率,则样本X属于该类
举例:
解决方案:
但对于两类来说,因为分母相同,所以可采取如下分类标准:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ByShelleyfromNCUT,April14th2011
%Email:
just_for_h264@
%此程序利用贝叶斯分类算法,首先对两类样本进行训练,
%进而可在屏幕上任意取点,程序可输出属于第一类,还是第二类
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
closeall
%读入两类训练样本数据
loaddata
%求两类训练样本的均值和方差
u1=mean(Sample1);
u2=mean(Sample2);
sigm1=cov(Sample1);
sigm2=cov(Sample2);
%计算两个样本的密度函数并显示
x=-20:
0.5:
40;
y=-20:
0.5:
20;
[X,Y]=meshgrid(x,y);
F1=mvnpdf([X(:
),Y(:
)],u1,sigm1);
F2=mvnpdf([X(:
),Y(:
)],u2,sigm2);
P1=reshape(F1,size(X));
P2=reshape(F2,size(X));
figure
(2)
surf(X,Y,P1)
holdon
surf(X,Y,P2)
shadinginterp
colorbar
title('条件概率密度函数曲线');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%以下为测试部分
%利用ginput随机选取屏幕上的点(可连续取10个点)
%程序可根据点的位置自动地显示出属于那个类
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pw1=0.4;pw2=0.6;
figure
(1)
plot(Sample1(:
1),Sample1(:
2),'r.')
holdon
plot(Sample2(:
1),Sample2(:
2),'b.')
fori=1:
10
[u,v]=ginput
(1);
plot(u,v,'m*');
P1=pw1*mvnpdf([u,v],u1,sigm1);
P2=pw2*mvnpdf([u,v],u2,sigm2);
holdall
if(P1>P2)
disp('itbelongtothefirstclass');
else
disp('itbelongtothesecondclass');
end;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
结果示意:
两个样本的密度函数曲线:
测试结果:
命令窗口中显示:
itbelongtothefirstclass
itbelongtothesecondclass
itbelongtothesecondclass
itbelongtothefirstclass
itbelongtothefirstclass
itbelongtothefirstclass
itbelongtothefirstclass
itbelongtothefirstclass
itbelongtothefirstclass
itbelongtothefirstclass
分析可知在第一类周围有八个随机的测试点,在第二类周围有两个随机的测试点,与命令窗口中的结果相符合。