贝叶斯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

1 x'-- x的转置矩阵

x*x'的结果是矩阵或数值,由x的维数(x若为向量,维数就是其长度)决定

2 inv 求逆矩阵。

miu=1/(ad'*inv(R)*ad)

既然程序没有报错,那么(ad'*inv(R)*ad)就是一个数值,而

w = miu*inv(R)*ad = 1/(ad'*inv(R)*ad) * inv(R)*ad 是矩阵运算,

不能按照代数四则运算进行简单的“约分”败饥。

3 y(1,v)=w.'*a

v=v+1 这是为了记录向量y,v表液枯耐示当前值在向量中的位置。算完这一个后,位置向后移动,从v到(v+1),继续循环,算出的y值闹春就记录在(v+1)位置处


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存