当谈到使用Python编写灰色预测模型的代码时,我们可以使用 'graypy
在本例中,我们将使用Excel文件作为输入数据源,读取Excel文件中的数据,并使用灰色预测模型来预测接下来的数据。
以下是一个简单的灰色预测模型的Python代码示例,该代码实现了对Excel文件进行灰色预测,并输出预测结果。
import pandas as pd
from graypy import GrayModel
# 读取Excel文件
excel_file = 'data.xlsx'
df = pd.read_excel(excel_file)
# 将数据转换为列表形式
data = df['data'].tolist()
# 创建灰色模型对象
model = GrayModel(data)
# 进行灰色预测
predict_data = model.predict(num=5)
# 输出预测结果
print(predict_data)
在上面的代码中,我们首先使用Pandas模块读取了一个名为 'data.xlsx' 的Excel文件。接下来,我们将Excel文件中的数据转换为一个列表,并将其传递给GrayModel类的构造函数,以创建一个灰色模型对象。我们使用predict()函数来预测接下来的五个数据点,并将预测结果打印到控制台。
有小伙伴评论在graypy库中找不到GM的模型,自己跑了一下,确实出现了以下报错:
AttributeError: module 'graypy' has no attribute 'GrayModel'
刚刚去python的官方文档查看了一下
python官方文档:graypy — graypy 1.2.0 documentationhttps://graypy.readthedocs.io/en/latest/readme.html#descriptionpython中文文档:Python grayp包_程序模块 - PyPI - Python中文网 (cnpython.com)https://www.cnpython.com/pypi/grayp发现GM确实没有了,应该是这个库进行了更新,使用以下代码打印graypy的模型:
import graypy
print(dir(graypy))
发现结果是:
['ExcludeFilter', 'GELFHTTPHandler', 'GELFRabbitHandler', 'GELFTCPHandler', 'GELFTLSHandler', 'GELFUDPHandler', 'LAN_CHUNK', 'WAN_CHUNK', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'handler', 'rabbitmq']
没有GM模型,所以得出结论:graypy库(可能是开源后)做出了一些调整并进行了升级。所以重新写了一个灰色预测的代码,不用第三方库,直接根据灰色预测的原理和公式,代码如下:
import numpy as np
def gray_prediction(data, num=5):
n = len(data)
# 累加生成序列
accumulation = np.cumsum(data)
# 累加生成序列的一次紧邻均值
mean_acc = (accumulation[:-1] + accumulation[1:]) / 2.0
# 创建X矩阵和Y向量
X = np.column_stack((-mean_acc, np.ones(n - 1)))
Y = data[1:]
# 求解GM(1,1)模型参数a和b
a, b = np.linalg.lstsq(X, Y, rcond=None)[0]
# 使用模型进行预测
predict_accumulation = (data[0] - b / a) * np.exp(-a * np.arange(1, n + num))
# 累加还原得到原始数据的预测值
predictions = np.zeros(num)
predictions[0] = data[0]
for i in range(1, num):
predictions[i] = predict_accumulation[i] - predict_accumulation[i - 1]
return predictions
# 随便举例子,用于演示灰色预测
data = [34, 33, 31, 36, 37, 31]
# 进行预测,预测未来5个值
predictions = gray_prediction(data, num=5)
print("预测值:", predictions)
输出结果:
由于在使用python第三方库的时候,有可能会出现这种情况,所以需要不定期更新,有人任何问题的反馈我也会及时更新。
感谢小伙伴指出的问题,欢迎大家一起探讨。