机器学习—数据挖掘之灰色预测算法

引言

  灰色预测算法是一种对含有不确定因素的系统进行预测的方法。在建立灰色预测模型之前,需先对原始时间序列进行数据处理,经过数据处理后的时间序列即成为生成列。灰色系统常用的数据处理方式有累加和累减两种。灰色预测以灰色模型为基础,在众多灰色模型中,GM(1,1)模型最为常用。下面展示灰色预测算法的过程及代码实现

1.灰色预测模型

  设特征 X ( 0 ) = { X ( 0 ) ( i ) , i = 1 , 2... , n } X^{(0)}=\{X^{(0)}(i),i=1,2...,n\} X(0)={ X(0)(i),i=1,2...,n}为一非负单调原始数据序列,建立灰色预测模型如下:

  1. 首先对 X ( 0 ) X^{(0)} X(0)进行一次累加,得到一次累加序列 X ( 1 ) = { X ( 1 ) ( k ) , k = 0 , 1 , 2... , n } X^{(1)}=\{X^{(1)}(k),k=0,1,2...,n\} X(1)={ X(1)(k),k=0,1,2...,n}
  2. X ( 1 ) X^{(1)} X(1)可建立下述一阶线性微分方程,即 G M ( 1 , 1 ) GM(1,1) GM1,1模型
    在这里插入图片描述
  3. 求解微分方程,即可得到预测模型
    在这里插入图片描述
  4. 由于 G M ( 1 , 1 ) GM(1,1) GM1,1模型得到的是一次累加量,将 G M ( 1 , 1 ) GM(1,1) GM1,1模型所得的数据 X ^ ( 1 ) ( k + 1 ) \hat{X}^{(1)}(k+1) X^(1)(k+1)经过累减还原 X ^ ( 0 ) ( k + 1 ) \hat{X}^{(0)}(k+1) X^(0)(k+1),即 X ( 0 ) X^{(0)} X(0)的灰色预测模型
    在这里插入图片描述
  5. 后验差检验模型精度
    在这里插入图片描述

  灰色预测法的通用性强,一般的时间序列场合都适用,尤其适合那些规律性差且不清楚数据产生机理的情况。灰色预测模型的优点是预测精度高,模型可检验、参数估计方法简单、对小数据集有很好的的预测效果;缺点是对原始数据序列的光滑度要求很高,在原始数据列光滑性较差的情况下灰色预测模型的预测精度不高,甚至通不过检验,结果只能放弃使用灰色模型进行预测。

2.python实现

import numpy as np

#自定义灰色预测函数
def GM11(x0): 
    # 数据处理
    x1 = x0.cumsum() #1-AGO序列
    z1 = (x1[:len(x1)-1] + x1[1:])/2.0 #紧邻均值(MEAN)生成序列
    z1 = z1.reshape((len(z1),1))
    # 计算参数
    B = np.append(-z1, np.ones_like(z1), axis = 1)
    Yn = x0[1:].reshape((len(x0)-1, 1))
    [[a],[b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) 
    # 还原值
    f = lambda k: (x0[0]-b/a)*np.exp(-a*(k-1))-(x0[0]-b/a)*np.exp(-a*(k-2)) 
    # 后验差检验
    delta = np.abs(x0 - np.array([f(i) for i in range(1,len(x0)+1)]))
    C = delta.std()/x0.std()
    P = 1.0*(np.abs(delta - delta.mean()) < 0.6745*x0.std()).sum()/len(x0)
    return f, a, b, x0[0], C, P #返回灰色预测函数、a、b、首项、方差比、小残差概率

参考于《python数据分析与挖掘实战》


如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!
在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/weixin_46649052/article/details/115427347
今日推荐