文章目录

  • 前言
  • 一、灰色预测是什么?
  • 二、使用步骤
    • 1.使用条件
    • 2.以GM(1,1)为例
      • (1)级比值检验
      • (2)后验差比检验
      • (3)模型拟合检验
      • (4)模型残差检验
      • (5)级比偏差检验
  • 三 、总结
    • 1.代码总结
    • 2.公式总结

前言

灰色预测对原始数据进行生成处理来寻找系统变动的规律,并生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。


一、灰色预测是什么?

灰色预测是一种对含有不确定因素的系统进行预测的方法。 灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。 其用等时距观测到的反映预测对象特征的一系列数量值构造灰色预测模型,预测未来某一时刻的特征量,或达到某一特征量的时间

二、使用步骤

1.使用条件

这个应该是很清晰的,数据量少,四五个,然后类指数形式增长的,什么是类指数增长:就是一组数据累加后排列是否呈类指数增长,与且预测的时间不是很长,就可以用。 分为GM (1,1),GM (1,m),GM (n,m)分别用于一个自变量一个因变量,多个自变量一个因变量,多个自变量多个因变量。 灰色预测就是尽可能使用数据中含有的信息。 假设你有十组数据,需要预测接下来的三组数据,程序跑完,一般是有求残差的过程,看一看是不是小于0.1,如果每个数据点都是小于0.1,那这次灰色预测就是很好的。

注:

  1. 数据量较少的情况下使用;
  2. 数据呈类指数增长;
  3. 预测时间较短
  4. 要先进行级比值检验
  5. 后验差比检验
  6. 模型拟合检验
  7. 模型残差检验

2.以GM(1,1)为例

(1)级比值检验


(注:级比值介于区间[0.982,1.0098]时说明数据适合模型构建。)

从上表可知,针对某数据进行GM(1,1)模型构建,结果显示:级比值的最大值为1.010,在适用范围区间[0.982,1.0098]之外,意味着本数据进行GM(1,1)可能得不到满意的模型。但从数据来看,1.01非常接近于1.0098,因此有理由接着进行建模。

如下代码所示为数据级比检验:

m = length(A);
JiBi = ones(1,m-1);
for i =2:mJiBi(i-1) = A(i-1)/A(i);
end
max1 = max(JiBi);
min1 = min(JiBi);
FanWei = exp(2/(n+2))-exp(-2/(n+1))
if max1 - min1<FanWeidisp(['数据通过级别检验']);
else disp(['数据不通过级比检验']);
end

(2)后验差比检验


后验差比C值用于模型精度等级检验,该值越小越好,一般C值小于0.35则模型精度等级好,C值小于0.5说明模型精度合格,C值小于0.65说明模型精度基本合格,如果C值大于0.65,则说明模型精度等级不合格。

从上表可知,后验差比C值0.231 <=0.35,意味着模型精度等级非常好。

以下为发展系数、灰色作用量和C值代码:


%构造数据矩阵
B = [-C;ones(1,n-1)];
Y = A; Y(1) = []; Y = Y';      %Y进行了转置,C的公式求法与百度文库 发生了一些变化
% 使用最小二乘法计算参数 a(发展系数)和b(灰作用量)
c = inv(B*B')*B*Y;          %核心公式
c = c';
a = c(1); b = c(2);
disp(['发展系数:',num2str(a)]);
disp(['灰色作用量:',num2str(b)]);
%预测后续数据
F = []; F(1) = A(1);
%法二:方差比C检验
C = std(epsilon, 1)/std(A, 1);  %方差函数std   按照列分
disp(['方差比C检验:',num2str(C)]);

(3)模型拟合检验


上表格展示出模型的拟合值,以及向后12期的拟合数据情况,当然也可通过图形直观查看如下图,下图明显可以看出,往后时会一直下降,这是GM(1,1)模型的特征,其仅适用于中短期预测,因此向后1期和向后2期的数据具有价值,更多的预测数据需要特别谨慎对待。

以下为模型拟合检验代码:

%模型检验
H = G(1:T1);
epsilon = A - H;               %计算残差序列disp(['残差检验:',num2str(epsilon)]);

画图展示:

%绘制曲线图
plot(t1, A,'ro'); hold on;
plot(t2, G, 'g-');
grid on;

(4)模型残差检验


模型残差检验,主要是查看相对误差值和级比偏差值,验证模型效果情况。

从上表可知,模型构建后可对相对误差和级比偏差值进行分析,验证模型效果情况;模型相对误差值最大值0.007<0.1,意味着模型拟合效果达到较高要求。

针对级比偏差值,该值小于0.2说明达到要求,若小于0.1则说明达到较高要求;模型相对误差值最大值0.020<0.1,意味着模型拟合效果达到较高要求。

以下为残差值检验代码:

%法一:计算相对误差Q
delta = abs(epsilon./A);
Q = mean(delta);
disp(['相对残差Q检验:',num2str(Q)]);%法二:方差比C检验
C = std(epsilon, 1)/std(A, 1);  %方差函数std   按照列分
disp(['方差比C检验:',num2str(C)]);%法三:小误差概率P检验
S1 = std(A, 1);
tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
P = length(tmp)/n;
disp(['小误差概率P检验:',num2str(P)])

(5)级比偏差检验

这是在(check.m)函数里的,需要调用

 % 预测p_d = zeros(n, 1);for i = 1 : n - 1p_d(i + 1) = (1-exp(a))*(d(1)-b/a)*exp(-a*i);end% 级比偏差u = abs(d(2:end)-p_d(2:end))./d(2:end);disp('均级比偏差为(通常小于0.1则说明适合灰色预测):');disp(mean(u));% 相对残差disp('均级相对残差为(通常小于0.1则说明适合灰色预测):');e = abs(1-(1-0.5*a)/(1+0.5*a)*(d(1:end-1)./d(2:end)));disp(mean(e));
end

三 、总结

1.代码总结

clc;clear;      %建立符号变量a(发展系数)和b(灰作用量)
syms a b;
c = [a b]';    A = [1 4 6 9 10 12 21 34];    %输入需要预测的数据T1=length(A);
T2=100;                             %输入需要预测数据个数
t1=1:T1;
t2=1:T1+T2;
n = T1;m = length(A);
JiBi = ones(1,m-1);
for i =2:mJiBi(i-1) = A(i-1)/A(i);
end
max1 = max(JiBi);
min1 = min(JiBi);
FanWei = exp(2/(n+2))-exp(-2/(n+1))
if max1 - min1<FanWeidisp(['数据通过级别检验']);
else disp(['数据不通过级比检验']);
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';      %Y进行了转置,C的公式求法与百度文库 发生了一些变化
% 使用最小二乘法计算参数 a(发展系数)和b(灰作用量)
c = inv(B*B')*B*Y;          %核心公式
c = c';
a = c(1); b = c(2);
disp(['发展系数:',num2str(a)]);
disp(['灰色作用量:',num2str(b)]);
%预测后续数据
F = []; F(1) = A(1);for i = 2:T1+T2F(i) = (A(1)-b/a)*exp(-a*(i-1))+ b/a;
end
%对数列 F 累减还原,得到预测出的数据
G = []; G(1) = A(1);
for i = 2:T1+T2G(i) = F(i) - F(i-1); %得到预测出来的数据
end
disp(['预测数据为:',num2str(G)]);%模型检验
H = G(1:T1);
epsilon = A - H;               %计算残差序列disp(['残差检验:',num2str(epsilon)]);
%法一:计算相对误差Q
delta = abs(epsilon./A);
Q = mean(delta);
disp(['相对残差Q检验:',num2str(Q)]);%法二:方差比C检验
C = std(epsilon, 1)/std(A, 1);  %方差函数std   按照列分
disp(['方差比C检验:',num2str(C)]);%法三:小误差概率P检验
S1 = std(A, 1);
tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
P = length(tmp)/n;
disp(['小误差概率P检验:',num2str(P)])
%级比偏差和相对残差
check(A)%绘制曲线图
plot(t1, A,'ro'); hold on;
plot(t2, G, 'g-');
grid on;

2.公式总结

以上内容主要是针对如何使用灰色预测(GM(1,1))进行了一个概述,具体的公式讲解并没有列举出来,如若需要,再进行公式的细分和讲解。

【数学建模】灰色预测法相关推荐

  1. 数学建模常用模型(一):灰色预测法

    数学建模常用模型(一):灰色预测法 灰色预测法是一种用于处理少量数据.数据质量较差或者缺乏历史数据的预测方法.它适用于一些非线性.非平稳的系统,尤其在短期预测和趋势分析方面有着广泛的应用.灰色预测法作 ...

  2. 数学建模——灰色预测模型Python代码

    数学建模--灰色预测模型Python代码 """ Spyder Editor This is a temporary script file. ""& ...

  3. 数学建模方法-灰色预测法

    一.引言 大家好,今天是第三天,前两篇博文用到的数学建模方法应用的数学知识还比较少,在这一篇章,需要的数学知识变多了,大致需要一些高等数学中导数部分的知识,大家如果忘了的话记得自己去补哈.好言归正传, ...

  4. 数学建模-灰色预测模型(预测模型)

            灰色预测是指利用GM模型对系统行为特征的发展变化规律进行估计预测,同时也可以对行为特征的异常情况发生的时刻进行估计计算,以及对在特定时区内发生事件的未来时间分布情况做出研究等等.这些工 ...

  5. [数学建模]灰色关联分析--系统分析

    建模算法整理,文章主要介绍了 灰色关联分析.两个作用, 一是进行系统分析,判断影响系统发展的因素的重要性. 二是用于综合评价问题,给出研究对象或者方案的优劣排名. 本文主要介绍第一个应用 参考学习资料 ...

  6. 数学建模--灰色关联分析

    写在前面: 笔记为自行整理,内容出自课程<数学建模学习交流>,主讲人:清风 目录 灰色关联分析概述 应用一:进行系统分析 代码(python实现) 应用二:综合评价问题 灰色关联分析概述 ...

  7. 数学建模——灰色预测模型

    模型简介 灰色模型 (grey models) 是通过少量的,不完全的信息,建立灰色微分预测模型,对事物发展作出长期性的描述. 与灰色模型相对应的预测方法有回归分析等,但这些预测方法需要较大的样本,如 ...

  8. 数学建模-灰色关联度分析原理笔记

    文章目录 灰色关联分析法简介 步骤 画统计图,进行简单分析 确定分析数列 对变量进行预处理 计算子序列中各个指标与对应母指标的关联系数 计算灰色关联度 得到结论 讨论 评价类问题完整分析步骤(该方法) ...

  9. 数学建模—灰色关联分析

    1.灰色关联分析概述 对于多因素共同决定的抽象系统,人们往往希望知道,哪些是主要因素,哪些是次要因素:哪些因素对系统的发展影响较大,哪些因素对系统的影响较小.从而需要对系统进行分析. 数理统计中常用的 ...

最新文章

  1. 电路 | 稳压电路设计
  2. 相对熵(relative entropy或 Kullback-Leibler divergence,KL距离)的java实现(三)
  3. 你有没有靠谱的基因?一个人靠不靠谱,其实就看这三点:“凡事有交代,件件有着落,事事有回音。”...
  4. 速度提升一倍,无需实例掩码预测即可实现全景分割
  5. Keras——Keras简介、安装及backend
  6. Arbor Networks Spectrum新安全平台发布:高级威胁平台通过内部企业网络连接互联网上的攻击...
  7. 应届生如何成功进入产品经理岗位
  8. C# 将打印机临时缓存文件SPL转为图片文件EMF
  9. wc -m命令在统计字符数的时候为什么总是多一个?
  10. Chart.js给图片数据动态赋值
  11. MOCO: Momentum Contrast for Unsupervised Visual Representation Learning
  12. Spring源码窥探之:ImportBeanDefinitionRegistrar
  13. PyGame “超级玛丽”游戏专题开篇——“变态超级玛丽”的诞生
  14. 小度机器人3D数字勋章盲盒发售!抽盲盒,赢奖金!参与合成得稀有!
  15. e=vm2:vm in evm
  16. Ansys workbench 17.2 学习笔记
  17. 2020年中国生态环境污染治理投资现状分析:环境污染治理投资总额为10638.9亿元[图]
  18. Java程序员仿《大腕》经典对白(来自JavaEye的Nighthaven)
  19. 解决Windows7右键菜单出现乱码的详细步骤
  20. html分享标题描述图片尺寸,微信分享网页时自定义标题、描述和图片

热门文章

  1. 2014 acm亚洲区域赛(北京)总结
  2. Excel 2010 VBA 入门 139 创建工作簿级的自定义选项卡
  3. telnet不是内部或外部命令
  4. 01-leveldb概述
  5. 接口文档应该如何编写
  6. DNW FOR WIN7
  7. localhost拒绝了我们的连接请求
  8. 南卡耳机好还是万魔好?国产半入耳蓝牙耳机对比
  9. 【千锋Python2205班9.29笔记-day09-字符串(一阶段)】
  10. 关于video标签,禁止点击播放时自动全屏,和video出现诡异窗口重叠