关闭

[置顶] 灰色系统预测GM(1,1)模型

标签: 灰色系统
8949人阅读 评论(1) 收藏 举报
分类:

预备知识
(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()

程序运行截图如下:
这里写图片描述
这里写图片描述
实际样本曲线与灰色系统系统预测的曲线如下:
这里写图片描述

4
0
查看评论

时间序列完全教程(R)

在商业应用中,时间是最重要的因素,能够提升成功率。然而绝大多数公司很难跟上时间的脚步。但是随着技术的发展,出现了很多有效的方法,能够让我们预测未来。不要担心,本文并不会讨论时间机器,讨论的都是很实用的东西。
  • Earl211
  • Earl211
  • 2016-03-22 17:43
  • 27762

【数学建模】灰色预测GM(1,1)代码

灰色预测中的GM(1,1)模型及其代码
  • coolestkey
  • coolestkey
  • 2016-08-06 16:27
  • 3118

灰色预测模型

概念: 白色系统:系统的内部特征是完全已知的,即系统的信息是完全充分的。 黑色系统:一个系统的内部信息对外界来说是一无所知的,只能通过他与外界的联系来加以观测研究。 灰色系统:一部分信息是已知的,另一部分信息是未知的,系统内各因素之间具有不确定关系。其特点是‘少数据建模’,着重研究‘外延明确,内涵不...
  • webzjuyujun
  • webzjuyujun
  • 2016-01-28 16:07
  • 6892

Matlab灰色预测和统计分析

如何利用Matlab读取数据进行统计分析?假设有我在D盘根目录下有5个txt文本,其文件格式如下: 我们需要如何读取这个这样中英文数字混编的数据进行统计分析呢? 假设我们的数据都是以ANSI编码,如果不是,需要进行另存为覆盖保存为这种编码格式。 接下来,老规矩,废话不多说,直接上代码。 编...
  • lusongno1
  • lusongno1
  • 2016-02-25 14:24
  • 2739

时间序列之灰色预测

灰色预测是针对灰色系统所做的预测。控制论中,信息的多少常以颜色的深浅来表示,信息充足、确定为白色;信息缺乏、不确定为黑色;部分确定部分不确定为灰色。灰色系统指信息不完全的系统,信息的不完全可能是系统因素不完全明确,元素关系不完全清楚,系统结构不完全知道,系统的作用原理不完全明了。  &#...
  • cl1143015961
  • cl1143015961
  • 2014-11-25 16:05
  • 3005

灰色理论预测模型

灰色理论 通过对原始数据的处理挖掘系统变动规律,建立相应微分方程,从而预测事物未来发展状况。 优点:对于不确定因素的复杂系统预测效果较好,且所需样本数据较小; 缺点:基于指数率的预测没有考虑系统的随机性,中长期预测精度较差。 灰色预测模型 在多种因素共同影响且内部因素难以全部划定,因素间...
  • zc0325
  • zc0325
  • 2016-04-30 22:19
  • 8783

灰色系统预测GM(1,1)模型

预备知识 (1)灰色系统 白色系统是指系统内部特征是完全已知的;黑色系统是指系统内部信息完全未知的;而灰色系统是介于白色系统和黑色系统之间的一种系统,灰色系统其内部一部分信息已知,另一部分信息未知或不确定。 (2)灰色预测 灰色预测,是指对系统行为特征值的发展...
  • qq_30091945
  • qq_30091945
  • 2017-01-12 17:18
  • 8949

灰色预测模型

灰色预测模型主要运用小数据的预测问题,比如可以由近期的数据预测出未来的数据 对于灰色预测的思想这里不再写了,到处可以找到详细解释,这里主要对于一个具体事例给出代码(附上详细注释) %近十年数据89677,99215,109655,120333,135823,159878,182321,20940...
  • breeze_blows
  • breeze_blows
  • 2017-08-16 20:57
  • 340

灰色预测模型GM(1,1) 与例题分析

灰色预测模型灰色预测的概念(1)灰色系统、白色系统和黑色系统 白色系统是指一个系统的内部特征是完全已知的,既系统信息是完全充分的。 黑色系统是一个系统的内部信息对外界来说是一无所知的,只能通过它与外界的联系来加以观测研究。 灰色系统介于白色和黑色之间,灰色系统内的一部分信息是已知的,另一部分信息是未...
  • qq547276542
  • qq547276542
  • 2017-09-06 13:39
  • 13754

GM(1,1)算法代码(python)

GM(1,1)算法代码(python)
  • Yaroo
  • Yaroo
  • 2017-03-16 11:05
  • 799
    个人资料
    • 访问:154314次
    • 积分:4897
    • 等级:
    • 排名:第6917名
    • 原创:327篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论