灰色预测原理及实例(附代码)
灰色预测
引言
古人说:“凡事预则立,不预则废。”办任何事情之前,必须先调查研究,摸清情况,深思熟虑,有科学的预见,周密的计划,这样才能达到预期的成功。
所谓预测,就是人们根据可获得的历史和现实数据,资料,运用一定的科学方法和手段,对人类社会、政治、军事、科学技术等发展趋势作出科学推测,以指导未来行动的方向,减少处理未来事件的盲目性。
灰色预测基于人们对系统演化不确定性特征的认识,运用序列算子对原始数据进行生成、处理,挖掘系统演化规律,建立灰色系统模型,对系统的未来状态作出科学的定量预测。同时,对于一个具体问题,究竟应该选择什么样的预测模型,应以充分的定性分析结论作为依据。模型的选择不是一成不变的,一个模型要经过多种检验才能判定其是否合理,是否有效。只有通过检验的模型才能用作预测模型。
灰色预测简介
通过对原始数据的生成处理来寻求系统变动的规律。生成数据序列较强的规律性,可以用它来建立相应的微分方程模型,从而预测事物未来的发展趋势和未来状态。
灰色预测的类型
- 时间序列预测
- 灾变预测
- 波形预测
- 系统预测
本篇文章例子为时间序列预测,其他类型使用方面较少并且比较深入,大家可以去借鉴别人文章。
最简单的模型:GM(1,1)
GM(1,1)模型
G:Grey(灰色);
M:模型;
(1,1):只含有一个变量的一阶微分方程模型;
实例
年份 | 1995 | 1996 | 1997 | 1998 | 1999 | 2000 | 2001 | 2002 | 2003 | 2004 |
---|---|---|---|---|---|---|---|---|---|---|
污水/亿吨 | 174 | 179 | 183 | 189 | 207 | 234 | 220.5 | 256 | 270 | 285 |
题目要求:根据给定表中数据预测未来10年的长江污水量
原理及求解
数据处理方法:
1.累加生成
原始序列为X(x=1 2 3…)
生成序列为Y(y=1 2 3…)
则:
Y(1)=X(1)
Y(2)=Y(1)+X(2)
Y(3)=Y(2)+X(3)
…
所谓的累加生成,就是将同一序列中的数据逐次相加以生成新的数据的一种手段,累加前的数列成为原始数列。累加后的数列称为原始数列。累加后的数列成为生成数列。累加生成是使灰色系统变白的一种方法,它在灰色系统理论中占有极其重要的地位。通过累加生成可以看出灰量累积过程的发展态势,使杂乱无章的原始数据中蕴含的积分特性或规律加以显化。2.累减生成
原始序列为X(x=1 2 3…)
生成序列为Y(y=1 2 3…)
则:
Y(1)=X(1)
Y(2)=X(2)-X(1)
Y(3)=X(3)-X(2)
…
累减生成是在获取增量信息时常用的生成,多数情况下累减生成对累加生成起还原作用,即累减生成是累加生成的逆运算。3.均值生成
原始序列为X(x=1 2 3…)
生成序列为Y(y=1 2 3…)
Y(1)=X(1)
Y(2)=aX(2)+(1-a)X(1)
Y(3)=aX(3)+(1-a)X(2)
…
在收集数据的时候,由于一些不易克服的困难导致数据序列出现空缺或无法使用的异常数据,需要在数据预处理中解决。均值生成是常用的构造新数据、填补老数据空穴、生成新数列的方法。
求解步骤框图
流程图:
求解步骤
Step1:
首先建立时间序列如下:
- X=(x(1),x(2),…x(n))
- 求级比L(k):
- L(k)=x(k-1)/x(k)
- 当所有的L(k)落在【exp(-2/(n+1)),exp(2/(n+1))】区间之内,认为可以做比较满意的GM(1,1)建模。(并不是说由有的数据没落入区间之内就不能建模,只是落在区间之内建模效果比较好)。
Step2:
将原始数据时间序列进行累加生成
- 设累加生成之后的序列为X’
Step3:
对累加生成之后的序列进行邻均值生成
邻均值生成是对等时距数列,用相邻数据的平均值构造生成新的数据。
设新生成的邻均值序列为Z,则:
- Z(k)=(X’(k)+X’(k+1))/2 ,k=1,2,…n
Step4:
构造数据矩阵B及数据向量Y
Step5:
计算发展系数a及灰作用量b
- 计算方法如下:
Step6:
建立模型求解时间响应函数并进行预测
- GM(1,1)模型X(k)+aZ(k)=b的白化方程:
的时间响应函数为:
Step7:精确度检验
- 相对残差检验
- 方差比检验
- 小误差概率检验
- 相对残差检验法:
- 设实际数据序列为X(k)
- 设模拟数据序列为X’(k)
- 则残差&为:
&(k)=X(k)-X‘(k)- 相对误差*k=|&(k)|/X(k)
- 方差比检验法:
- 设残差序列为&(k),其序列标准差为A。
- 原始序列为X(k),其序列标准差为B。
- 则方差比C=A/B。
- 小误差概率检验法:
- 设小误差概率为p,残差序列平均值为*&:
- P={|&(k)-*&|<0.6745B}
- 则p=P/原始数据序列长度
附小误差概率p及方差比检验标准(可在题目无要求精度时相对比较):
预测精度等级 p(小误差概率) C(方差比) 一级 >0.95 <0.35 二级 >0.8 <0.5 三级 >0.7 <0.65 四级 >0.6 >=0.65(不合格) 一般用作模型预测的话,精度等级要达到二级以上。
The End : MATLAB求解代码!!!
clc;clear;
%建立符号变量a(发展系数)和b(灰作用量)
syms a b;
c = [a b]';%原始数列
A = [174, 179, 183, 189, 207, 234, 220.5, 256, 270, 285];
%级比检验
n = length(A);
min=exp(-2/(n+1));
max=exp(2/(n+1));
for i=2:nans(i)=A(i-1)/A(i);
end
ans(1)=[];
for i=1:(n-1)if ans(i)<max&ans(i)>minelsefprintf('第%d个级比不在标准区间内',i)disp(' ');end
end%对原始数列 A 做累加得到数列 B
B = cumsum(A);%对数列 B 做紧邻均值生成
for i = 2:nC(i) = (B(i) + B(i - 1))/2;
end
C(1) = [];%构造数据矩阵
B = [-C;ones(1,n-1)];
Y = A; Y(1) = []; Y = Y';%使用最小二乘法计算参数 a(发展系数)和b(灰作用量)
c = inv(B*B')*B*Y;
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%对数列 F 累减还原,得到预测出的数据
G = []; G(1) = A(1);
for i = 2:(n+10)G(i) = F(i) - F(i-1); %得到预测出来的数据
enddisp('预测数据为:');
G%模型检验H = G(1:n);
%计算残差序列
epsilon = A - H;%法一:相对残差Q检验
%计算相对误差序列
delta = abs(epsilon./A);
%计算相对误差平均值Q
disp('相对残差Q检验:')
Q = mean(delta)%法二:方差比C检验
disp('方差比C检验:')
C = std(epsilon, 1)/std(A, 1)%法三:小误差概率P检验
S1 = std(A, 1);
tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
disp('小误差概率P检验:')
P = length(tmp)/n%绘制曲线图
t1 = 1995:2004;
t2 = 1995:2014;plot(t1, A,'ro'); hold on;
plot(t2, G, 'g-');
xlabel('年份'); ylabel('污水量/亿吨');
legend('实际污水排放量','预测污水排放量');
title('长江污水排放量增长曲线');
grid on;
好了,这就是本篇博客的全部内容了,首先非常感谢您能看到本篇文章最后,那么如果看到它的你还有什么地方不懂,可以单独来问我,I'm goldsun,期待下次相遇。
灰色预测原理及实例(附代码)相关推荐
- 辗转相除法求最大公约数原理分析(附代码实现)
辗转相除法求最大公约数原理分析(附代码实现) 前言 解释 原理分析 代码 结语 前言 辗转相除法用起来很简单,但是其原理却自己想不明白.于是乎看了几篇有关辗转相除法原理的分析,在这里自己写下自己的理解 ...
- Python科学绘图实例附代码
Python绘图精简实例附代码 作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591 Python绘图精简实例附代 ...
- 运用自回归滑动平均模型、灰色预测模型、BP神经网络三种模型分别预测全球平均气温,并进行预测精度对比(附代码、数据)
大家好,我是带我去滑雪,每天教你一个小技巧!全球变暖是近十年来,人们关注度最高的话题.2022年夏天,蔓延全球40℃以上的极端天气不断刷新人们对于高温的认知,人们再也不会像从前那样认为全球变暖离我们遥 ...
- 灰色预测原理及JAVA实现
最近在做项目时,用户不想使用平均值来判断当前数据状态,想用其他的方式来分析数据的变化状态,在查找了一些资料后,想使用灰色预测来进行数据的预测.下面的内容是从网上综合下来的,java代码也做了一点改动, ...
- 【Python】基于Python的机器学习回归:可视化、预测及预测结果保存(附代码)
目录 0 一个交互性的软件 0 大无语事件 1 简介 2 数据 3 代码 4 效果 5 关于数据获取 0 一个交互性的软件 基于相关需求,我使用python封装了一个交互性机器学习回归软件,现已依托单 ...
- AlphaGoZero 原理讲解(附代码)
AlphaGoZero 原理讲解 前言 一.AlphaGoZero 棋盘编码器 二.AlphaGoZero树搜索算法 1. 树节点及其动作分支 2. 选择要探索的动作分支 3. 扩展搜索树 4. 选择 ...
- 【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)
- 【时间序列】最完整的时间序列分析和预测(含实例及代码)
时间序列 在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻所得到的离散数字组成的序列集合,称之为时间序列. pandas生成时间序列 过滤数据 重采样 插值 滑窗 数据平稳性与 ...
- 最完整的时间序列分析和预测(含实例及代码)
时间序列 在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻所得到的离散数字组成的序列集合,称之为时间序列. pandas生成时间序列 过滤数据 重采样 插值 滑窗 数据平稳性与 ...
最新文章
- java 圆的交点_java求两个圆相交坐标
- CentOS7使用nmcli实现网络日常管理及多网卡bond
- C语言的指针初始化特别注意一点
- MIUI 13:带来全新小部件,新增三大隐私保护功能等
- emacs .emacs_使用Emacs进行社交并跟踪您的待办事项列表
- pycharm构建虚拟环境_10分钟,带你用Python构建RESTful API 服务
- 通过cordova将vue项目打包成app
- 【cornerstoneTools】【vue】使用cornerstoneTools搭建标注系统相关代码
- nginx学习笔记01
- OKHttp原理讲解之基本概念
- idea将本地新项目上传至svn
- 圆孔夫琅禾费衍射MATLAB程序,模拟夫琅禾费衍射的matlab源代码
- 机械制图与计算机绘图实训报告前言,机械制图论文2000字_机械制图总结以及心得2000字_大一机械制图结课论文...
- 云计算给IT产业结构带来的影响 .
- 如何将诸如Acrobat Reader DC等默认安装在C盘的软件,安装在非系统盘?
- VMware安装树莓派(一)
- 【学习笔记】第三章 Python在高等数学和线性代数中的应用
- Javascript进阶笔记
- 国产操作系统还有比windows系统要好的地方?
- Z-score 与 Fisher-Z 的区别