基于马尔科夫区制切换动态回归模型的系统负荷预测

先对数据进行预处理(包括检测缺失值、离群值、滤波、标准化等等,依据不同情况而采用不同的预处理方法),处理完成之后需要确定马尔科夫状态转移矩阵才能进行下一步的操作。

基于马尔科夫区制切换动态回归模型的系统负荷预测_第1张图片 预处理完成后的训练数据图像

 

本代码将整个时序数据视为两种状态,一种是上升,一种是下降。因此创建二态的状态转移矩阵,从上面的图像趋势可以大致认为转移概率是非时变的,因此不妨认为转移矩阵有稳态解。

P = NaN(2);
mc = dtmc(P,'StateNames',["上升" "下降"]);
mdl = arima(0,0,0);
Mdl = msVAR(mc,[mdl; mdl]);
P0 = 0.5*ones(2);
mc0 = dtmc(P0,'StateNames',Mdl.StateNames);
mdl01 = arima('Constant',0.1,'Variance',0.1);
mdl01 = estimate(mdl01,train_output,'X',train_input);
mdl02 = arima('Constant',-0.1,'Variance',0.1);
mdl02 = estimate(mdl02,train_output,'X',train_input);
Mdl0 = msVAR(mc0,[mdl01; mdl02]);
figure;
EstMdl = estimate(Mdl,Mdl0,train_output,'IterationPlot' ,true);

先使用任意参数进行初始化,然后使用训练数据进行模拟迭代计算得到稳定后的状态转移矩阵P。

下图给出了负对数似然与迭代次数的关系:

基于马尔科夫区制切换动态回归模型的系统负荷预测_第2张图片 负对数似然-迭代次数

 

接着创建离散时间马尔可夫链并进行可视化:

基于马尔科夫区制切换动态回归模型的系统负荷预测_第3张图片 马尔科夫链特征值

 从上图可以看出特征值为1,说明有稳态解;两个特征值的模量为1,表明马尔可夫链的周期为2。而谱隙较窄说明达到稳态所需时间较长。

基于马尔科夫区制切换动态回归模型的系统负荷预测_第4张图片 马尔科夫链有向图

 

EstP = EstMdl.Switch.P; 
MC = dtmc(EstP,'StateNames',["上升","下降"]); %创建离散时间马尔可夫链
figure;
eigval = eigplot(MC); %特征值
figure;
graphplot(MC,'ColorEdges',true); %绘制马尔科夫链有向图

对应于马尔科夫链的两个状态,下面建立两个ARMA模型并使用训练数据进行模拟。注意:由于是多输入ARMA模型,因此模拟时应包含外部分量(即多个输入)。再将这两个ARMA模型合并得到组合回归模型,并使用msVAR函数建立马尔科夫区制切换动态回归模型。

最后使用训练集的输出作为预采样数据载入模型从而得到预测值和预测误差的协方差。

经过简单处理即可得到点预测和区间预测如下图所示:

基于马尔科夫区制切换动态回归模型的系统负荷预测_第5张图片 预测结果

 


需要数据集和源代码的请私信。

(补充:本文涉及的具体原理请自行参考相关学术资料,本文只给出实现代码以及结果)

你可能感兴趣的:(MAT小卖部,matlab,数据分析,深度学习)