预备知识

(1)灰色系统

白色系统是指系统内部特征是完全已知的;黑色系统是指系统内部信息完全未知的;而灰色系统是介于白色系统和黑色系统之间的一种系统,灰色系统其内部一部分信息已知,另一部分信息未知或不确定。

(2)灰色预测

灰色预测,是指对系统行为特征值的发展变化进行的预测,对既含有已知信息又含有不确定信息的系统进行的预测,也就是对在一定范围内变化的、与时间序列有关的灰过程进行预测。尽管灰过程中所显示的现象是随机的、杂乱无章的,但毕竟是有序的、有界的,因此得到的数据集合具备潜在的规律。灰色预测是利用这种规律建立灰色模型对灰色系统进行预测。

目前使用最广泛的灰色预测模型就是关于数列预测的一个变量、一阶微分的GM(1,1)模型。它是基于随机的原始时间序列,经按时间累加后所形成的新的时间序列呈现的规律可用一阶线性微分方程的解来逼近。经证明,经一阶线性微分方程的解逼近所揭示的原始时间序列呈指数变化规律。因此,当原始时间序列隐含着指数变化规律时,灰色模型GM(1,1)的预测是非常成功的。

Python代码如下:# -*- coding: utf-8 -*-

"""

Created on Mon Aug 29 19:23:24 2016

@author: DaiPW

"""

import numpy as np

from pandas import Series

from pandas import DataFrame

import pandas as pd

import matplotlib.pyplot as plt

def Identification_Algorithm(x): #辨识算法

B = np.array([[1]*2]*5)

tmp = np.cumsum(x)

for i in range(len(x)-1):

B[i][0] = ( tmp[i] + tmp[i+1] ) * (-1.0) / 2

Y = np.transpose(x[1:])

BT = np.transpose(B)

a = np.linalg.inv(np.dot(BT,B))

a = np.dot(a,BT)

a = np.dot(a,Y)

a = np.transpose(a)

return a;

def GM_Model(X0,a,tmp): #GM(1,1)模型

A = np.ones(len(X0))

for i in range(len(A)):

A[i] = a[1]/a[0] + (X0[0]-a[1]/a[0])*np.exp(a[0]*(tmp[i]-1)*(-1))

print ('GM(1,1)模型为:\nX(k) = ',X0[0]-a[1]/a[0],'exp(',-a[0],'(k-1))',a[1]/a[0])

XK = Series(A,index=pd.period_range('2000','2005',freq = 'A-DEC'))

print ('GM(1,1)模型计算值为:')

print (XK)

return XK;

def Return(XK): #预测值还原

tmp = np.ones(len(XK))

for i in range(len(XK)):

if i == 0:

tmp[i] = XK[i]

else:

tmp[i] = XK[i] - XK[i-1]

X_Return = Series(tmp,index=pd.period_range('2000','2005',freq = 'A-DEC'))

print ('还原值为:\n')

print (X_Return)

return X_Return

if __name__ == '__main__':

#初始化原始数据

date = pd.period_range('2000','2005',freq = 'A-DEC')

tmp = np.array([1,2,3,4,5,6])

data = np.array([132,92,118,130,187,207])

X0 = Series(data,index = date)

X0_copy = Series(data,index=tmp)

print ('原始数据为:\n')

print(X0)

#对原始数据惊醒一次累加

X1 = np.cumsum(X0)

print ('原始数据累加为:')

print(X1)

#辨识算法

a = Identification_Algorithm(data)

print ('a矩阵为:')

print (a)

#GM(1,1)模型

XK = GM_Model(X0,a,tmp)

#预测值还原

X_Return = Return(XK)

#预测值即预测值精度表

X_Compare1 = np.ones(len(X0))

X_Compare2 = np.ones(len(X0))

for i in range(len(data)):

X_Compare1[i] = data[i]-X_Return[i]

X_Compare2[i] = X_Compare1[i]/data[i]*100

Compare = {'GM':XK,'1—AGO':np.cumsum(data),'Returnvalue':X_Return,'Realityvalue':data,'Error':X_Compare1,'RelativeError(%)':X_Compare2}

X_Compare = DataFrame(Compare,index=date)

print ('预测值即预测值精度表')

print (X_Compare)

#模型检验

error_square = np.dot(X_Compare,np.transpose(X_Compare)) #残差平方和

error_avg = np.mean(error_square) #平均相对误差

S = 0 #X0的关联度

for i in range(1,len(X0)-1,1):

S += X0[i]-X0[0]+(XK[-1]-XK[0])/2

S = np.abs(S)

SK = 0 #XK的关联度

for i in range(1,len(XK)-1,1):

SK += XK[i]-XK[0]+(XK[-1]-XK[0])/2

SK = np.abs(SK)

S_Sub = 0 #|S-SK|b

for i in range(1,len(XK)-1,1):

S_Sub += X0[i]-X0[0]-(XK[i]-XK[0])+((X0[-1]-X0[0])-(XK[i]-XK[0]))/2

S_Sub = np.abs(S_Sub)

T = (1+S+SK)/(1+S+SK+S_Sub)

if T >= 0.9:

print ('精度为一级')

print ('可以用GM(1,1)模型\nX(k) = ',X0[0]-a[1]/a[0],'exp(',-a[0],'(k-1))',a[1]/a[0])

elif T >= 0.8:

print ('精度为二级')

print ('可以用GM(1,1)模型\nX(k) = ',X0[0]-a[1]/a[0],'exp(',-a[0],'(k-1))',a[1]/a[0])

elif T >= 0.7:

print ('精度为三级')

print ('谨慎用GM(1,1)模型\nX(k) = ',X0[0]-a[1]/a[0],'exp(',-a[0],'(k-1))',a[1]/a[0])

elif T >= 0.6:

print ('精度为四级')

print ('尽可能不用GM(1,1)模型\nX(k) = ',X0[0]-a[1]/a[0],'exp(',-a[0],'(k-1))',a[1]/a[0])

X2006 = Series(np.array([259.4489]),index=pd.period_range('2006','2006',freq = 'A-DEC'))

X_Return = X_Return.append(X2006)

print (X_Return)

B = pd.DataFrame([X0,X_Return],index=['X0','X_Return'])

B = np.transpose(B)

B.plot()

程序运行截图如下:

实际样本曲线与灰色系统系统预测的曲线如下:

python灰色预测_灰色系统预测GM(1,1)模型相关推荐

  1. 深度学习决策支持 时空预测_重工业的预测性维护和决策支持系统

    深度学习决策支持 时空预测 Digital transformation is one of the top priorities for industrial companies. The larg ...

  2. 回归分析预测_使用回归分析预测心脏病。

    回归分析预测 As per the Centers for Disease Control and Prevention report, heart disease is the prime kill ...

  3. python低代码_几行代码搞定ML模型,低代码机器学习Python库正式开源

    PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代码上?低代码平台或许是个不错的 ...

  4. 基于python对天气的预测_使用机器学习预测天气(第一部分)

    概述 本章是使用机器学习预测天气系列教程的第一部分,使用Python和机器学习来构建模型,根据从Weather Underground收集的数据来预测天气温度.该教程将由三个不同的部分组成,涵盖的主题 ...

  5. 利用python预测未来疫情数据进行预测_根据数据预测/推断未来数据

    我对Python很陌生.我有一个数据集,我正在尝试使用numPy/sciPy来预测/推断未来的数据点.有没有一种简单的方法可以得到一个适合我当前数据的数学函数(比如正弦函数),然后我可以把新的值传递给 ...

  6. python时间序列指数平滑预测_时间序列分析预测实战之指数平滑法

    一.什么是时间序列分析? 在工作中,常常要对数据进行预测,确定业务未来的发展趋势,进而配置相关的营销策略.制定业务目标,由此引申出了一个重要的用数据预测未来的方法--时间序列分析,今天和大家分享就是实 ...

  7. python泰坦尼克号数据预测_泰坦尼克号幸存者预测 python 详解

    泰坦尼克号幸存数据,压缩包第一个 #读取数据 import pandas as pd data = pd.read_csv(r"C:\Users\lhf\PycharmProjects\py ...

  8. python二手车价格预测_二手车价格预测--特征工程task3

    3.1 特征工程目标 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已. 本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用. 3.2 内容介绍 常见的特征工程 ...

  9. 客户流失预测_如何不预测和防止客户流失

    客户流失预测 Customers are any business' bread and butter. Whether it is a B2B business model or B2C, ever ...

最新文章

  1. MyBatis自动生成代码之generatorConfig配置文件及其详细解读
  2. 解决element-ui的表格设置固定栏后,边框线消失的bug
  3. 实现一个悬浮在软键盘上的输入栏
  4. PHP调用数据库数据乱码问题
  5. 关闭sublime更新提示完整方案(转)并且统一TAB为四个空格、禁止升级检查
  6. 无法检查指定的位置是否位于cfs上_打印机知识普及:七大原因导致的打印机无法打印及解决方法...
  7. Ubuntu 18.04LTS系统设置窗口打不开或者消失解决办法
  8. 安卓音频处理相关资料集合贴
  9. three 查看版本号
  10. java r日历系统_Java GrerorianCalendar 实现日历查询
  11. 移远ec20 openLinux交叉编译python
  12. java/php/net/python教务排课系统设计
  13. Steam游戏存档位置大全
  14. pdf照片显示正常打印时被翻转_2020年二级建造师打印须知
  15. 计算机系统-大作业-hello的一生-哈尔滨工业大学2020级
  16. 《ANSYS 14.0超级学习手册》一1.1 有限元法概述
  17. iOS/Android 纪念模式(黑白灰模式) 记录
  18. EPICS modbus模块驱动程序示例2(模拟量)
  19. PCL入门系列 —— PassThrough 直通滤波、点云裁剪
  20. python文件路径path

热门文章

  1. 开源无收入,全职开源仍是少数,企业开源成热门,开发者正在见证开源历史
  2. OceanBase入选Forrester报告,为什么原生分布式数据库正成为核心系统升级首选?
  3. Docker终失C位,开源少年缘何黑化
  4. 红帽 与 CentOS 之间的恩怨情仇
  5. 用友发布智多星 AI 企业大脑,其核心组成原来是这样的
  6. 如何让 PPT 像 PyeCharts 一样炫酷?
  7. 硬核 App,这项新功能一定要打开,关键时刻能救命!!
  8. 80% 的 Android 应用正使用加密流量!
  9. Go 语言为什么能成功?
  10. 腾讯云开发者大会 | 腾讯云大学首次与业界顶尖厂商合作的线上学习专区重磅发布...