数模百科】一篇文章讲清楚灰色预测模型GM(1,n)附python代码

本篇文章摘录自GM(1,n) - 数模百科,如果你希望了解更多关于灰色模型的知识,请移步 灰色预测模型 - 数模百科

在阅读本篇文章之前,强烈建议先阅读这篇文章 【数模百科】一篇文章讲清楚灰色预测模型GM(1,1)附python代码-CSDN博客

回归正题。

说到GM(1,n)模型,这里面的“1”表示模型中只有一个微分方程,而“n”则说明有n个变量参与进来。与我们之前了解的GM(1,1)模型不同,在GM(1,1)模型中只有一个因变量和一个自变量,而GM(1,n)模型则是在多变量的情况下进行预测,适合那种多因素影响下的预测问题。

比方说,咱们要预测一个地区的电力消费量,这个消费量可能不仅仅和时间有关,还可能和当地的经济发展水平、人口数量、工业结构等多个因素有关。这种多因子的情况下,就可以考虑用GM(1,n)模型来进行预测分析,它可以帮助咱们从有限的、不完全的数据中,找到这些因素与电力消费量之间的关系。

总结一下,GM(1,n)模型是灰色预测的一种扩展,它适用于数据量不大、信息不完全但又受多种因素影响的预测场景。通过对不完全信息的把握和挖掘,GM(1,n)模型能够帮助我们在复杂多变的实际问题中,找到规律,进行相对准确的预测。

定义与详解

灰色预测模型GM(1,n)被广泛应用于对多元变量的预测。这个模型通过灰色关联度来度量因素之间的影响关系。

给定一个多元时间序列数据集

X^{(0)}=\{x_1^{(0)}, x_2^{(0)}, ..., x_n^{(0)}\},

其中,x_k^{(0)}为第 k 个变量向量, k=1,2, ..., n。我们先生成累加序列

X^{(1)}=\{x_1^{(1)}, x_2^{(1)}, ..., x_n^{(1)}\},

其中,

x_i^{(1)}(t) = \sum_{j=1}^{t}x_i^{(0)}(j), \quad i=1,2,...,n.

模型的微分方程为

\frac{dx_1^{(1)}}{dt}+a_2x_2^{(1)}+...+a_{n}x_{n}^{(1)}=u.

通过最小二乘法求解模型参数。

然后,求解得到的微分方程,生成预测序列

\hat X^{(1)}=\{\hat x_1^{(1)}(t), \hat x_2^{(1)}(t), ..., \hat x_n^{(1)}(t)\}

预测序列 \hat X^{(1)} 可以由以下公式得到:

\hat x_i^{(1)}(t) = (\frac{u}{a} + x_i^{(0)}(1) - \frac{u}{a}e^{at}),\quad t = 2, 3, ..., m

最后,通过将累加生成序列反演,即求差分,得到原始预测序列

\hat X^{(0)}=\{\hat x_1^{(0)}(t), \hat x_2^{(0)}(t), ..., \hat x_n^{(0)}(t)\}, \ t=2, 3, ..., m.

对于这种多变量的情况来说,GM(1,n)模型对于具有线性关系的多元序列具有较好的预测性能,但是当序列之间存在非线性关系时,模型的预测性能可能会下降。因此,灰色预测模型GM(1,n)更适用于短期预测,对于长期预测,需要其他更加合适的模型。

代码

import numpy as np
import math as mt
import matplotlib.pyplot as plt# 累加生成函数
def generate_AGO(m):return np.cumsum(m).tolist()# 紧邻均值生成函数
def generate_Z(m):return [(m[j]+m[j-1])/2 for j in range(1,len(m))]# 初始化原始数据和相关因素序列
orig_data = [560823,542386,604834,591248,583031,640636,575688,689637,570790,519574,614677]
factor_seq = [[104,101.8,105.8,111.5,115.97,120.03,113.3,116.4,105.1,83.4,73.3],[135.6,140.2,140.1,146.9,144,143,133.3,135.7,125.8,98.5,99.8],[131.6,135.5,142.6,143.2,142.2,138.4,138.4,135,122.5,87.2,96.5],[54.2,54.9,54.8,56.3,54.5,54.6,54.9,54.8,49.3,41.5,48.9]]# 生成累加序列和B矩阵
B = np.array(generate_Z(generate_AGO(orig_data))).reshape(-1, 1)
Xi = np.array([generate_AGO(x)[1:] for x in factor_seq]).T# 构建B矩阵和Y向量
B = np.hstack((-B, Xi))
Y = np.mat(orig_data)[0, 1:].T# 求解参数
params = np.linalg.inv(B.T.dot(B)).dot(B.T).dot(Y)
al, b = float(params[0]), np.array(params[1:]).flatten().tolist()# 构建驱动值
# 见数模百科# 计算预测并生成预测模型
F = [(orig_data[0] - U[i-1] / al) / (mt.exp(al * i)) + U[i-1] / al for i in range(len(U))]# 还原生成预测数据
F.insert(0, orig_data[0])
predicted_data = [F[i] - F[i - 1] for i in range(1, len(F))]
predicted_data.insert(0, orig_data[0])# 展示预测结果
plt.plot(orig_data, 'r--', label='原始数据')
plt.plot(predicted_data, 'b--', label='预测数据')
plt.legend(loc='upper right')
plt.show()

这段代码实现了灰色预测模型GM(1,n),并对预测结果进行了可视化,具体步骤如下:

  1. 根据初始数据,包括原始数据序列和相关序列,生成AGO(累加生成)序列。

  2. 对AGO序列进行紧邻均值生成计算,形成均值矩阵Z。

  3. 对相应的AGO序列和均值矩阵Z构建估值矩阵B和实际值向量Y。

  4. 利用最小二乘法求解参数向量theat,其中包含发展系数和驱动序列。

  5. 根据获得的参数计算预测序列,包括首先构造驱动值,然后基于这些驱动值和参数构造预测模型。

  6. 将预测序列通过累减还原操作转化为预测数据。

  7. 利用matplotlib库对原始数据和预测数据进行可视化展示,以便直观比较预测结果和实际情况。

通过这个程序,我们可以基于一组数据及其相关因素进行预测,然后用预测结果来进行未来趋势的判断或者进行决策。

优缺点

优点:

  1. 灰色预测模型GM(1,n)相对于GM(0,1)模型更能适应多因素问题,对复杂数据的预测和分析更为准确。

  2. 模型参数较少,计算复杂度低,易于理解和实施。

缺点:

  1. 对于数据波动较大、周期较长的问题,预测精度仍然有限。

  2. GM(1,n)模型仍然假设因素之间无显著关联,不适用于存在复杂关系的问题。

  3. 预测结果受初始值和参数设置的影响,敏感性较大。可能需要对参数进行合理的调整和校准,以提高预测精度。

本篇文章摘录自 数模百科 —— GM(1,n)模型

GM(1,n) - 数模百科

数模百科是一个由一群数模爱好者搭建的数学建模知识平台。我们想让大家只通过一个网站,就能解决自己在数学建模上的难题,把搜索和筛选的时间节省下来,投入到真正的学习当中。

我们团队目前正在努力为大家创建最好的信息集合,从用最简单易懂的话语和生动形象的例子帮助大家理解模型,到用科学严谨的语言讲解模型原理,再到提供参考代码。我们努力为数学建模的学习者和参赛者提供一站式学习平台,目前网站已上线,期待大家的反馈。

如果你想和我们的团队成员进行更深入的学习和交流,你可以通过公众号数模百科找到我们,我们会在这里发布更多资讯,也欢迎你来找我们唠嗑。

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

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

相关文章

【寒假每日一题·2024】AcWing 5396. 棋盘(补)

文章目录 一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、知识风暴 一、题目 1、原题链接 5396. 棋盘 2、题目描述 二、解题报告 1、思路分析 (1)首先初始棋盘均为白色的棋子,也就是棋盘数组默认为…

商家转账到零钱开通条件有哪些?转账场景

商家转账到零钱是什么? 【商家转账到零钱】可以说是【企业付款到零钱】的升级版,商家转账到零钱可以为商户提供同时向多个用户微信零钱转账的能力,支持分销返佣、佣金报酬、企业报销、企业补贴、服务款项、采购货款等自动向用户转账的场景。…

Nvidia-docker的基础使用方法

安装: 安装nvidia-docker: distribution$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.l…

区域入侵检测AI边缘计算智能分析网关V4如何通过ssh进行服务器远程运维

智能分析网关V4是一款高性能、低功耗的AI边缘计算硬件设备,它采用了BM1684芯片,集成高性能8核ARM A53,主频高达2.3GHz,并且INT8峰值算力高达17.6Tops,FB32高精度算力达到2.2T,每个摄像头可同时配置3种算法&…

nodejs下载安装

一、node下载安装 官网下载 官网 根据自己电脑系统选择合适的版本进行下载,我这里选择window 64 位 下载完点击安装 打开cmd查看安装 此处说明下:新版的Node.js已自带npm,安装Node.js时会一起安装,npm的作用就是对Node.js…

【小笔记】算法训练基础超参数调优思路

【学而不思则罔,思维不学则怠】 本文总结一下常见的一些算法训练超参数调优思路(陆续总结更新),包括: batchsize学习率epochsdropout(待添加) Batch_size 2023.9.29 简单来说,较…

速通——决策树(泰坦尼克号乘客生存预测案例)

一、决策树 1、概述 树中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,每个叶子节点代表一种分类结果 2、建立过程 1. 特征选择:选取有较强分类能力的特征。 2. 决策树生成:根据选择的特征生成决策树。 3.…

论文笔记(三十九)Learning Human-to-Robot Handovers from Point Clouds

Learning Human-to-Robot Handovers from Point Clouds 文章概括摘要1. 介绍2. 相关工作3. 背景3.1. 强化学习3.2. 移交模拟基准 4. 方法4.1. Handover Environment4.2. 感知4.3. 基于视觉的控制4.4. 师生两阶段培训 (Two-Stage Teacher-Student Training) 5. 实验5.1. 模拟评估…

配置zabbix平台对数据库以及主从状态的监控

引言:明人不说暗话,今天分享下配置zabbix平台对数据库以及主从状态的监控 准备好zabbix监控平台(zabbix-server端)例10.12.153.235 db1客户端(zabbix-agent)例10.12.153.73 1.安装Zabbix存储库 # rpm -Uv…

【C语言深度剖析——第四节(关键字4)】《C语言深度解剖》+蛋哥分析+个人理解

追求本质,不断进步 本文由睡觉待开机原创,转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 这里写目录标题 一、空间的申请1.变量定义1.1变量定义的概念:1.2变…

C++初阶类与对象(二):详解构造函数和析构函数

上次为类与对象开了一个头:C初阶类与对象(一):学习类与对象、访问限定符、封装、this指针 今天就来更进一步 文章目录 1.类的6个默认成员函数2.构造函数2.1引入和概念2.2构造函数特性2.2.1特性1~42.2.2注意2.2.3特性5~72.2.4注意 …

3d模型线框怎么渲染不出来---模大狮模型网

如果您无法渲染出3D模型的线框,可能是由于以下原因: 未设置线框渲染选项在一些3D建模软件中,默认情况下可能不会渲染线框。要渲染线框,请确保已设置正确的渲染选项。通常,在软件的材质编辑器或渲染设置中可以找到相关选…