[原]灰色预测原理及MATLAB实现:
作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591
灰色模型预测的结果比较稳定,不仅适用于大数据量的预测,在数据量较少时(大于3个即可)预测结果依然较准确。
灰色系统理论是中国著名学者邓聚龙教授在1982年创立的一门新兴横断学科,它以“部分信息已知,部分信息未知”的“小样本”、“贫信息”不确定性系统为研究对象,主要通过对部分已知信息的生成、开发,提取有价值的信息,实现对系统运行规律的正确认识和确切描述,并据以进行科学预测。
所谓灰色系统是介于白色系统和黑箱系统之间的过渡系统,其具体的含义是:如果某一系统的全部信息已知为白色系统,全部信息未知为黑箱系统,部分信息已知,部分信息未知,那么这一系统就是灰箱系统。一般地说,社会系统、经济系统、生态系统都是灰色系统。
灰色预测Grey Prediction是以灰色模型Grey Model 为基础的,在诸多的灰色模型中,以灰色系统中单序列一阶线性微分方程模型GM(1,1)模型最为常用。下面简要介绍GM(1,1)模型。
设有原始数据
,n为数据个数。
例子中的原始数据为:
数据列建立GM(1,1)来实现预测功能,则基本步骤如下:
(1)原始数据累加以便弱化随机序列的波动性和随机性,得到新数据序列:

例子中的相应数据为:
(2)对
建立一阶线性微分方程:

其中,a,u为待定系数,分别称为发展系数和灰色作用量,a的有效区间是(-2,2),并记a,u构成的矩阵为
。只要求出a,u,就能求出
,进而求出
的未来预测值。
第(3)步和第(4)步为求a,u的过程。
(3)对累加生成数据
做均值得到列项量并加上一列全1列向量,生成
矩阵,对原始序列进行截取获得列向量
,即

例子中的相应数据依次是:
(4)用最小二乘法求解灰参数
,则

例子中得到a= -0.146 u=69891
(5)将
带入
,并求解得

为了与原序列
区分开来,故记为
。
(6)对函数表达式
及
进行离散,并将二者做差以便还原
原序列,得到近似数据序列
如下:


(7)对建立的灰色模型进行检验,步骤如下:
1.计算
和
之间的残差
和相对误差
:


2.求原始数据
的均值以及方差
。
3.求
的平均值以及残差的方差
。
4.计算方差比
。
5.求小误差概率
。
6.灰色模型精度检验如表所列:

作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591
灰色模型预测的结果比较稳定,不仅适用于大数据量的预测,在数据量较少时(大于3个即可)预测结果依然较准确。
灰色系统理论是中国著名学者邓聚龙教授在1982年创立的一门新兴横断学科,它以“部分信息已知,部分信息未知”的“小样本”、“贫信息”不确定性系统为研究对象,主要通过对部分已知信息的生成、开发,提取有价值的信息,实现对系统运行规律的正确认识和确切描述,并据以进行科学预测。
所谓灰色系统是介于白色系统和黑箱系统之间的过渡系统,其具体的含义是:如果某一系统的全部信息已知为白色系统,全部信息未知为黑箱系统,部分信息已知,部分信息未知,那么这一系统就是灰箱系统。一般地说,社会系统、经济系统、生态系统都是灰色系统。
灰色预测Grey Prediction是以灰色模型Grey Model 为基础的,在诸多的灰色模型中,以灰色系统中单序列一阶线性微分方程模型GM(1,1)模型最为常用。下面简要介绍GM(1,1)模型。
设有原始数据
例子中的原始数据为:
A=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670];如果根据
(1)原始数据累加以便弱化随机序列的波动性和随机性,得到新数据序列:
例子中的相应数据为:
B=[89677,188892,298547,418880,554703,714581,896902,1106309,1352928,1653598]
(2)对
其中,a,u为待定系数,分别称为发展系数和灰色作用量,a的有效区间是(-2,2),并记a,u构成的矩阵为
第(3)步和第(4)步为求a,u的过程。
(3)对累加生成数据
例子中的相应数据依次是:
E=-139284.5,-243719.5,-358713.5,-486791.5,-634642,-805741.5,-1001605.5,-1229618.5,-1503263 1, 1, 1, 1, 1, 1, 1, 1, 1 D=99215 109655 120333 135823 159878 182321 209407 246619 300670
(4)用最小二乘法求解灰参数
例子中得到a= -0.146 u=69891
(5)将
为了与原序列
(6)对函数表达式
clear
syms a b;
c=[a b]';
A=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670];
B=cumsum(A); % 原始数据累加
n=length(A);
for i=1:(n-1)
C(i)=(B(i)+B(i+1))/2; % 生成累加矩阵
end
% 计算待定参数的值
D=A;D(1)=[];
D=D';
E=[-C;ones(1,n-1)];
c=inv(E*E')*E*D;
c=c';
a=c(1);b=c(2);
% 预测后续数据
F=[];F(1)=A(1);
for i=2:(n+10)
F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a ;
end
G=[];G(1)=A(1);
for i=2:(n+10)
G(i)=F(i)-F(i-1); %得到预测出来的数据
end
t1=1999:2008;
t2=1999:2018;
plot(t1,A,'o',t2,G,'.r') %原始数据与预测数据的比较
xlabel('年份')
ylabel('利润')(7)对建立的灰色模型进行检验,步骤如下:
1.计算
2.求原始数据
3.求
4.计算方差比
5.求小误差概率
6.灰色模型精度检验如表所列:
作者:u012176591 发表于2014-7-12 22:47:19 原文链接
阅读:57 评论:0 查看评论
Comments
Post a Comment