%Email:just_for_h264@163.com
%进而可在屏幕上任意取点,程序可输出属于第一类,还是第二类
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear
close all
%读入两类训练样本数据
load data
%求两类训练样本的均值和方差
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)
hold on
surf(X,Y,P2)
shading interp
colorbar
title('条件概率密度函数曲线')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%以下为测试部分
%利用ginput随机选取屏幕上的点(可连续取10个点)
%程序可根据点的位置自动地显示出属于那个类
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pw1=0.4pw2=0.6
figure(1)
plot(Sample1(:,1),Sample1(:,2),'r.')
hold on
plot(Sample2(:,1),Sample2(:,2),'b.')
for i=1:10
[u,v]=ginput(1)
plot(u,v,'m*'宽樱知)
P1=pw1*mvnpdf([u,v],u1,sigm1)
P2=pw2*mvnpdf([u,v],u2,sigm2)
hold all
if(P1>P2)
disp('it belong to the first class')
else
disp('it belong to the second class'颂备)
end
end
朴素贝叶斯算法属于分类算法。发源于古典数学理论,对缺失数据不太敏感,有稳定的分类效率模缺,模型所需估计的参数很少,算法比较简单。
朴素贝叶斯算法 , 贝叶斯 是说明这个算法和贝叶斯定理有联系,而 朴素 是因为处理实际的需要,做了一个简化—— 假设每个特征之间是独立的 (如果研究的对象互相之间的影响很强,计算概率时考虑的问题非常复杂,做了独立假设,就可以分解后进行研究),这是这个算法模型与贝叶斯定理的区别。
将 x 作为特征,y 作为类别,那公式左边的 P(yi|x)就是说在知道特征 x 的情缺码虚况下,计算这个特征属于 yi 类的可能性大小。通过比较找出这个可能性的值最大的属于哪一类,就将特征 x 归为这一类。
第3步的计算就是整个关键所在,计算依据是上面的贝叶斯公式。
对于每一个类的概率计算,公式右边的分母的 P(x)都是相同的,所以可以不计算(我们只是对最终结果进行比较,不影响)。
P(yi)也称为先验概率,是 x 属于 yi 类的一个概率,这个是通过历史信息得到的(在程序实现的时候,历史信息或者说先验信息就是我们的训练数据集),我们伏燃通过对训练样本数据进行统计,分别算出 x 属于 y1,y2,...,yn 类的概率是多少,这个是比较容易得到的。
所以,主要是求 P(x|yi)= P(a1,a2,...,am|yi)
这个时候对于贝叶斯模型的 朴素 的独立性假设就发挥作用了(综合的计算变成了独立计算后的综合,简化模型,极大地减少了计算的复杂程度):
P(a1,a2,...,am|yi) = P(a1|yi)P(a2|yi)...P(am|yi)
所以计算想要得到的东西如下:
一个程序简例
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)