数学建模灰色预测GM(1,1)模型
大家好,我是北海。
灰色预测是较为简单的一种预测方法,今天讲解下灰色预测的基本思路。
本文对应的视频,关注公众号:数学建模BOOM,回复“课程”,查看精品数模讲解(包含模型算法原理、例题详细讲解、matlab代码讲解)
1 何为“灰色”?
灰色预测中的“灰色”究竟是什么意思呢?要想明白灰色,那就要先说到“白色系统”和“黑色系统”。
白色系统:系统的内部特征是完全已知的,给系统一个“输入”,就能得到一个准确的“输出”,而且整个过程是已知的。
典型例子:一个电阻就是一个白色系统。电压与电流之间的关系(欧姆定律)是已知的。知道电阻大小后,输入电压值,就能算出电流值。
黑色系统:外界并不知道系统的内部信息,只能通过它与外界的联系来加以观测研究。
典型例子:一辆车就是一个黑色系统。我们不懂车的内部构造和原理,但可以用方向盘、刹车和油门等进行操控。车对于司机来说就是个黑色系统。
灰色系统,就是介于白色和黑色系统之间,一部分信息是已知的,另一部分信息是未知的,系统内各因素间有不确定的关系。
例题:城市1986到1992年道路噪声平均声级数据见下表,请预测下一年的数据。
•某城市交通噪声数据/dB(A)
题目中的“年份-噪声”就是一个灰色系统。根据常识,年份和噪声之间存在联系(常识或从文献得知),但我们不知道具体的函数表达式,无法在数学上求解下一年的数据。
该灰色系统的特点:
- 数据量太少,无法用回归或神经网络预测
- 年份和噪声的数据是已知的
- 年份和噪声之间存在内在联系
- 具体函数关系未知
- 短期预测(只预测下一年)
问题中的“年份”和“噪声值”就是一种灰色系统。当题目中的数据量少、无明显规律时,一般可以使用灰色预测模型。
2 构造灰色预测模型
把题目给的数据画出来,横轴是年份,纵轴是噪声值:
这图像看不出什么规律,难以预测下一年的值。这也是灰色系统本身所决定的。
既然没有规律,那么我们就需要制造规律。
如何制造规律?常用方法是累加生成,这是使灰色系统由灰变白的一种方法(此外还有累减生成、加权邻值生成等,本文不再细讲)。
累加生成序列公式:
“序列”就是一组数。表中第三行的x右上角的“(0)”代表这是原始序列,也就是题目给的数据;第四行的x右上角带"(1)"则代表这是新的累加生成序列。
累加生成序列里的第k个数,是原始序列前k个数相加之和。所以本题的累加生成序列的第一个数就是71.1,第二个数就是71.1+72.4 = 143.5……
那么这个累加生成序列有什么用呢?画出年份和新序列的图像:
可见相比前面的原始图像,新的序列和年份的图像看起来像是一条直线!
这就是累加生成制造出来的规律(注意:更常见的是指数形式的图像,本题直线型的图像可视作指数型图像的特例)
如果能把这个“规律”用数学表达式写出来,就能求出x^(1)下一年的预测值;求出预测值后再将相邻两个x^(1)相减(累加生成序列的逆过程),就能得到噪声值x^(1)的预测值。
3 GM(1,1)模型
注意,已知年份和新序列的数据是已知的,我们现在缺少的是两者的函数关系式;
一旦函数求出来了,代入下一年的年份,就能求出下一年的噪声预测值了,本题也就解决了。
此时问题转变为已知自变量和因变量的数据,求出两者的函数关系式。
“如果一个东西它长得像鸭子,叫声像鸭子,走路也像鸭子,那么它就是一只鸭子”
生成的新序列和年份的图像看起来像一个指数曲线(直线),那么就可用一个指数曲线乃至一条直线的表达式来逼近这条线。
得到这个表达式,问题就解决了。
而怎么才能求出"指数曲线乃至一条直线的表达式"呢?
由高数知识可知,一阶常微分方程的通解形式就是指数函数,所以可通过构建一阶常微分方程,然后求解方程,就得到了函数表达式。
整体思路:
- 题目给的系统是灰色的,无法直接预测
- 构造累加序列,看起来像指数(直线)函数
- 如果知道该指数函数的表达式就能预测下一年数据
- 一阶常微分方程的通解形式就是指数函数
- 构建一阶常微分方程并求解,得到函数式
- 下一年年份代入函数式,得到预测值
此时的预测问题,就转变为:
- 构建年份t和累加生成序列x^(1)的一阶常微分方程
- 求解该方程
这种预测方法就称作GM(1,1)模型,是灰色预测模型的一种。其中的G是grey,M就是model,括号内第一个1代表着微分方程是一阶,而第二个1代表着方程中有1个变量。
拓展知识:既然有GM(1,1)模型,自然有GM(2,1)、GM(1,2)模型等。其中GM(2,1)就代表利用一个变量的二阶微分方程来进行灰色预测。本题的新序列与年份的函数图像接近指数函数或直线,是单调的变化过程,适合GM(1,1)模型;而如果画出的图像是非单调的摆动序列或饱和的S型序列,则可考虑GM(2,1)模型。
4 GM(1,1)模型的求解
构造新序列和年份的一阶微分方程:
想要求解微分方程,就必须知道微分方程中的参数a和u(高数基本知识)。
第一步:求出参数a和u
方程中的年份t和新序列x^(1)的数值是已知的,那么a和u究竟该取几,才能使微分方程的解与真实的已知数据最接近呢?
函数表达式的参数a和u未知,而变量t和x^(1)的数值已知,这种问题就要用最小二乘法,通过最小化误差的平方和求得最佳的参数a和u。
1、数据是离散的而不是连续的,所以:
写做
2、注意,Δt=(t+1)−t=1,始终为1;根据累加生成序列公式可知:
3、由1和2可得到
4、移项得:
5、式子左边是已知数据,右边就是含有未知数的函数,此时就可用最小二乘法求出参数a和u
得到该方程后,可用最小二乘法求解等号右边的两个未知参数:
- 最小二乘法是使拟合函数求的值与已知数据的平方差最小
- 方程矩阵形式Y=BU,U内包含所要求的a和u,如下:
最小二乘法也就是求 ( − )^T ( − )取最小值时的U,求解U的估计值为:
最小二乘法的具体求解过程涉及矩阵求导等,对于很多同学来说较难理解,在此不展开讲,套用该公式就行。这样就求得了参数a和u的估计值。
第二步:求解微分方程,得到累加序列的预测值,并根据累加序列公式求得原序列值的预测值(也就是下一年的噪声),题目也就做完了。
5 建立模型前的级比检验
上面说到,有可能存在模型检验不通过的情况,那么就白忙活一场了。
所以需要在使用GM(1,1)模型之前进行数据的级比检验,如果通过了该检验,则可以使用灰色预测。
计算参数 ( ):
如果 ( )在区间
内,则说明可用GM(1,1)模型;
如果 ( )在区间外,可尝试平移变换,也就是给每个数据都加上任意常数c,看是否在区间内;求解后再减去c;
多次平移变换后仍旧在区间外,则说明该问题不适合用GM(1,1)模型。
至于为什么通过了级比检验检验才可以使用灰色预测?我也不知道,如果有懂的同学希望能加文末的QQ群教教我……在比赛中我们只需要知道这样用就可以了。
注意,级比检验是需要在使用GM(1,1)模型之前进行的。之所以放到最后讲,是因为如果一开始就讲级比检验,很多同学就开始犯晕了,也不想再看下去了……
总结:模型整体思路
模型优点:数据少且无明显规律时可用,利用微分方程挖掘数据本质规律。
模型缺点:灰色预测只适合短期预测、指数增长的预测。
包含灰色预测在内的各种模型算法视频讲解(各模型的原理、例题和代码讲解,有课件和代码文件):