贝叶斯mcmc的matlab程序怎么写

贝叶斯mcmc的matlab程序怎么写,第1张

%By Shelley from NCUT,April 14th 2011

%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)

所以计算想要得到的东西如下:

一个程序简例


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12560475.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存