具有多输入的RBF网络和ARMA时序分析联合电力负荷预测

本题采用的是2016年电工杯的负荷数据,具有温度、湿度、降雨量等多维特征,目标是求15年前十天的负荷预测数据。

导入数据以后会发现原数据有缺失值如下图所示:

具有多输入的RBF网络和ARMA时序分析联合电力负荷预测_第1张图片 含缺失值的行向量

 用ismissing函数查找出来并用rmmissing函数删去该行。

接着先把所有数据绘图出来看看趋势

具有多输入的RBF网络和ARMA时序分析联合电力负荷预测_第2张图片 所有数据的原始序列图

 可以发现第一行代表温度的图像中具有很明显的离群值(已达到50℃以上),显然这属于分析中常见的异常值,所以对其进行异常值处理:利用filloutliers函数可以使用最接近的非离群值对离群值进行填充,不过这里要注意降水量这个特征比较特殊,由于其随机性太大因此不能对其进行离群值检测,否则处理过后会发生异常导致预测偏差性过大。

从图中也很容易看出数据具有很明显的周期性,基本上是以年为周期的趋势较为明显,因此我们将以年为单位对数据进行分析。

在数据标准化以后需要先进行平稳性检验,这里我采用单位根检验中的ADF检验和LMC检验,

[h_adf,p_adf] = adftest(train_output);
[h_lmc,p_lmc] = lmctest(train_output);

结果是h_adf=h_lmc=1,即原序列通过了平稳性检验。

由于数据量较大,我这里采用的是AIC准则对ARMA模型进行定阶,先限制最高阶数为8(太高的阶数MATLAB可能会处理异常,模型也太过复杂,因此不建议这么做),然后循环迭代ARMA模型计算其AIC值,其结果如下图所示:

具有多输入的RBF网络和ARMA时序分析联合电力负荷预测_第3张图片 可以看到ARMA(8,7)有着最小的AIC值

 因此建立ARMA(8,7)模型并预测。

将得到的模拟值和原始值作差得到残差序列,下面需要对残差进行残差检验

res_data1 = train_output-ARMApre;
[h_res1,p_res1] = lbqtest(res_data1);

结果h_res1=0,p_res1>5%,说明通过了残差检验,残差可以看作是一段白噪声序列,没有明显自相关性。

然后使用ARMA模型进行预测后十步(天)数据并得到其99%的置信区间,再对数据反标准化即可得到ARMA预测的最终结果。

接着再设计RBF网络,使用模拟退火算法在均方误差目标和基函数宽度(扩展)之中不断寻优,均方误差目标范围为0.025——0.1,基函数宽度范围为1——30,马尔科夫链长度设置为1000,每次产生新解导致均方误差和基函数宽度产生的变化量的服从正态分布。寻优结束后均方误差目标为0.032,基函数宽度为10.

把标准化后的特征因子载入RBF网络中得出预测值再反标准化得到最终结果。

ARMA和RBF的预测结果如下图所示:

具有多输入的RBF网络和ARMA时序分析联合电力负荷预测_第4张图片 ARMA&RBF预测效果

 可以看到ARMA的预测效果要比RBF的更好,RBF网络得出的结果过于平稳。


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

你可能感兴趣的:(MAT小卖部)