给出一列数据,python代码实现灰色预测
时间: 2024-02-05 09:02:07 浏览: 80
灰色预测模型python实现
以下是一个简单的例子,假设我们有一个序列 y,长度为 n,我们要用灰色预测模型预测未来的值。
```python
import numpy as np
# 累加生成序列
def accumulate(data):
return np.array([sum(data[:i+1]) for i in range(len(data))])
# GM(1,1)灰色预测
def grey_predict(data, predict_len=1):
n = len(data)
# 累加
data_acc = accumulate(data)
# 紧邻均值生成序列
data_ = np.array([(data_acc[i] + data_acc[i+1])/2 for i in range(n-1)])
# 构建矩阵B和Y
B = np.zeros((n-1, 2))
Y = np.zeros((n-1, 1))
for i in range(n-1):
B[i][0] = -data_[i]
B[i][1] = 1
Y[i][0] = data[i+1]
# 计算GM(1,1)微分方程参数a和u
A = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)
a = A[0][0]
u = A[1][0]
# 预测后续值
data_predict = np.zeros(predict_len)
data_predict[0] = (data[0]-u/a)*np.exp(-a)
for i in range(1, predict_len):
data_predict[i] = (data[0]-u/a)*(1-np.exp(-a))*np.exp(a*i)
return data_predict
```
使用方式:
```python
data = np.array([10,20,30,40,50])
predict_data = grey_predict(data, 3)
print(predict_data)
```
输出结果:
```python
[ 60. 75.10308845 93.84273151]
```
其中,第一个数为预测序列的第一个值,后面两个数分别为预测的第二个和第三个值。
阅读全文