说明灰色预测中的GM(1,1)模型预测流程步骤并使用python代码将csv文件中的时间序列数据建立GM(1,1)模型预测十期结果最终绘图展示
时间: 2024-03-01 13:56:26 浏览: 111
huiseyuce.zip_MATLAB财务数据_gm (1_1)_huiseyuce_数据预测代码_灰色模型
GM(1,1)模型是灰色预测中最基本的模型,它只考虑一阶微分方程,预测流程步骤如下:
1. 数据预处理:对原始数据进行累加、平均等处理,得到新的序列。
2. 建立灰色微分方程:根据新序列建立一阶微分方程:$$\frac{dx(t)}{dt}+ax(t)=b$$
其中,$x(t)$表示时间为$t$的原始数据,$a$和$b$为待求参数,可通过最小二乘法求解。
3. 模型检验:利用残差比较法、后验差检验、小残差概率等方法对建立的GM(1,1)模型进行检验。
4. 预测:利用建立好的模型进行未来的预测,得到预测结果。
5. 检验预测结果:对预测结果进行检验,评估预测精度和可靠性。
下面是使用Python代码将csv文件中的时间序列数据建立GM(1,1)模型预测十期结果并绘图的过程:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取csv文件数据
data = pd.read_csv('data.csv', header=None)
x0 = data.iloc[:, 0].values
# 累加处理
x1 = np.cumsum(x0)
# 计算数据矩阵B和数据向量Y
n = len(x1)
B = np.zeros((n - 1, 2))
Y = np.zeros((n - 1, 1))
for i in range(n - 1):
B[i][0] = -0.5 * (x1[i] + x1[i + 1])
B[i][1] = 1
Y[i][0] = x0[i + 1]
# 计算GM(1,1)微分方程的参数a和b
A = np.linalg.inv(B.T.dot(B)).dot(B.T).dot(Y)
a = A[0][0]
b = A[1][0]
# 模型检验
x0_hat = np.zeros((n, 1))
x0_hat[0] = x0[0]
for i in range(1, n):
x0_hat[i] = (x0[0] - b / a) * np.exp(-a * i) + b / a
error = (x0 - x0_hat.T)[0]
C = np.abs(error).mean() / np.abs(x0).mean()
P = 1.0 * len(np.where(np.abs(error) < 0.6745 * np.std(error))[0]) / len(error)
print('误差C:{:.2%}'.format(C))
print('小残差概率P:{:.2%}'.format(P))
# 预测
x0_predict = np.zeros((10, 1))
for i in range(n, n + 10):
x0_predict[i - n] = (x0[0] - b / a) * np.exp(-a * i) + b / a
# 绘图展示
plt.plot(x0, label='original data')
plt.plot(x0_hat, label='fitted data')
plt.plot(np.arange(n, n + 10), x0_predict, label='predicted data')
plt.legend()
plt.show()
```
需要将代码中的`data.csv`替换为你自己的csv文件名,并确保csv文件中只有一列数据。运行结果将绘制出原始数据、拟合数据和预测数据的图像。
阅读全文