时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解

时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解

效果一览

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

基本介绍

Matlab实现贝叶斯变化点检测与时间序列分解
1.Matlab实现贝叶斯变化点检测与时间序列分解,完整源码和数据;
BEAST(突变、季节性和趋势的贝叶斯估计)是一种快速、通用的贝叶斯模型平均算法,用于将时间序列或1D序列数据分解为单个分量,如突变、趋势和周期性/季节性变化,如赵等人(2019)所述。BEAST可用于变化点检测(例如,断点、结构中断、状态变化或异常)、趋势分析、时间序列分解(例如,趋势与季节性)、时间序列分割和中断时间序列分析。
2.运行主程序main即可,其余为函数,无需运行,运行环境matlab2020及以上。
贝叶斯变化点检测和时间序列分解是两种在时间序列分析中常用的技术。

贝叶斯变化点检测(Bayesian Change Point Detection)是一种用于检测时间序列中突变点或结构变化的方法。它基于贝叶斯统计方法,通过考虑数据的先验分布和后验分布来确定变化点的位置和数量。该方法可以应用于多种类型的时间序列。
时间序列分解(Time Series Decomposition)是将时间序列分解为不同组成部分的过程。通常,一个时间序列可以分解为趋势(Trend)、季节性(Seasonality)和残差(Residual)三个部分。趋势表示时间序列的长期趋势变化,季节性表示时间序列在固定周期内的重复模式,而残差则表示无法由趋势和季节性解释的随机波动。时间序列分解可以帮助我们更好地理解时间序列的结构和特征,以及对序列进行预测和分析。

程序设计

%% get values from keys. The last arg is the default value if the key is missing from varagin/KeyList
  
   start           = GetValueByKey(KeyList, ValList, 'start',  []);
   deltat          = GetValueByKey(KeyList, ValList, 'deltat', []);
   time            = GetValueByKey(KeyList, ValList, 'time',   []);    
   period          = GetValueByKey(KeyList, ValList, 'period',  []); 
   nsamples_per_period  = GetValueByKey(KeyList, ValList, 'freq',  []); 
    
   season          = GetValueByKey(KeyList, ValList, 'season',        'harmonic'); 
   sorder_minmax   = GetValueByKey(KeyList, ValList, 'sorder.minmax', [1,5]); 
   scp_minmax      = GetValueByKey(KeyList, ValList, 'scp.minmax',    [0,10]); 
   sseg_min        = GetValueByKey(KeyList, ValList, 'sseg.min',      []); 
   sseg_leftmargin = GetValueByKey(KeyList, ValList, 'sseg.leftmargin',  []); 
   sseg_rightmargin= GetValueByKey(KeyList, ValList, 'sseg.rightmargin', []); 
   
   deseasonalize   = GetValueByKey(KeyList, ValList, 'deseasonalize', false); 
   detrend         = GetValueByKey(KeyList, ValList, 'detrend', false); 
   
   torder_minmax   = GetValueByKey(KeyList, ValList, 'torder.minmax', [0,1]); 
   tcp_minmax      = GetValueByKey(KeyList, ValList, 'tcp.minmax',    [0,10]); 
   tseg_min        = GetValueByKey(KeyList, ValList, 'tseg.min',      []);
   tseg_leftmargin = GetValueByKey(KeyList, ValList, 'tseg.leftmargin',  []); 
   tseg_rightmargin= GetValueByKey(KeyList, ValList, 'tseg.rightmargin', []); 

   precValue       = GetValueByKey(KeyList, ValList, 'precValue',       1.5); 
   precPriorType   = GetValueByKey(KeyList, ValList, 'precPriorType',   'componentwise');    
   
   hasOutlierCmpnt = GetValueByKey(KeyList, ValList, 'hasOutlier',        []); 
   ocp_max         = GetValueByKey(KeyList, ValList, 'ocp.max',           10); 
      
   mcmc_seed       = GetValueByKey(KeyList, ValList, 'mcmc.seed',     0);         
   mcmc_samples    = GetValueByKey(KeyList, ValList, 'mcmc.samples',  8000);
   mcmc_thin       = GetValueByKey(KeyList, ValList, 'mcmc.thin',     5); 
   mcmc_burnin     = GetValueByKey(KeyList, ValList, 'mcmc.burnin',   200);
   mcmc_chainNumber= GetValueByKey(KeyList, ValList, 'mcmc.chains',   3);  
   
   ci               = GetValueByKey(KeyList, ValList, 'ci',             false);   
   printProgressBar = GetValueByKey(KeyList, ValList, 'print.progress', true);     
   printOptions     = GetValueByKey(KeyList, ValList, 'print.options',  true);    
   quiet            = GetValueByKey(KeyList, ValList, 'quiet',          false);   
   gui              = GetValueByKey(KeyList, ValList, 'gui',            false); 
   methods          = GetValueByKey(KeyList, ValList, 'method',        'bayes'); 
   
%% Convert the opt parameters to the individual option parameters (e.g., metadata, prior, mcmc, and extra)

   %......Start of displaying 'MetaData' ......
   metadata = [];
   metadata.isRegularOrdered = true;
   metadata.season           = season;
   metadata.time             = time;
   metadata.startTime        = start;
   metadata.deltaTime        = deltat;
   if isempty(period) && ~isempty(deltat) && ~isempty(nsamples_per_period) && ~strcmp(season, 'none')
       period=nsamples_per_period*deltat;
   end   
   metadata.period           = period;

 
   if strcmp(metadata.season, 'svd')
      % if isempty(freq)|| freq <= 1.1 || isnan(freq)
      %     error("When season=svd, freq must be specified and larger than 1.");
      % end
      % metadata.svdTerms = svdbasis(y, freq, deseasonalize);
   end
   metadata.missingValue     = NaN;
   metadata.maxMissingRate   = 0.75;
   metadata.deseasonalize    = deseasonalize;
   metadata.detrend          = detrend;
   metadata.hasOutlierCmpnt  = hasOutlierCmpnt;
%........End of displaying MetaData ........

%......Start of displaying 'prior' ......
   prior = [];
   prior.modelPriorType	  = 1;
   if ~strcmp(metadata.season, 'none')              
       prior.seasonMinOrder   = sorder_minmax(1);
       prior.seasonMaxOrder   = sorder_minmax(2);
       prior.seasonMinKnotNum = scp_minmax(1);
       prior.seasonMaxKnotNum = scp_minmax(2);   
       prior.seasonMinSepDist = sseg_min;
	   prior.seasonLeftMargin  = sseg_leftmargin;
	   prior.seasonRightMargin = sseg_rightmargin;
   end   
   prior.trendMinOrder	  = torder_minmax(1);
   prior.trendMaxOrder	  = torder_minmax(2);
   prior.trendMinKnotNum  = tcp_minmax(1);
   prior.trendMaxKnotNum  = tcp_minmax(2);
   prior.trendMinSepDist  = tseg_min;
   prior.trendLeftMargin  = tseg_leftmargin;
   prior.trendRightMargin = tseg_rightmargin;

   if hasOutlierCmpnt
      prior.outlierMaxKnotNum = ocp_max;
   end
        
   prior.precValue        = precValue;
   prior.precPriorType    = precPriorType;
%......End of displaying pripr ......

%......Start of displaying 'mcmc' ......
   mcmc = [];
   mcmc.seed                      = mcmc_seed;
   mcmc.samples                   = mcmc_samples;
   mcmc.thinningFactor            = mcmc_thin;
   mcmc.burnin                    = mcmc_burnin;
   mcmc.chainNumber               = mcmc_chainNumber;
   
   %mcmc.maxMoveStepSize           = 28
   mcmc.trendResamplingOrderProb  = 0.1000;
   mcmc.seasonResamplingOrderProb = 0.1700;
   mcmc.credIntervalAlphaLevel    = 0.950;
%......End of displaying mcmc ......

%......Start of displaying 'extra' ......
   extra = [];
   extra.dumpInputData        = true;
   extra.whichOutputDimIsTime = 1;
   extra.computeCredible      = ci;
   extra.fastCIComputation    = true;
   extra.computeSeasonOrder   = true;
   extra.computeTrendOrder    = true;
   extra.computeSeasonChngpt  = true;
   extra.computeTrendChngpt   = true;
   extra.computeSeasonAmp     = ~strcmp(metadata.season, 'svd');
   extra.computeTrendSlope    = true;
   extra.tallyPosNegSeasonJump= false;
   extra.tallyPosNegTrendJump = false;
   extra.tallyIncDecTrendJump = false;
   extra.printProgressBar     = printProgressBar;
   extra.printOptions         = printOptions;
   extra.quiet                = quiet;
   extra.consoleWidth         = 70;
   extra.numThreadsPerCPU     = 2;
   extra.numParThreads        = 0;
%......End of displaying extra ......


 if (gui)
    out=Rbeast(' beastv4demo',            y, metadata, prior, mcmc, extra);
 else
    out=Rbeast( strcat('beast_',methods), y, metadata, prior, mcmc, extra);
 end
 
end

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/129215161
[2] https://blog.csdn.net/kjm13182345320/article/details/128105718

1.版本:matlab2014/2019a/2021a,内含运行结果,不会运行可私信 2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可击博主头像 3.内容:标题所示,对于介绍可击主页搜索博客 4.适合人群:本科,硕士等教研学习使用 5.博客介绍:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可si信 %% 开发者:Matlab科研助手 %% 更多咨询关注天天Matlab微信公众号 ### 团队长期从事下列领域算法的研究和改进: ### 1 智能优化算法及应用 **1.1 改进智能优化算法方面(单目标和多目标)** **1.2 生产调度方面** 1.2.1 装配线调度研究 1.2.2 车间调度研究 1.2.3 生产线平衡研究 1.2.4 水库梯度调度研究 **1.3 路径规划方面** 1.3.1 旅行商问题研究(TSP、TSPTW) 1.3.2 各类车辆路径规划问题研究(vrp、VRPTW、CVRP) 1.3.3 机器人路径规划问题研究 1.3.4 无人机三维路径规划问题研究 1.3.5 多式联运问题研究 1.3.6 无人机结合车辆路径配送 **1.4 三维装箱求解** **1.5 物流选址研究** 1.5.1 背包问题 1.5.2 物流选址 1.5.4 货位优化 ##### 1.6 电力系统优化研究 1.6.1 微电网优化 1.6.2 配电网系统优化 1.6.3 配电网重构 1.6.4 有序充电 1.6.5 储能双层优化调度 1.6.6 储能优化配置 ### 2 神经网络回归预测、时序预测、分类清单 **2.1 bp预测和分类** **2.2 lssvm预测和分类** **2.3 svm预测和分类** **2.4 cnn预测和分类** ##### 2.5 ELM预测和分类 ##### 2.6 KELM预测和分类 **2.7 ELMAN预测和分类** ##### 2.8 LSTM预测和分类 **2.9 RBF预测和分类** ##### 2.10 DBN预测和分类 ##### 2.11 FNN预测 ##### 2.12 DELM预测和分类 ##### 2.13 BIlstm预测和分类 ##### 2.14 宽度学习预测和分类 ##### 2.15 模糊小波神经网络预测和分类 ##### 2.16 GRU预测和分类 ### 3 图像处理算法 **3.1 图像识别** 3.1.1 车牌、交通标志识别(新能源、国内外、复杂环境下车牌) 3.1.2 发票、身份证、银行卡识别 3.1.3 人脸类别和表情识别 3.1.4 打靶识别 3.1.5 字符识别(字母、数字、手写体、汉字、验证码) 3.1.6 病灶识别 3.1.7 花朵、药材、水果蔬菜识别 3.1.8 指纹、手势、虹膜识别 3.1.9 路面状态和裂缝识别 3.1.10 行为识别 3.1.11 万用表和表盘识别 3.1.12 人民币识别 3.1.13 答题卡识别 **3.2 图像分割** **3.3 图像检测** 3.3.1 显著性检测 3.3.2 缺陷检测 3.3.3 疲劳检测 3.3.4 病害检测 3.3.5 火灾检测 3.3.6 行人检测 3.3.7 水果分级 **3.4 图像隐藏** **3.5 图像去噪** **3.6 图像融合** **3.7 图像配准** **3.8 图像增强** **3.9 图像压缩** ##### 3.10 图像重建 ### 4 信号处理算法 **4.1 信号识别** **4.2 信号检测** **4.3 信号嵌入和提取** **4.4 信号去噪** ##### 4.5 故障诊断 ##### 4.6 脑电信号 ##### 4.7 心电信号 ##### 4.8 肌电信号 ### 5 元胞自动机仿真 **5.1 模拟交通流** **5.2 模拟人群疏散** **5.3 模拟病毒扩散** **5.4 模拟晶体生长** ### 6 无线传感器网络 ##### 6.1 无线传感器定位(Dv-Hop定位优化、RSSI定位优化) ##### 6.2 无线传感器覆盖优化 ##### 6.3 无线传感器通信及优化(Leach协议优化) ##### 6.4 无人机通信中继优化(组播优化)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器学习之心

谢谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值