python中gm11_python实现灰色预测模型(GM11)——以预测股票收盘价为例
目录
程序简述
程序/数据集下载
数据集截图
核心代码解析(接口,可直接运行)
接口调用、运行效果
Main.py
程序简述
利用灰色预测GM11模型预测股票收盘价,由于灰色预测模型适合短期预测和小样本,所以程序输入数据为5个,输出为1个,进行动态建模
程序输入:原序列、需要往后预测的个数
程序输出:预测值、模型结构(后验差比、发展系数、灰色作用量)
灰色预测模型 (GM11)即对原始数据作累加生成(或其它方法生成)得到近似的指数规律再进行建模的方法。灰色预测模型对于不同问题采用不同模型,模型主要解决生成序列是有指数变化规律,只能描述单调的变化过程。
程序/数据集下载
点击进入下载地址
数据集截图
图1,上证指数股票数据,共7128行,但出于灰色预测的特性,本文只用了最后30个数据做实验
核心代码解析(接口,可直接运行)
程序输入原序列和需要预测个数后会返回模型结构和预测值
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
def GM11(x,n):
'''
灰色预测
x:序列,numpy对象
n:需要往后预测的个数
'''
x1 = x.cumsum()#一次累加
z1 = (x1[:len(x1) - 1] + x1[1:])/2.0#紧邻均值
z1 = z1.reshape((len(z1),1))
B = np.append(-z1,np.ones_like(z1),axis=1)
Y = x[1:].reshape((len(x) - 1,1))
#a为发展系数 b为灰色作用量
[[a],[b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)#计算参数
result = (x[0]-b/a)*np.exp(-a*(n-1))-(x[0]-b/a)*np.exp(-a*(n-2))
S1_2 = x.var()#原序列方差
e = list()#残差序列
for index in range(1,x.shape[0]+1):
predict = (x[0]-b/a)*np.exp(-a*(index-1))-(x[0]-b/a)*np.exp(-a*(index-2))
e.append(x[index-1]-predict)
S2_2 = np.array(e).var()#残差方差
C = S2_2/S1_2#后验差比
if C<=0.35:
assess = '后验差比<=0.35,模型精度等级为好'
elif C<=0.5:
assess = '后验差比<=0.5,模型精度等级为合格'
elif C<=0.65:
assess = '后验差比<=0.65,模型精度等级为勉强'
else:
assess = '后验差比>0.65,模型精度等级为不合格'
#预测数据
predict = list()
for index in range(x.shape[0]+1,x.shape[0]+n+1):
predict.append((x[0]-b/a)*np.exp(-a*(index-1))-(x[0]-b/a)*np.exp(-a*(index-2)))
predict = np.array(predict)
return {
'a':{'value':a,'desc':'发展系数'},
'b':{'value':b,'desc':'灰色作用量'},
'predict':{'value':result,'desc':'第%d个预测值'%n},
'C':{'value':C,'desc':assess},
'predict':{'value':predict,'desc':'往后预测%d个的序列'%(n)},
}
if __name__ == "__main__":
data = np.array([1.2,2.2,3.1,4.5,5.6,6.7,7.1,8.2,9.6,10.6,11,12.4,13.5,14.7,15.2])
x = data[0:10]#输入数据
y = data[10:]#需要预测的数据
result = GM11(x,len(y))
predict = result['predict']['value']
predict = np.round(predict,1)
print('真实值:',y)
print('预测值:',predict)
print(result)
接口调用、运行效果
Main.py
以上证指数为例,进行灰色预测建模,效果勉强,数据集的选择和预测长度很重要
# -*- coding: utf-8 -*-
from Module.BuildModel import GM11
from sklearn.metrics import mean_absolute_error
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
#路径目录
baseDir = os.path.dirname(os.path.abspath(__file__))#当前目录
staticDir = os.path.join(baseDir,'Static')#静态文件目录
resultDir = os.path.join(baseDir,'Result')#结果文件目录
#读取数据
data = pd.read_csv(staticDir+'/000001.csv',encoding='gbk')
train = data['收盘价'].values[-15:-10]#训练数据
test = data['收盘价'].values[-10:]#测试数据
#GM11动态建模
yPre = []
for i in range(test.shape[0]):
#只预测1个数
result = GM11(train,1)
yPre.append(result['predict']['value'][0])
#更新训练集
train = train.tolist()[:-1]
train.append(test[i])
train = np.array(train).reshape(-1)
#计算MAE
MAE = mean_absolute_error(test,yPre)
#打印模型
print(result['C']['desc'])
print(result['a']['desc'],np.round(result['a']['value'],2))
print(result['b']['desc'],np.round(result['b']['value'],2))
#可视化
#用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#用来正常显示负号
plt.rcParams['axes.unicode_minus']=False
plt.plot(range(test.shape[0]),yPre,label="预测值")
plt.plot(range(test.shape[0]),test,label="观测值")
plt.legend()
plt.title('GM11预测效果,MAE:%2f'%MAE)
plt.savefig(resultDir+'/GM11预测效果.png',dpi=100,bbox_inches='tight')
图2,程序输出,模型结构
图3,预测值和观测值对比折线图,对于短期预测GM11表现良好
python中gm11_python实现灰色预测模型(GM11)——以预测股票收盘价为例相关推荐
- python财务报表预测股票价格_python实现灰色预测模型(GM11)——以预测股票收盘价为例...
原博文 2020-02-26 18:56 − [TOC] # 程序简介 利用灰色预测GM11模型预测股票收盘价,由于灰色预测模型适合短期预测和小样本,所以程序输入数据为5个,输出为1个,进行动态建模 ...
- python灰色预测_python实现灰色预测模型(GM11)——以预测股票收盘价为例
目录 程序简述 利用灰色预测GM11模型预测股票收盘价,由于灰色预测模型适合短期预测和小样本,所以程序输入数据为5个,输出为1个,进行动态建模 程序输入:原序列.需要往后预测的个数 程序输出:预测值. ...
- 灰色预测模型python_python实现灰色预测模型(GM11)——以预测股票收盘价为例
[TOC] 程序简介 利用灰色预测GM11模型预测股票收盘价,由于灰色预测模型适合短期预测和小样本,所以程序输入数据为5个,输出为1个,进行动态建模 程序输入:原序列.需要往后预测的个数 程序输出:预 ...
- 在Python中使用LSTM和PyTorch进行时间序列预测
全文链接:http://tecdat.cn/?p=8145 顾名思义,时间序列数据是一种随时间变化的数据类型.例如,24小时内的温度,一个月内各种产品的价格,一年中特定公司的股票价格(点击文末&quo ...
- python灰色预测模型步骤人口预测_超级干货:一文读懂灰色预测模型
灰色预测模型可针对数量非常少(比如仅4个),数据完整性和可靠性较低的数据序列进行有效预测,其利用微分方程来充分挖掘数据的本质,建模所需信息少,精度较高,运算简便,易于检验,也不用考虑分布规律或变化趋势 ...
- 【Python】Python中的经典时间序列预测模型总结
时间序列预测是机器学习中一个经常被忽视的重要领域.时间序列在观察之间添加了显式的顺序依赖性:时间维度.这个额外的维度既是一个约束,也是一个提供额外信息来源的结构. 时间序列 时间序列分析 使用经典统计 ...
- python保存模型_如何在Python中保存ARIMA时间序列预测模型
自回归移动平均模型(ARIMA)是一种常用于时间序列分析和预测的线性模型. statsmodels库提供了Python中使用ARIMA的实现.ARIMA模型可以保存到文件中,以便以后对新数据进行预测. ...
- Python中的经典时间序列预测模型总结
来源:机器学习研习院 大家好,我是阳哥! 时间序列预测是机器学习中一个经常被忽视的重要领域.时间序列在观察之间添加了显式的顺序依赖性:时间维度.这个额外的维度既是一个约束,也是一个提供额外信息来源的结 ...
- R语言实现灰色预测模型gm11
不多说,直接上R语言代码 以后有时间再继续更新 第一个先计算关联度和关联系数 #定义成函数-------------------------------------------hsyc <- f ...
- Python中XGBoost的特性重要性和特性选择
使用像梯度增强这样的决策树方法的集合的一个好处是,它们可以从经过训练的预测模型中自动提供特征重要性的估计. 在这篇文章中,您将发现如何使用Python中的XGBoost库估计特性对于预测建模问题的重要 ...
最新文章
- 漫画:前端发展史的江湖恩怨情仇
- 电容触摸屏GT911、GT928、GT9147的使用
- PMP-【第4章 项目整合管理】-2021-1-18(88页-115页)
- 用C语言输出一个字符串的所有子串
- 化解三大错误晚餐方式。
- java 从网络Url中下载文件
- 睡觉时:新增的Java 8新增功能
- LeetCode 58. 最后一个单词的长度
- w10电脑c盘满了怎么清理_Win10专业版电脑c盘满了怎么清理?教你一招快速清理C盘...
- 云计算OpenStack:云在身边博客园
- AndroidStudio安卓原生开发_Activity和AppCompatActivity的区别认识---Android原生开发工作笔记127
- 论坛中的验证码的作用
- mencoder_有用的Mplayer / Mencoder命令
- 信息化建设规划制定的难点及关键点分析
- 同比和环比分别是什么,一分钟告诉你。
- 多台电脑共用一根网线如何设置宽带共享
- krpano 实现小行星加载完成再显示所有的热点
- VUE实现前台图片 标注(添加矩形框)、放大、缩小、拖拽 -----个人记录
- Uncertainty Quantification of Sparse Travel Demand Prediction with Spatial-Temporal Graph Neural Net
- JVM的Metaspace,JAVA8以前是Permanent Area
热门文章
- 【独家折扣】淘客小程序源码
- 能领拼多多优惠券的app
- js将阿拉伯数字转换成大写金额
- java数字金额大写金额_Java将数字金额转为大写中文金额
- html5 在线留言,html5实现手机弹窗留言对话框
- html5妇女节游戏,三八妇女节趣味小游戏
- java-php-python-springboot网络办公系统计算机毕业设计
- centos ntp日志_centos NTP服务器配置总结
- 【OpenCV】“帧差法”实现移动物体的检测(车辆识别)
- matlab中定义分段函数,matlab中定义带符号的分段函数