Python中的灰色预测(GM(1,1))
灰色预测法是一种处理不完全信息预测问题的方法,主要适用于信息不足、数据量小且变化不规律的序列预测。其中,GM(1,1)是灰色预测中的一种常用模型,用于一元一次预测。
算法步骤
- 初步累加生成
- 建立灰色微分方程
- 求解模型参数
- 进行预测
优点:
- 信息要求低:灰色预测法尤其适合于数据信息不足的情况。即使只有少量的数据点,也可以建立模型。
- 模型简单:GM(1,1)模型结构简单,容易理解和实施。
- 适应性强:对非线性数据和不规则变化的数据具有较好的适应性。
- 有一定的自我修正能力:随着新数据的加入,模型可以不断进行修正和更新。
- 预测精度较高:在数据不足的情况下,其预测精度往往高于其他统计方法。
缺点:
- 预测范围有限:通常只适用于短期预测,对长期预测的效果不如其他模型。
- 模型假设:灰色预测的基本模型如GM(1,1)建立在一些假设上,这些假设可能不总是成立。
- 缺乏理论基础:相对于其他预测方法,灰色预测的理论基础较为薄弱,有时其预测机理不够透明。
- 需要定期更新:当有新数据加入时,为保持预测精度,需要不断地对模型进行修正和更新。
适用范围:
- 数据稀少情况:当数据点较少,难以使用其他统计预测方法时,灰色预测具有明显的优势。
- 非线性变化的序列:对于变化不规律、非线性的数据序列,灰色预测法往往能给出较好的预测效果。
- 经济与社会发展预测:如对某地区的经济增长、人口增长等进行预测。
- 工程技术领域:如电力负荷预测、交通流量预测、资源储量估算等。
- 自然科学领域:如气象预测、生态环境变化预测等。
示例代码
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期的数据