数学建模学习笔记(十一)——预测模型

文章目录

    • 一、综述
    • 二、灰色预测简介
    • 三、GM(1, 1)模型
    • 四、使用灰色系统建模的前提 —— 准指数规律检验
    • 五、对于GM(1, 1)的检验
    • 六、GM(1, 1)模型的拓展
    • 七、什么时候使用灰色预测
    • 八、神经网络模型

一、综述

本文首先介绍了灰色预测模型,然后简要介绍了神经网络在预测中的应用。数据预测在数学建模中是一类常见的问题,准确地对数据进行预测是解决问题的关键。

二、灰色预测简介

白色系统灰色系统黑色系统
系统中的信息是已知的系统中一些信息已知,一些信息未知系统中的信息都是未知的

灰色预测就是根据原始已知的数据来寻找系统变动的规律,然后建立相应的微分方程模型,从而对事物进行预测。

三、GM(1, 1)模型

在 GM(1, 1) 模型中,第一个 ‘1’ 代表微分方程是 1 阶的,后面的 ‘1’ 代表只有一个变量。

  1. GM(1, 1) 原理介绍
    x(0)=(x(0)(1),x(0)(2),⋯,x(0)(n))x^{(0)} = (x^{(0)}(1), x^{(0)}(2), \cdots, x^{(0)}(n))x(0)=(x(0)(1),x(0)(2),,x(0)(n)) 是最初的非负数据序列 (灰色预测模型处理的数据一定要是非负的),对其进行一次累加得到新的生成数据列 x(1)x^{(1)}x(1)x(1)=(x(1)(1),x(1)(2),⋯,x(1)(n))x^{(1)} = (x^{(1)}(1), x^{(1)}(2), \cdots, x^{(1)}(n))x(1)=(x(1)(1),x(1)(2),,x(1)(n)) 其中,x(1)(m)=∑i=1mx(0)(i),m=1,2,⋯,nx^{(1)}(m) = \sum_{i = 1}^{m}x^{(0)}(i), m = 1, 2, \cdots, nx(1)(m)=i=1mx(0)(i),m=1,2,,n

    z(1)z^{(1)}z(1) 为数列 x(1)x^{(1)}x(1) 的紧邻均值生成数列,即

    z(1)=(z(1)(2),z(1)(3),⋯,z(1)(n))z^{(1)} = (z^{(1)}(2), z^{(1)}(3), \cdots, z^{(1)}(n))z(1)=(z(1)(2),z(1)(3),,z(1)(n))

    其中 z(1)(m)=δx(1)(m)+(1−δ)x(1)(m−1),m=2,3,⋯,nz^{(1)}(m) = \delta x^{(1)}(m) + (1 - \delta)x^{(1)}(m - 1), m = 2, 3, \cdots, nz(1)(m)=δx(1)(m)+(1δ)x(1)(m1),m=2,3,,n,并且 δ=0.5\delta = 0.5δ=0.5

    称方程 x(0)(k)+az(1)(k)=bx^{(0)}(k) + az^{(1)}(k) = bx(0)(k)+az(1)(k)=b 为 GM(1, 1) 模型的基本形式 (k=2,3,⋯,n)(k = 2, 3, \cdots, n)(k=2,3,,n)。其中,bbb 表示灰作用量,−a-aa 表示发展系数

    可以将其看作 y=kx+by = kx + by=kx+b ,从而利用多元回归中的 OLS 方法可以得到 a^\hat{a}a^b^\hat{b}b^ ,因此 x(0)(k)=−a^z(1)(k)+b^,(k=2,3,⋯,n)x^{(0)}(k) = -\hat{a}z^{(1)}(k) + \hat{b}, (k = 2, 3, \cdots, n)x(0)(k)=a^z(1)(k)+b^,(k=2,3,,n) x(0)(k)=−a^z(1)(k)+b^⇒x(1)(k)−x(1)(k−1)=−a^z(1)(k)+b^x^{(0)}(k) = -\hat{a}z^{(1)}(k) + \hat{b} \Rightarrow x^{(1)}(k) - x^{(1)}(k - 1) = -\hat{a}z^{(1)}(k) + \hat{b}x(0)(k)=a^z(1)(k)+b^x(1)(k)x(1)(k1)=a^z(1)(k)+b^ 又因为x(1)(k)−x(1)(k−1)=∫k−1kdx(1)(t)dtdtx^{(1)}(k) - x^{(1)}(k - 1) = \int_{k - 1}^{k}\frac{dx^{(1)}(t)}{dt}dtx(1)(k)x(1)(k1)=k1kdtdx(1)(t)dt z(1)(k)=x(1)(k)+x(1)(k−1)2≈∫k−1kx(1)dtz^{(1)}(k) = \frac{x^{(1)}(k) + x^{(1)}(k - 1)}{2} ≈ \int_{k - 1}^{k}x^{(1)}dtz(1)(k)=2x(1)(k)+x(1)(k1)k1kx(1)dt 因此,∫k−1kdx(1)(t)dtdt≈−a^∫k−1kx(1)(t)dt+∫k−1kb^dt=∫k−1k[−a^x(1)(t)+b^]\int_{k - 1}^{k}\frac{dx^{(1)}(t)}{dt}dt ≈ -\hat{a}\int_{k - 1}^{k}x^{(1)}(t)dt + \int_{k - 1}^{k}\hat{b}dt \\= \int_{k - 1}^{k}[-\hat{a}x^{(1)}(t) + \hat{b}]k1kdtdx(1)(t)dta^k1kx(1)(t)dt+k1kb^dt=k1k[a^x(1)(t)+b^],便可以的带微分方程:dx(1)(t)dt=−a^x(1)(t)+b^\frac{dx^{(1)}(t)}{dt} = -\hat{a}x^{(1)}(t) + \hat{b}dtdx(1)(t)=a^x(1)(t)+b^,这就是 GM(1, 1) 模型的白化方程

    取初始值 x^(1)∣t=1=x(0)(1)\hat{x}^{(1)}|_{t = 1} = x^{(0)}(1)x^(1)t=1=x(0)(1),于时可以求出其对应的解为:x^(1)(m+1)=[x(0)(1)−b^a^]e−a^m+b^a^,m=1,2,⋯,n−1\hat{x}^{(1)}(m + 1) = [x^{(0)}(1) - \frac{\hat{b}}{\hat{a}}]e^{-\hat{a}m} + \frac{\hat{b}}{\hat{a}}, m = 1, 2, \cdots, n - 1x^(1)(m+1)=[x(0)(1)a^b^]ea^m+a^b^,m=1,2,,n1 由于 x(1)(m)=∑i=1mx(0)(i),m=1,2,⋯,nx^{(1)}(m) = \sum_{i = 1}{m}x^{(0)}(i), m = 1, 2, \cdots, nx(1)(m)=i=1mx(0)(i),m=1,2,,n,因此:x^(0)(m+1)=x^(1)(m+1)−x^(1)(m)=(1−ea^)[x(0)(1)−b^a^]e−a^m,m=1,2,⋯,n−1\hat{x}^{(0)}(m + 1) = \hat{x}^{(1)}(m + 1) - \hat{x}^{(1)}(m) \\= (1 - e^{\hat{a}})[x^{(0)}(1) - \frac{\hat{b}}{\hat{a}}]e^{-\hat{a}m}, m = 1, 2, \cdots, n - 1x^(0)(m+1)=x^(1)(m+1)x^(1)(m)=(1ea^)[x(0)(1)a^b^]ea^m,m=1,2,,n1

四、使用灰色系统建模的前提 —— 准指数规律检验

定义原始序列 x(0)x^{(0)}x(0) 的光滑比 ρ(k)=x(0)(k)x(1)(k−1)\rho(k) = \frac{x^{(0)}(k)}{x^{(1)}(k - 1)}ρ(k)=x(1)(k1)x(0)(k),要使 x(1)x^{(1)}x(1) 具有准指数规律,只需要保证 ρ(k)∈(0,0.5)\rho(k) \in (0, 0.5)ρ(k)(0,0.5) 即可。
注意:在实际建模中,我们要计算出 ρ(k)∈(0,0.5)\rho(k) \in (0, 0.5)ρ(k)(0,0.5) 的占比,占比越高越好。(一般前两期:ρ(2)\rho(2)ρ(2)ρ(3)\rho(3)ρ(3) 可能不符合要求,我们要关注的是后面的期数)
同时,所有数据光滑比 < 0.5 的占比一般要达到 60%;除去前两期后,光滑比 < 0.5 的占比一般要达到 90%

五、对于GM(1, 1)的检验

使用 GM(1, 1) 模型对未来数据进行预测是,我们需要先检验 GM(1, 1) 模型对原数据的拟合程度。一般有残差检验级比偏差检验两种方法。

  1. 残差检验
    绝对残差:ε(k)=x(0)(k)−x^(0)(k),k=2,3,⋯,n\varepsilon(k) = x^{(0)}(k) - \hat{x}^{(0)}(k), k = 2, 3, \cdots, nε(k)=x(0)(k)x^(0)(k),k=2,3,,n

    相对残差:εr(k)=∣x(0)(k)−x^(0)(k)∣x(0)(k)×100%,k=2,3,⋯,n\varepsilon_r(k) = \frac{|x^{(0)}(k) - \hat{x}^{(0)}(k)|}{x^{(0)}(k)} \times 100\%, k = 2, 3, \cdots, nεr(k)=x(0)(k)x(0)(k)x^(0)(k)×100%,k=2,3,,n

    平均相对残差:εˉr=1n−1∑k=2n∣εr(k)∣\bar{\varepsilon}_r = \frac{1}{n - 1}\sum_{k = 2}^{n}|\varepsilon_r(k)|εˉr=n11k=2nεr(k)

    如果 εˉr<20%\bar{\varepsilon}_r < 20\%εˉr<20% ,则认为 GM(1, 1) 对原数据的拟合达到一般要求。
    如果 εˉr<10%\bar{\varepsilon}_r < 10\%εˉr<10% ,则认为 GM(1, 1) 对原数据的拟合效果非常不错。

  2. 级比偏差检验
    首先由 x(0)(k−1)x^{(0)}(k - 1)x(0)(k1)x(0)(k)x^{(0)}(k)x(0)(k) 计算出原始数据的级比 σ(k)\sigma(k)σ(k)σ(k)=x(0)(k)x(0)(k−1)(k=2,3,⋯,n)\sigma(k) = \frac{x^{(0)}(k)}{x^{(0)}(k - 1)} (k = 2, 3, \cdots, n)σ(k)=x(0)(k1)x(0)(k)(k=2,3,,n) 再根据预测出来的发展系数 −a^-\hat{a}a^ 计算出相应的级比偏差和平均级比偏差:η(k)=∣1−1−0.5a^1+0.5a^1σ(k)∣,ηˉ=∑k=2nη(k)(n−1)\eta(k) = |1 - \frac{1 - 0.5\hat{a}}{1 + 0.5\hat{a}}\frac{1}{\sigma(k)}|, \bar{\eta} = \sum_{k = 2}^{n}\frac{\eta(k)}{(n - 1)}η(k)=11+0.5a^10.5a^σ(k)1,ηˉ=k=2n(n1)η(k) 如果 ηˉ<0.2\bar{\eta} < 0.2ηˉ<0.2,则认为GM(1, 1) 对原数据的拟合达到一般要求。
    如果 ηˉ<0.1\bar{\eta} < 0.1ηˉ<0.1,则认为 GM(1, 1) 对原数据的拟合效果非常不错。

六、GM(1, 1)模型的拓展

除了上面介绍到的 GM(1, 1) 模型,还可以将 GM(1, 1) 模型做一个拓展,得到 新信息GM(1, 1) 模型新陈代谢GM(1, 1) 模型

  1. 新信息GM(1, 1)模型
    x(0)(n+1)x^{(0)}(n + 1)x(0)(n+1) 为最新信息,将 x(0)(n+1)x^{(0)}(n + 1)x(0)(n+1) 置入 X^{(0)},称用 X(0)=(x(0)(1),x(0)(2),⋯,x(0)(n+1))X^{(0)} = (x^{(0)}(1), x^{(0)}(2), \cdots, x^{(0)}(n + 1))X(0)=(x(0)(1),x(0)(2),,x(0)(n+1)) 建立的模型为新信息GM(1, 1)模型。

    简单来说,新信息GM(1, 1)模型就是将预测后的数据加入到原始数据序列中构成一个新的数据序列,然后利用这个新的数据序列来对后面的期数进行预测。

  2. 新陈代谢GM(1, 1)模型
    置入最新信息 x(0)(n+1)x^{(0)}(n + 1)x(0)(n+1),去掉最老信息 x(0)(1)x^{(0)}(1)x(0)(1),称用 X(0)=(x(0)(2),⋯,x(0)(n),x(0)(n+1))X^{(0)} = (x^{(0)}(2), \cdots, x^{(0)}(n), x^{(0)}(n + 1))X(0)=(x(0)(2),,x(0)(n),x(0)(n+1)) 建立的模型为新陈代谢GM(1, 1)模型

    同样,新陈代谢GM(1, 1)模型就是将预测后的新数据加入到原始数据序列中,然后删除最原始的哪个数据,从而构成一个新的数据序列。再利用这个新的数据序列对后面的期数进行预测。

一般来说,GM(1,1), 新信息GM(1, 1)以及新陈代谢GM(1, 1)这三个模型中,**新陈代谢GM(1, 1)**模型的效果最好。我们可以使用误差平方和 SSE 来观测这三个模型的好坏,取 SSE 最小的模型即可。

七、什么时候使用灰色预测

  1. 数据是以年份度量,而且是非负的。(月份或者季度就可以使用时间序列模型了)
  2. 数据能够经过准指数规律检验
  3. 数据不能太长也不能太短,一般大于3期,小于10期。

同时,我们还可以将数据分为训练组和试验组,使用不同模型对数据进行建模,从而判断哪种模型的预测效果最好。
(1)如果只有4期数据,则直接使用上述提到的三种模型进行建模,最后求一个平均值即可。
(2)如果有 > 4 并且 < 7 组数据,则设置 2 组试验组,其余的为训练组进行建模,选取效果最好的模型。
(3)如果有 > 7 并且 < 10 组数据,则设置 3 组试验组,其余的为训练组进行建模,选取效果最好的模型。

八、神经网络模型

可以参考这篇文章:神经网络

如果有错误的话,还请斧正~~~
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础入门(4)之布尔值

目录 一、Python布尔值 1)比较 2)评估值和变量 3)布尔真值 4)布尔假值 5)函数可以返回布尔值 6)练习题 一、Python布尔值 布尔值表示两个值之一&#xff1a; True或False。在编程中&#xff0c;您经常需要知道表达式是否为 True或False。举一些例子就明白了。 1)比较 当…

C语言if else语句详解

前面我们看到的代码都是顺序执行的&#xff0c;也就是先执行第一条语句&#xff0c;然后是第二条、第三条……一直到最后一条语句&#xff0c;这称为顺序结构。 但是对于很多情况&#xff0c;顺序结构的代码是远远不够的&#xff0c;这时我们就要使用判断语句即if else语句。 …

数学建模学习笔记(十二)——奇异值分解

文章目录一、综述二、奇异值分解三、使用SVD进行降维四、SVD的评价及应用一、综述 奇异值分解是线性代数中一种重要的矩阵分解方法&#xff0c;它在图形的压缩等方面具有重要的意义及作用。 二、奇异值分解 三个引理&#xff1a; AB 和 BA 非零的特征值完全相同&#xff1b;…

python基础入门(5)之运算符

目录 一、python运算符 1)算术运算符 2)赋值运算符 一、python运算符 1)算术运算符 自己赋值粘贴运行下就懂了&#xff01; 加减法&#xff1a;&#xff08; -&#xff09; a2 b3 ca-b da-b print(c,d)乘除法&#xff1a;&#xff08;* /&#xff09; a(50-5*6)/4 print(…

Python实例 61,62

61.题目&#xff1a;打印出杨辉三角形 程序设计&#xff1a; 第一步&#xff1a;先找规律&#xff0c;抽象化问题&#xff1a; 首先我们观察到&#xff0c;第一行为[1]&#xff0c;我们直接赋给一个变量&#xff1a;初始化数列 p [1] 其次我们观察到&#xff0c;下面的每一…

数学建模学习笔记(十三)——主成分分析

文章目录一、综述二、主成分分析三、主成分分析的计算步骤&#xff08;可在Matlab实现&#xff09;四、对于主成分的解释五、主成分分析的应用一、综述 主成分分析的本质是降维&#xff0c;她能够将多个指标转换为少数几个主成分。这些主成分之间互不相关&#xff0c;且是原变…

C语言逻辑运算符详解

情景模式&#xff1a;现在研发出了一款新的软件&#xff0c;要求使用者必须成年&#xff0c;并且成绩大于等于60&#xff0c;该怎么办呢&#xff1f; 或许你会想到使用嵌套的 if 语句&#xff0c;类似下面这样的代码&#xff1a; #include <stdio.h> int main() {int a…

C语言switch case语句详解

当分支比较少的时候我们使用if else语句解决&#xff0c;当分支比较多的时候&#xff0c;我们要使用switch case语句解决&#xff0c;针对分支的复杂性选择合适的程序解决。 当分支过多时&#xff0c;用 if else 处理会不太方便&#xff0c;而且容易出现 if else 配对出错的情…

Python实例 63,64

目录 63.题目&#xff1a;画椭圆 1.tkinter画椭圆 2.turtle画椭圆 64.题目&#xff1a;利用ellipse 和 rectangle 画图 63.题目&#xff1a;画椭圆 1.tkinter画椭圆 #63 from tkinter import * x 360 y 160 top y - 30 bottom y - 30canvas Canvas(width 500,height …

HTML学习笔记(一)

HTML5语法 文档类型 DOCTYPE声明文档类型 &#xff0c;必须位于第一行。 DOCTYPE不区分大小写以及单双引号。 DOCTYPE会触发浏览器以标准模式显示页面。 <!DOCTYPE HTML>字符编码 HTML5中简化了字符编码的写法&#xff0c;直接用 meta 即可 <meta charset "UTF-…

C语言条件运算符详解

如果希望获得两个数中最大的一个&#xff0c;可以使用 if 语句&#xff0c;例如&#xff1a; if(a>b){max a; }else{max b; }不过&#xff0c;C语言提供了一种更加简单的方法&#xff0c;叫做条件运算符&#xff0c;语法格式为&#xff1a; 表达式1 ? 表达式2 : 表达式…

C++ PAT 乙级 1007——素数对猜想

题目详情 让我们定义 dnd_ndn​ 为 dnpn1−pnd_n p_{n 1} - p_ndn​pn1​−pn​&#xff0c;其中 pip_ipi​ 是第 i 个素数。显然有 d11d_1 1d1​1&#xff0c;且对于 n > 1有 dnd_ndn​ 是偶数。 “素数对猜想”认为“存在无穷多对相邻且差为2的素数”&#xff0c;现给…

python实例 65,66

65.题目&#xff1a;一个最优美的图案 #65 import math class PTS:def __init__(self):self.x 0self.y 0 points []def LineToDemo():import tkinter screenx 400screeny 400canvas Canvas(width screenx,height screeny,bg white)AspectRatio 0.85MAXPTS 15h scr…

C语言while循环和do while循环详解

在C语言中&#xff0c;共有三大常用的程序结构&#xff1a; 顺序结构&#xff1a;代码从前往后执行&#xff0c;没有任何“拐弯抹角”&#xff1b; 选择结构&#xff1a;也叫分支结构&#xff0c;重点要掌握 if else、switch 以及条件运算符&#xff1b; 循环结构&#xff1…

C语言for循环详解

for 循环的使用更加灵活&#xff0c;在日常的程序开发过程中我们会使用的更多一些。 使用 while 循环来计算1加到100的值&#xff0c;代码如下&#xff1a; #include <stdio.h> int main(){int i, sum0;i 1; //语句①while(i<100 /*语句②*/ ){sumi;i; //语句③}…

python基础入门(6)之列表

目录 一、Python列表 一.列表基本知识 1)创建列表 2&#xff09;列出表值 3&#xff09;列表长度 4&#xff09;列表项 - 数据类型 5&#xff09;Python 集合&#xff08;数组&#xff09; 二.访问列表 1.正常索引 2)负索引 3)索引范围 4&#xff09;负指数范围 5…

山东大学 2020级数据库系统 实验一

What’s more? 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 …

C语言break和continue用法详解

使用while或for循环时&#xff0c;如果想提前结束循环&#xff08;在不满足结束条件的情况下结束循环&#xff09;&#xff0c;可以使用break或continue关键字。 break关键字 我们使用break来跳出 switch 语句。 当 break 关键字用于 while、for 循环时&#xff0c;会终止循…

python基础入门(7)之元组

目录 Python元组 一、元组理解 1.1&#xff09;基本定义 1.2&#xff09;元组长度 1.3&#xff09;数据类型 二、访问元组 2.1&#xff09;正常访问 2.2&#xff09;负索引 2.3&#xff09;范围性索引 三、更新元组 3.1&#xff09;替换 ​3.2&#xff09;添加项目…

山东大学 2020级数据库系统 实验二

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…