matlab的贝叶斯实现数字识别,时间序列的贝叶斯突变检测算法MATLAB源码

题目:时间序列的贝叶斯突变检测算法MATLAB源码

突变分为如下主要的几种:均值突变(最常见)、方差突变、线性回归突变(也称趋势突变)、概率突变、空间型突变、谱突变、模型参数突变,等等。贝叶斯突变检测属于概率突变检测方法,其特点是能给出突变点的概率分布图。以下源码实现了贝叶斯突变检测,提一点经验性的东西,就是在做累乘计算的时候,为防止CPU溢出,应该使用对数把乘法转化为加法,最后再使用指数计算把结果返回。本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系(主页http://blog.sina.com.cn/greensim)。

function P=BMDCP(Y,R,M)

%% Bayesian Method for Detecting Change Points

%% 输入参数列表

%

Y 时间序列原始数据

%

R 控制参数Var0/Var,Var为全序列方差,Var0为均值方差,R应大于等于4

%

M 端点间隔,取值3~5

%% 输入参数列表

%

P 突变点的概率分布

%% 第一步:数据归一化处理

%归一化处理的目的在于避免浮点计算时溢出,属程序设计时考虑的问题,它不影响结果

Y=Y./max(Y);

%% 第二步:计算后验分布的数字特征

N=length(Y);%序列的长度

Mu0=mean(Y);%全序列的均值

Var=var(Y);%全序列方差

MuA=zeros(N,1);

MuB=zeros(N,1);

VarB=zeros(N,1);

for i=M:(N-M)

YA=Y(1:i);%左子序列

YB=Y((i+1):N);%右子序列

VarA(i)=Var/(1/R+i);

VarB(i)=Var/(1/R+N-i);

end

MuA(1:(M-1))=MuA(M);

MuB(1:(M-1))=MuB(M);

MuA((N-M+1):N)=MuA(N-M);

MuB((N-M+1):N)=MuB(N-M);

%% 第三步:计算后验概率分布

P=zeros(N,1);

for k=M:(N-M)

A=0;

for

i=1:k

% 注意:这里对似然函数进行了取对数处理,也是为了防止CPU溢出

a=log((1/sqrt(2*pi*Var))*exp(-(Y(i)-MuA(i))^2/(2*Var)));

end

B=0;

for

j=(k+1):N

b=log((1/sqrt(2*pi*Var))*exp(-(Y(j)-MuB(j))^2/(2*Var)));

end

P(k)=A+B;

end

%% 第四步:计算突变点的概率分布图

P=exp(P);

P=P/sum(P);

maxP=max(P);

bar(1:N,P);

axis([1,N,0,1.2*maxP]);

hold on

p0=(1/N)*ones(N,1);

plot(1:N,p0,'--r');

legend('后验概率','先验概率');

xlabel('k (month)','FontName','TimesNewRoman','FontSize',12);

ylabel('P(k)','FontName','TimesNewRoman','Fontsize',12);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值