灰色预测 Python

Python中的灰色预测(GM(1,1))

灰色预测法是一种处理不完全信息预测问题的方法,主要适用于信息不足、数据量小且变化不规律的序列预测。其中,GM(1,1)是灰色预测中的一种常用模型,用于一元一次预测。

算法步骤

  1. 初步累加生成
  2. 建立灰色微分方程
  3. 求解模型参数
  4. 进行预测

优点:

  1. 信息要求低:灰色预测法尤其适合于数据信息不足的情况。即使只有少量的数据点,也可以建立模型。
  2. 模型简单:GM(1,1)模型结构简单,容易理解和实施。
  3. 适应性强:对非线性数据和不规则变化的数据具有较好的适应性。
  4. 有一定的自我修正能力:随着新数据的加入,模型可以不断进行修正和更新。
  5. 预测精度较高:在数据不足的情况下,其预测精度往往高于其他统计方法。

缺点:

  1. 预测范围有限:通常只适用于短期预测,对长期预测的效果不如其他模型。
  2. 模型假设:灰色预测的基本模型如GM(1,1)建立在一些假设上,这些假设可能不总是成立。
  3. 缺乏理论基础:相对于其他预测方法,灰色预测的理论基础较为薄弱,有时其预测机理不够透明。
  4. 需要定期更新:当有新数据加入时,为保持预测精度,需要不断地对模型进行修正和更新。

适用范围:

  1. 数据稀少情况:当数据点较少,难以使用其他统计预测方法时,灰色预测具有明显的优势。
  2. 非线性变化的序列:对于变化不规律、非线性的数据序列,灰色预测法往往能给出较好的预测效果。
  3. 经济与社会发展预测:如对某地区的经济增长、人口增长等进行预测。
  4. 工程技术领域:如电力负荷预测、交通流量预测、资源储量估算等。
  5. 自然科学领域:如气象预测、生态环境变化预测等。

示例代码

import numpy as np

def GM11(x0):
    # 1. 累加生成
    x1 = np.cumsum(x0)
    
    # 2. 计算数据矩阵B和数据向量Y
    n = len(x0)
    B = np.zeros((n-1,2))
    Y = np.zeros((n-1))
    for i in range(0,n-1):
        B[i][0] = -0.5*(x1[i] + x1[i+1])
        B[i][1] = 1
        Y[i] = x0[i+1]
    
    # 3. 计算参数
    A = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)
    a, b = A

    # 4. 返回预测模型
    def f(k):
        return (x0[0]-b/a)*np.exp(-a*k) - (x0[0]-b/a)
    
    return f

# 示例数据
x0 = np.array([13, 15, 20, 23, 27])
model = GM11(x0)
print(model(5))  # 输出第6期的预测值

# 使用model(k)可预测第k+1期的数据

猜你喜欢

转载自blog.csdn.net/Allen1862105/article/details/133748098