数学建模 | 灰色预测原理及python实现

这篇具有很好参考价值的文章主要介绍了数学建模 | 灰色预测原理及python实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、灰色预测的原理

二、灰色预测的应用及python实现


一、灰色预测的原理

灰色预测是以灰色模型为基础,灰色模型GM(n,h)是微分方程模型,可用于描述对象做长期、连续、动态的反应。其中,n代表微分方程式的阶数,h代表微分方程式的变化数目。在诸多的灰色模型中,以灰色系统中单序列一阶线性微分方程模型GM(1,1)最为常见。

下面说明GM(1,1)模式:

设有原始数据列,n为数据个数,则可以根据以下步骤来建立GM(1,1)模型:

步骤一:

与原来统计累加以便减弱随机数据序列的波动性与 随机性,从而得到新数据序列:

其中,中各数据表示前几项的相加,即:

步骤二:

令为的紧邻均值生成序列:

 

其中,python 多维灰色预测模型,python,数据分析,数学建模,python,算法,灰色预测模型,时间序列预测,数据分析 

步骤三:

建立GM(1,1) 的灰微分方程为:

python 多维灰色预测模型,python,数据分析,数学建模,python,算法,灰色预测模型,时间序列预测,数据分析

灰微分方程的白化方程为:

python 多维灰色预测模型,python,数据分析,数学建模,python,算法,灰色预测模型,时间序列预测,数据分析 

其中,a为发展系数,b为内生控制系数。

步骤四:

模型求解:构造矩阵B和向量Y:

   ,  

步骤五:

设为待估参数向量,即:

 

 这是利用正规方程得到的闭式解

步骤六:

求解白化方程,可得到灰色预测的离散时间响应函数:

python 多维灰色预测模型,python,数据分析,数学建模,python,算法,灰色预测模型,时间序列预测,数据分析

那么相应的时间相应序列为:

python 多维灰色预测模型,python,数据分析,数学建模,python,算法,灰色预测模型,时间序列预测,数据分析 

取,则所得的累加预测值为:

python 多维灰色预测模型,python,数据分析,数学建模,python,算法,灰色预测模型,时间序列预测,数据分析 

将预测值还原为:

python 多维灰色预测模型,python,数据分析,数学建模,python,算法,灰色预测模型,时间序列预测,数据分析 

python 多维灰色预测模型,python,数据分析,数学建模,python,算法,灰色预测模型,时间序列预测,数据分析

二、灰色预测的应用及python实现

某公司根据2015-2020年的产品的销售额,试构建GM(1,1)预测模型,并预测2021年的产品销售额。

原始数据为: 

Python实现代码:

import numpy as np

class GM:

    def __init__(self,N,n,data):
        '''
        :param N: the number of data
        :param n: the number of data that is needs to be predicted
        :param data: time series
        '''
        self.N=N
        self.n=n
        self.data=data


    def prediction(self,a,b):
        '''
        :param a: parameter a of the grey prediction model
        :param b: parameter b of the grey prediction model
        :return: a list of prediction
        '''

        # a list to save n predition
        pre_data=[]

        # calculating the prediction
        for i in range(self.n):
            pre=(self.data[0]-b/a)*(1-np.exp(a))*np.exp(-a*(self.N+i))
            pre_data.append(pre[0])

        return pre_data


    def residual_test(self,a,b):
        '''
        :param a: parameter a of the grey prediction model
        :param b: parameter b of the grey prediction model
        '''

        # prediction od raw data
        pre_rawdata=self.sequence_prediction(a,b)

        # calculating absolute residual
        abs_residual=[]
        for i in range(self.N):
            r=abs(pre_rawdata[i]-self.data[i])
            abs_residual.append(r)

        # calculating relative residual
        rel_residual=[]
        for i in range(self.N):
            rel=abs_residual[i]/abs(self.data[0])
            rel_residual.append(rel)

        # calculating average relative residual
        avg_residual=0
        for i in range(self.N):
            avg_residual=avg_residual+rel_residual[i]
        avg_residual=avg_residual/self.N
        print("average relative residual: {}".format(avg_residual[0]))

        if avg_residual<0.01:
            print("model accuracy: excellent(Level I)")
        elif avg_residual<0.05:
            print("model accuracy: qualified(LevelⅡ)")
        elif avg_residual<0.10:
            print("model accuracy: barely qualified(Level Ⅲ)")
        else:
            print("model accuracy: unqualified(Level Ⅳ)")



    def sequence_prediction(self,a,b):
        '''
        :param a: parameter a of the grey prediction model
        :param b: parameter b of the grey prediction model
        :return:  prediction of raw data
        '''

        pre_rawdata=[]
        pre_rawdata.append(self.data[0])
        for i in range(1,self.N):
            pre_raw=(self.data[0]-b/a)*(1-np.exp(a))*np.exp(-a*(i))
            pre_rawdata.append(pre_raw)

        return pre_rawdata


    def GM11(self):
        '''
        :return: n prediction if the grey prediction model can be used
                 and parameter a and parameter b
        '''

        # accumulate raw data
        cumdata=[]
        for i in range(self.N):
            s=0
            for j in range(i+1):
                s=s+self.data[j]
            cumdata.append(s)

        # calculating the nearest neighbor mean generation sequence
        Z=[]  # len(Z)=N-1
        for i in range(1,self.N):
            z=0.5*cumdata[i]+0.5*cumdata[i-1]
            Z.append(z)

        # construct data matrix B and data vector Y
        B=np.array([[-Z[i],1] for i in range(self.N-1)])
        Y=np.array([[self.data[i]] for i in range(1,self.N)])

        # calculating parameter a and parameter b
        A=np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y)
        a=A[0]
        b=A[1]

        # determine whether the grey prediction model can be used
        if (-1)*a>1:
            print("the grey prediction model can not be used")
        else:
            #print("a={}".format(a[0]))
            #print("b={}".format(b[0]))

            # derive a prediction model and predict
            pre_data=self.prediction(a,b)
            return pre_data,a,b


if __name__=="__main__":
    data=[2.67,3.13,3.25,3.36,3.56,3.72]
    N=6
    n=1
    # create object
    grey_prediction=GM(N,n,data)
    # get prediction
    pre_data,a,b=grey_prediction.GM11()
    # get average relative residual
    avg_residual=grey_prediction.residual_test(a,b)
    print("predicted data: {}".format(pre_data[0]))

运行结果:

python 多维灰色预测模型,python,数据分析,数学建模,python,算法,灰色预测模型,时间序列预测,数据分析文章来源地址https://www.toymoban.com/news/detail-792178.html

到了这里,关于数学建模 | 灰色预测原理及python实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模:灰色预测模型

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 三个基本方法: 累加数列 :计算一阶累加生成数列 x ( 1 ) ( k ) = ∑ i = 1 k x ( 0 ) ( i ) , k = 1 , 2 , ⋯   , n , x^{(1)}(k)=sum_{i=1}^kx^{(0)}(i),k=1,2,cdots,n, x ( 1 ) ( k ) = i = 1 ∑ k ​ x ( 0 ) ( i ) , k = 1 , 2 , ⋯ , n , 累减数列 :计算一阶累减生

    2024年02月09日
    浏览(40)
  • 【数学建模】 灰色预测模型

    https://www.cnblogs.com/somedayLi/p/9542835.html https://blog.csdn.net/qq_39798423/article/details/89283000?ops_request_misc=request_id=biz_id=102utm_term=%E7%81%B0%E8%89%B2%E9%A2%84%E6%B5%8B%E6%A8%A1%E5%9E%8Butm_medium=distribute.pc_search_result.none-task-blog-2 all sobaiduweb~default-2-89283000.142 v88 control_2,239 v2 insert_chatgptspm=1018.2226.3001.418

    2024年02月12日
    浏览(52)
  • 【数学建模】灰色预测法

    灰色预测对原始数据进行生成处理来寻找系统变动的规律,并生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。 灰色预测是一种对含有 不确定因素 的系统进行预测的方法。 灰色预测通过鉴别系统因素之间发展趋势的相异程度

    2023年04月15日
    浏览(52)
  • 数学建模之“灰色预测”模型

    1、CUMCM2003A SARS的传播问题 2、CUMCM2005A长江水质的评价和预测CUMCM2006A出版社的资源配置 3、CUMCM2006B艾滋病疗法的评价及疗效的预测问题 4、CUMCM2007A 中国人口增长预测   灰色系统的应用范畴大致分为以下几方面: (1)灰色关联分析。 (2)灰色预测:人口预测;灾变预测....等等。

    2024年02月12日
    浏览(46)
  • 数学建模之灰色预测方法

    关联系数 计算关联系数公式 步骤 第一步 第二步 求参考数列和待比较数列矩阵数值做差之后的最小值和最大值 第三步利用公式计算关联度系数,其中将最大值最小值耦合到关联系数中,可以保证关联系数位于[0,1]之间,同时上下对称的结构可以消除量纲不同和数值量级悬殊

    2024年02月13日
    浏览(40)
  • 数学建模系列-预测模型(一)灰色预测模型

    目录 1 灰色预测模型 1.1 灰色系统的定义与特点 1.2 灰色预测模型优缺点 1.3 灰色生成数列 1.4 灰色模型GM(1,1)实操步骤 1 数据检验 2 构建灰色模型 3 检验预测值 4 灰色预测模型实例代码 目前我们学习预测模型的第一类: 灰色预测模型 。         Gray Forecast Model 是通过 少量

    2024年02月02日
    浏览(38)
  • 数学建模常用模型(一):灰色预测法

    灰色预测法是一种用于处理少量数据、数据质量较差或者缺乏历史数据的预测方法。它适用于一些非线性、非平稳的系统,尤其在短期预测和趋势分析方面有着广泛的应用。灰色预测法作为一种强大的数学建模工具,通过利用有限的信息,能够在不完备的条件下进行准确的预

    2024年02月09日
    浏览(51)
  • 数学建模之灰色预测模型代码(matlab版)

    灰色关联分析步骤 【1】确定比较对象(评价对象)(就是数据,并且需要进行规范化处理,就是标准化处理,见下面例题的表格数据)和参考数列(评价标准,一般该列数列都是1,就是最优的的情况) 【2】确定各个指标权重,可用层次分析确定 【3】计算灰色关联系数 【4】

    2024年02月09日
    浏览(46)
  • 【数学建模】灰色关联(Matlab代码实现)

    目录 1 灰色关联理论 2 算例及Matlab代码实现 2.1 算例1 2.2 算例2   2.3 算例3 2.4 算例4  3 写在最后 灰色关联分析l是由邓聚龙教授于1982年提出的,也称“邓氏灰色关联法”。 方法以部分信息已知 ,部分信息未知的“贫信息”为研究对象,通过对部分已知信息的生成和开发,实现对

    2024年02月09日
    浏览(51)
  • 数学建模--决策树的预测模型的Python实现

    目录 1.算法流程简介 2.算法核心代码 3.算法效果展示

    2024年02月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包