灰色预测法 —— python

目录

1.简介

2.算法详解

2.1 生成累加数据

2.2  累加后的数据表达式

2.3 求解2.2的未知参数

3.实例分析

3.1 导入数据

3.2 进行累加数据

 3.3 求解系数

3.4 预测数据及对比

完整代码


1.简介

        灰色系统理论认为对既含有已知信息又含有未知或非确定信息的系统进行预测,就是对在一定方位内变化的、与时间有关的灰色过程的预测。尽管过程中所显示的现象是随机的、杂乱无章的,但毕竟是有序的、有界的,因此这一数据集合具备潜在的规律,灰色预测就是利用这种规律建立灰色模型对灰色系统进行预测。

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

2.算法详解

2.1 生成累加数据

2.2  累加后的数据表达式

2.3 求解2.2的未知参数

3.实例分析

现有1997—2002年各项指标相关统计数据如下表:

年份

第一产业

GDP

消费
价格指数

第三产业

GDP

1997

72.03

241.2

1592.74

1998

73.84

241.2

1855.36

1999

74.49

244.8

2129.60

2000

76.68

250.9

2486.86

2001

78.00

250.9

2728.94

2002

79.68

252.2

3038.90

用灰色预测方法预测2003—2009年各项指标的数据。且已知实际的预测数据如下:将预测数据与实际数据进行比较

年份

第一产业GDP

居民消费价格指数

第三产业GDP

2003

81.21

256.5

3458.05

2004

82.84

259.4

3900.27

2005

84.5

262.4

4399.06

2006

86.19

265.3

4961.62

2007

87.92

268.3

5596.13

2008

89.69

271.4

6311.79

2009

91.49

274.5

7118.96

3.1 导入数据

#原数据
data=np.array([[72.03,241.2,1592.74],[73.84,241.2,1855.36],[74.49,244.8,2129.60],[76.68,250.9,2486.86],[78.00,250.9,2728.94],[79.68,252.2,3038.90]])
#要预测数据的真实值
data_T=np.array([[81.21,256.5,3458.05],[82.84,259.4,3900.27],[84.5,262.4,4399.06],[86.19,265.3,4961.62],[87.92,268.3,5596.1],[89.69,271.4, 6311.79],[91.49,274.5,7118.96]])

返回结果,请自行打印查看

3.2 进行累加数据

#累加数据
data1=np.cumsum(data.T,1) #按列相加
print(data1)

返回:

 3.3 求解系数

[m,n]=data1.shape #得到行数和列数 m=3,n=6
#对这三列分别进行预测
X=[i for i in range(1997,2003)]#已知年份数据
X=np.array(X)
X_p=[i for i in range(2003,2010)]#预测年份数据
X_p=np.array(X_p)
X_sta=X[0]-1#最开始参考数据
#求解未知数
for j in range(3):B=np.zeros((n-1,2))for i in range(n-1):B[i,0]=-1/2*(data1[j,i]+data1[j,i+1])B[i,1]=1Y=data.T[j,1:7]a_u=np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y.T)print(a_u)#进行数据预测a=a_u[0]u=a_u[1]

返回:

 得到3对 a和u

3.4 预测数据及对比

需在3.3的基础上进行预测

[m,n]=data1.shape #得到行数和列数 m=3,n=6
#对这三列分别进行预测
X=[i for i in range(1997,2003)]#已知年份数据
X=np.array(X)
X_p=[i for i in range(2003,2010)]#预测年份数据
X_p=np.array(X_p)
X_sta=X[0]-1#最开始参考数据
#求解未知数
for j in range(3):B=np.zeros((n-1,2))for i in range(n-1):B[i,0]=-1/2*(data1[j,i]+data1[j,i+1])B[i,1]=1Y=data.T[j,1:7]a_u=np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y.T)
#     print(a_u)#进行数据预测a=a_u[0]u=a_u[1]T=[i for i in range(1997,2010)]T=np.array(T)data_p=(data1[0,j]-u/a)*np.exp(-a*(T-X_sta-1))+u/a #累加数据
#     print(data_p)data_p1=data_pdata_p1[1:len(data_p)]=data_p1[1:len(data_p)]-data_p1[0:len(data_p)-1]
#     print(data_p1)title_str=['第一产业GDP预测','居民消费价格指数预测','第三产业GDP预测']plt.subplot(221+j)data_n=data_p1plt.scatter(range(1997,2003),data[:,j])plt.plot(range(1997,2003),data_n[X-X_sta])plt.scatter(range(2003,2010),data_T[:,j])plt. plot(range(2003,2010),data_n[X_p-X_sta-1])
#     plt.title(title_str[j])plt.legend(['实际原数据','拟合数据','预测参考数据','预测数据'])y_n=data_n[X_p-X_sta-1].Ty=data_T[:,j]wucha=sum(abs(y_n-y)/y)/len(y)titlestr1=[title_str[j],'预测相对误差:',wucha]plt.title(titlestr1)plt.show()

返回:

完整代码

import numpy as np
import matplotlib.pyplot as plt
import math# 解决图标题中文乱码问题
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题#原数据
data=np.array([[72.03,241.2,1592.74],[73.84,241.2,1855.36],[74.49,244.8,2129.60],[76.68,250.9,2486.86],[78.00,250.9,2728.94],[79.68,252.2,3038.90]])
#要预测数据的真实值
data_T=np.array([[81.21,256.5,3458.05],[82.84,259.4,3900.27],[84.5,262.4,4399.06],[86.19,265.3,4961.62],[87.92,268.3,5596.1],[89.69,271.4, 6311.79],[91.49,274.5,7118.96]])#累加数据
data1=np.cumsum(data.T,1)
print(data1)[m,n]=data1.shape #得到行数和列数 m=3,n=6
#对这三列分别进行预测
X=[i for i in range(1997,2003)]#已知年份数据
X=np.array(X)
X_p=[i for i in range(2003,2010)]#预测年份数据
X_p=np.array(X_p)
X_sta=X[0]-1#最开始参考数据
#求解未知数
for j in range(3):B=np.zeros((n-1,2))for i in range(n-1):B[i,0]=-1/2*(data1[j,i]+data1[j,i+1])B[i,1]=1Y=data.T[j,1:7]a_u=np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y.T)
#     print(a_u)#进行数据预测a=a_u[0]u=a_u[1]T=[i for i in range(1997,2010)]T=np.array(T)data_p=(data1[0,j]-u/a)*np.exp(-a*(T-X_sta-1))+u/a #累加数据
#     print(data_p)data_p1=data_pdata_p1[1:len(data_p)]=data_p1[1:len(data_p)]-data_p1[0:len(data_p)-1]
#     print(data_p1)title_str=['第一产业GDP预测','居民消费价格指数预测','第三产业GDP预测']plt.subplot(221+j)data_n=data_p1plt.scatter(range(1997,2003),data[:,j])plt.plot(range(1997,2003),data_n[X-X_sta])plt.scatter(range(2003,2010),data_T[:,j])plt. plot(range(2003,2010),data_n[X_p-X_sta-1])
#     plt.title(title_str[j])plt.legend(['实际原数据','拟合数据','预测参考数据','预测数据'])y_n=data_n[X_p-X_sta-1].Ty=data_T[:,j]wucha=sum(abs(y_n-y)/y)/len(y)titlestr1=[title_str[j],'预测相对误差:',wucha]plt.title(titlestr1)plt.show()

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

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

相关文章

python爬虫怎么爬小说_python爬虫爬取笔趣网小说网站过程图解

首先:文章用到的解析库介绍 BeautifulSoup: Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。 它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代…

时间序列的预处理之纯随机性检验

目录 1.纯随机序列的定义 2.性质 3.纯随机性检验 1.纯随机序列的定义 纯随机序列也称为白噪声序列,满足如下性质:2.性质 纯随机性(无记忆性)方差齐性举例,随机生成1000个白噪声序列 用正态分布序列 rnorm(数量&am…

ARMA模型的性质之方法性工具

目录 一、差分 Xt 二、延迟算子 延迟算子的性质 p阶差分 k步差分 三、线性差分方程 齐次线性差分方程的解 非齐次线性差分方程的解 时序分析与线性差分方程的关系 一、差分 Xt 二、延迟算子 延迟算子类似于一个时间指针,当前序列值乘以一个延迟算子&…

python如何下载库_python中如何下载库

python下载安装库的方法: 1、在线安装 在cmd窗口直接运行:pip install 包名,如 pip install requests 注意:这种方式安装时会自动下载第三方库,安装完成后并不会删除,如需删除请到它的默认下载路径下手动删…

ARMA模型的性质 1

目录 1.wold分解定理(1938) 2.AR模型 2.1定义: AR(p) 有三个限制条件: 中心化 AR(p) 模型 2.2 AR模型的平稳性判别 序列拟合函数 R 举例 1.wold分解定理(1938) 对于任何一个离散平稳序列 {xt} 他都…

python 二维码_Python提取支付宝和微信支付二维码

本文首发于我的个人博客,更多 Python 和 django 开发教程,请访问 追梦人物的博客。支付宝或者微信支付导出的收款二维码,除了二维码部分,还有很大一块背景图案,例如下面就是微信支付的收款二维码:有时候我们…

ARMA模型的平稳性判别(续)

目录 1.特征根判别法 AR(p)模型对应齐次方程特征根与回归系数多项式根的关系: 2.平稳域判别 (1)AR(1)(一阶)模型平稳域 (2)AR(2)(二阶)模型平稳域 3.举例 4.函数展开成幂级数——麦克劳林级数 小结 1.特征根判…

form表单中根据值判断是否disabled_Java 0基础入门 (Html表单、表单元素)

上一篇:Java 0基础入门 (Html标签的使用)表单在网页中主要负责数据采集功能。一.表单实际应用场景百度搜索5173注册如上两张图,图中的黑色线条是我画上去的,如果按照黑线,在Excle中画出这两张表单,相信大家都可以也不是…

ARMA模型性质之平稳AR模型得统计性质

目录 1.均值 Green函数定义 Green函数递推公式 2.方差 举例: 方法1: 方法2: 3.协方差函数 举例1: 举例2: 4.自相关系数 常用的ARA模型自相关系数递推公式: AR模型自相关系数的性质 举例 5.偏自…

LDA(线性判别分析(普通法))详解 —— python

在这里和大家道个歉,因为我有一篇matlab的LDA和这篇内容大致相同,我就犯懒了,直接复制,没想到公式复制过来全变成了图片,然后造成了,排版有问题,非常难看,真的很抱歉!&am…

wordpress 通过域名无法访问_VPS主机和宝塔面板搭建WordPress网站教程

这是一篇Wordpress建站教程,记录了我在VPS主机上,通过使用宝塔面板,搭建Wordpress网站或个人博客的详细步骤,外贸新人或小白在建立网站的时候可以作为参考。WordPress是全球最流行的建站程序,而且是免费的。用Wordpres…

猜数字小游戏

java代码 猜数字小游戏 程序分析 根据提示输入内容 获取输入的内容 使用for循环进行遍历使用if循坏进行数值的判断 输出结果 完整代码 import java.util.Scanner; import java.util.Random; public class mulTip{public static void main(String[] args){System.out.println…

LDA(线性判别分析(普通法))详解 —— matlab

目录 前言 正题 1.LDA的思想 2. 瑞利商(Rayleigh quotient)与广义瑞利商(genralized Rayleigh quotient) 3. 二类LDA原理 4.多类LDA原理 5.LDA分类 6.LDA算法流程 二类LDA matlab举例: 1.读取数据集 2.分离…

java 异步得到函数返回值_使用JavaScript进行异步编程

毫无疑问,虽然JavaScript的历史比较悠久,但这并不妨碍它成为当今最受欢迎的编程语言之一。对刚接触该语言的人来说,JavaScript的异步特性可能会有一些挑战。在本文中,我们将了解和使用Promise和async/await来编写小型异步程序。通…

ARMA模型的性质之MA模型

目录 一、MA模型的定义 二、MA模型的统计性质 1.常数均值 2.常数方差 3.自协方差函数q阶结尾 4.自相关系数q阶截尾 举例: 三、MA模型的可逆 1.可逆的定义和条件 2.MA与AR模型的对比 3.逆函数的递推公式 举例: 四、MA模型的偏自相关系数拖尾…

ARMA模型的性质之ARMA模型

目录 一、ARMA模型的定义 二、平稳条件与可逆条件 三、传递形式与逆转形式 四、ARMA(p,q)模型的统计性质 1.均值 2.自协方差函数 3.自相关系数 4.ARMA(p,q)模型自相关系数拖尾,偏自相关系数拖尾 小结 一、ARMA模型的定义 具有如下结构的模型称为自回归移动…

R之Excel文件读取与程序包的安装调用

目录 方法一 方法二 1.用命令安装 2.从下拉菜单安装 三、加载所需安装包 方法一 方法二 四、使用新程序包读取数据 方法一 另存为 .csv 文件 这是wps的另存为 然后选择位置,重命名或更改格式为 .csv 这是excel 的另存为 文件 —— 另存为 —— 选择位置 …

diag开关什么意思_双控开关接线图_一灯双控开关接线图_单联双控开关接线图_双控开关接线图实物图...

电工学习网:www.diangon.com关注电工学习网官方微信公众号“电工电气学习”,收获更多经验知识。双控开关接线图_一灯双控开关接线图_单联双控开关接线图_双控开关接线图实物图现在市场上面所出售的开关种类非常的多,双控开关正好能够满足人们…

Office 安装MathType7.4 未找到MathPage.wll等问题

目录 问题描述: 解决方法: 问题描述: MathType v7.4 简体中文版是一款功能很强大的数学公式编辑器,在很多地方都会用的,而wps就不能适应各种场合。 但是该软件总会因为不明原因,有时会出现找不到MathType.dll或者MathPage.wll文…

python导入excel加入折线图_利用python向excel文件写数据并绘制折线图

依赖 python 2.7.15 xlswriter(可以使用pip insall xlswriter) 具体实现 #!/usr/bin/env python # -*- coding:utf-8 -*- import xlsxwriter # Create a workbook and add a worksheet. workbook xlsxwriter.Workbook(Expenses01.xlsx) worksheet work…