灰色预测代码的讲解

本章通过一个例题,来讲解灰色预测代码。由于笔者只是以学习者的身份,以做笔记为目的写这篇博客,因此欢迎大家学习交流

一、总述————如何处理预测题目?

1.画出时序图,分析趋势

2.检验与比较模型————训练与试验

将数据分为训练组和试验组,尝试使用不同的模型对训练组进行建模,并利用试验组的数据判断哪种模型的预测效果最好(比如我们可以使用SSE这个指标来挑选模型,常见的模型有指数平滑、ARIMA、灰色预测、神经网络等)。

3.得出结论————模型结果可视化

选择上一步骤中得到的预测误差最小的那个模型,并利用全部数据来重新建模,并对未来的数据进行预测。
画出预测后的数据和原来数据的时序图,看看预测的未来趋势是否合理。

二、用EXCEL画出时序图

时期 原始数据 累加数据 紧邻均值生成序列
1 12.2 12.2
2 15.2 27.4 19.8
3 10.9 38.2 32.8
4 15.0 53.2 45.7
5 14.7 67.9 60.6
6 14.4 82.3 75.1
7 19.8 102.1 92.2
8 17.2 119.3 110.7
9 17.5 136.8 128.1
10 17.9 154.8 145.8
11 14.4 169.2 162.0
12 16.3 185.5 177.3
这是我们目前的数据,使用EXCEL画出散点图

1.设置主次坐标轴

可以看到,累加后的数据明显大于原始数据,如果我们需要将其制作在同一张图上,就要把数量级较小的数据放置在次坐标轴上,方法如下图所示

三、matlab代码实现

1.数据的输入与创造时序图

数据的输入不必多言,此处我们讲解一下创造时序图所设计的代码

(1)set(gca,'xtick',year(1:1:end))

set(gca,'xtick',year(1:1:end))
在画出图后,“gca”代表当前坐标区或图,单独gca会返回图的信,如横轴与纵轴的数据。
而用“set”函数可以对坐标轴进行设置。此处,我们对gac的'xtick'参数进行了设置,也就是对横坐标的刻度进行了设置,设置成了year的第一个数到最后一个数的间隔为1,保证时间序列的连续性

(2)xlabel('年份'); ylabel('排污总量')

xlabel('年份'); ylabel('排污总量') 为给x轴与y轴添加名称

2.判断数据是否符合要求

因为灰色预测模型对数据量有要求:一般要求>3,不然数据量太少,模型失效;<10,数据量多,可能有更适合的模型
此段代码还有把数据转化成列向量的作用

3.进行准指数规律检验

(1)计算光滑度


x1 = cumsum(x0)是生成一个累加序列,返回一个经过累加处理的向量。
而下面ρ则是计算光滑度的公式

(2)画出光滑度的图形


plot(year(2:end),rho,'o-',[year(2),year(end)],[0.2,0.6],'-')
此代码前半段是画图,后半端是添加一条平行于X轴的线的操作。第一个参数是[xmin,xmax],第二个是[y,y]。第一个参数表示对于x来说从哪画到哪,我们这里需要覆盖所有的x,因此填写从year(2)到year(end),如果只想画前三个x,则填year(2),year(4)即可。而第二个参数是决定辅助线的y值从哪到哪,这里只需要在0.5即可,因此两个都填0.5
text(year(end-1)+0.2,0.55,'临界线') ,此函数则是在图中添加文本,第一个参数为x坐标的值,第二个为y坐标的值,第三个为所需要添加的文本

(3)得到两个指标并进行判断


此段代码给出了两个指标,并给出了指标的判断依据,由用户来填写是否通过检验

4.模型的误差比对与挑选————训练与试验

(1)设置训练数据与试验数据

如果数据量大于7,则取后三个为试验数据,反正选择后两个为试验数据

(2)进行训练

此段代码调用了三个函数进行训练,这三个函数分别对应着传统的GM(1,1)模型,新信息GM(1,1)模型,新陈代谢GM(1,1)模型。第一个参数为训练数据,第二个参数为预测的期数

(3)误差比较

此段代码画出了预测数据的图像,并计算了各个模型的误差平方和

(4)选择模型

此段代码通过比较各个模型的SSE,选出最小的SSE作为我们的预测模型

(5)进行预测

此段代码需要用户输入需要预测的期数。输入后,此段代码会先用最原始的模型生成相对残差级比偏差,然后用我们所选择的模型更新预测结果

(6)输出结果

此处输出了结果,但单看数值非常单薄,在后面我们会将预测出来的结果作图可视化。
如果原始数据不够,那么会直接套用这三种模型取一个平均,代码也体现出来了,这里不过多叙述

(7)绘制相对残差和级比偏差的图形

这里的相对残差和级比偏差要求不大于0.1才比较合适,我们也可以在图片上加上辅助线,此处只有1个地方大于0.1,因此模型还是不错的

(8)残差检验与级比偏差检验

此段代码会输出两个检验的结果

(9)绘制最终的预测效果图


posted @ 2024-07-07 19:24  卢宇博  阅读(33)  评论(0编辑  收藏  举报