您当前的位置:首页 > 互联网百科 > 大数据

基于Keras的LSTM多变量时间序列股票预测

时间:2020-06-21 22:16:54  来源:  作者:

朋友多次劝我,用大数据人工智能研究下金融股票,由于本人水平有限,一直没有去想。最近两天,突然想到LSTM是不是很适合做股票预测。通过上网学习,还是真有案例。

适合多输入变量的神经网络模型一直让开发人员很头痛,但基于(LSTM)的循环神经网络能够几乎可以完美的解决多个输入变量的问题。基于(LSTM)的循环神经网络可以很好的利用在时间序列预测上,

长短期记忆循环神经网络等几乎可以完美地模拟多个输入变量的问题,这为时间序列预测带来极大益处。本文介绍了如何在 Keras 深度学习库中搭建用于多变量时间序列预测的 LSTM 模型。

因为市场总是会出现黑天鹅事件,比如股灾,这种不符合规律的事件是很难预测的,本文仅适用学习人工智能技术练习,“当你进入股市后,趋势就变化了”。

Keras是一个高度封装的神经网络框架,提供参数化的API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果。

关于LSTM

LSTM算法的全称是长短期记忆网络(long short-term memory),由于LSTM算法基于RNN算法改进而来的,一种特殊的RNN网络,规避了标准RNN中梯度爆炸和梯度消失的问题,而且该网络设计出来是为了解决长依赖问题。该网络由 Hochreiter & Schmidhuber (1997)引入,并有许多人对其进行了改进和普及。他们的工作被用来解决了各种各样的问题,直到目前还被广泛应用。

基于Keras的LSTM多变量时间序列股票预测

 


基于Keras的LSTM多变量时间序列股票预测

 

多层LSTM只是将单个cell进行堆叠。LSTM模型为什么比CNN难理解呢?因为它把神经元的数量都藏到cell里面。通过对比CNN,看上面的图是不是有点感觉呢?一个cell其实就是一层神经元,只是LSTM和CNN不同的是,它的每一层t时刻的输出和t-1时刻的状态有关。也就是说当前cell的输出ht不仅仅影响到下一cell(图中右边的那列),还影响本cell下一时刻的状态和输出(图中按时间顺序堆叠的三个绿色的cell)。

理解到这一点了,我们也自然地理解到,xt可以是多维的。然后每个cell的hidden_size都可以进行设置。

数据源来自 这里 。

基于Keras的LSTM多变量时间序列股票预测

 

LSTM多变量时间序列股票预测

'''
Created on 2020年4月5日

@author: xiaoyw
'''
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential  #Sequential 用于初始化神经网络
from keras.layers import Dense       #Dense 用于添加全连接的神经网络层
from keras.layers import LSTM        #LSTM 用于添加长短期内存层
from keras.layers import Dropout     #Dropout 用于添加防止过拟合的dropout层

#构建训练数据
def train_data():
    dataset_train = pd.read_csv('NSE-TATAGLOBAL.csv')
    training_set = dataset_train.iloc[:, 1:7].values
    dataset_train.head()
        
    sc = MinMaxScaler(feature_range = (0, 1))
    training_set_scaled = sc.fit_transform(training_set)
    
    X_train = []
    y_train = []
    for i in range(60, 2035):
        X_train.Append(training_set_scaled[i-60:i, :])
        y_train.append(training_set_scaled[i, :])

    X_train, y_train = np.array(X_train), np.array(y_train)      
    X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 6))
    
    return X_train,y_train,dataset_train,sc
#构建测试数据
def test_data(dataset_train,sc):
    dataset_test = pd.read_csv('tatatest.csv')
    real_stock_price = dataset_test.iloc[:, 1:2].values
    #合并训练集和测试集
    dataset_total = pd.concat((dataset_train, dataset_test), axis = 0)
    db_all = dataset_total.iloc[:, 1:7].values

    inputs = db_all[len(dataset_total) - len(dataset_test) - 60:]
    inputs = inputs.reshape(-1,6)

    inputs = sc.transform(inputs)
    X_test = []
    for i in range(60, 76):
        X_test.append(inputs[i-60:i, :])
        #X_test.append(inputs[i-60:i, 0])
    X_test = np.array(X_test)
    X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 6))
    
    return X_test,real_stock_price
#创建股票预测模型
def stock_model(X_train, y_train):
    regressor = Sequential()
    #LSTM的输入为 [samples, timesteps, features],这里的timesteps为步数,features为维度 这里我们的数据是6维的
    regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 6)))
    
    regressor.add(Dropout(0.2))
    
    regressor.add(LSTM(units = 50, return_sequences = True))
    regressor.add(Dropout(0.2))
    
    regressor.add(LSTM(units = 50, return_sequences = True))
    regressor.add(Dropout(0.2))
    
    regressor.add(LSTM(units = 50))
    regressor.add(Dropout(0.2))
    #全连接,输出6个
    regressor.add(Dense(units = 6))
    
    regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
    regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)
    
    return regressor

def main():
    X_train, y_train,dataset_train,sc = train_data()
    
    regressor = stock_model(X_train, y_train)
    X_test,real_stock_price = test_data(dataset_train,sc)
    predicted_stock_price = regressor.predict(X_test)
    
    predicted_stock_price = sc.inverse_transform(predicted_stock_price)
    
    plt.plot(real_stock_price, color = 'black', label = 'TATA Stock Price')
    #显示开盘价
    plt.plot(predicted_stock_price[:,0], color = 'green', label = 'Predicted TATA Stock Price')
    plt.title('TATA Stock Price Prediction')
    plt.xlabel('Time')
    plt.ylabel('TATA Stock Price')
    plt.legend()
    plt.show()

if __name__ == '__main__':
    main()

参考源代码为单变量(开盘价)预测,效果如下左侧图所示,改造成本文代码,为多变量输入并且多维度输出,预测效果(取开盘价)如下右侧图所示。

基于Keras的LSTM多变量时间序列股票预测

 

 



Tags:Keras的LSTM   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
朋友多次劝我,用大数据人工智能研究下金融股票,由于本人水平有限,一直没有去想。最近两天,突然想到LSTM是不是很适合做股票预测。通过上网学习,还是真有案例。适合多输入变量的神...【详细内容】
2020-06-21  Tags: Keras的LSTM  点击:(317)  评论:(0)  加入收藏
▌简易百科推荐
前言什么是数据脱敏数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护常用脱敏规则替换、重排、加密、截断、掩码良好的数据脱敏实施1、尽...【详细内容】
2021-12-28  linyb极客之路    Tags:数据脱敏   点击:(2)  评论:(0)  加入收藏
张欣安科瑞电气股份有限公司 上海嘉定 201801 摘要:随着电力行业各系统接入,海量数据涌现,如何利用电网信息化中大量数据,对客户需求进行判断分析,服务于营销链条,提升企业市场竞...【详细内容】
2021-12-14  安科瑞张欣    Tags:大数据   点击:(10)  评论:(0)  加入收藏
1、什么是数据分析结合分析工具,运用数据分析思维,分析庞杂数据信息,为业务赋能。 2、数据分析师工作的核心流程:(1)界定问题:明确具体问题是什么;●what 发生了什么(是什么)●why 为...【详细内容】
2021-12-01  逆风北极光    Tags:大数据   点击:(26)  评论:(0)  加入收藏
在实际工作中,我们经常需要整理各个业务部门发来的数据。不仅分散,而且数据量大、格式多。单是从不同地方汇总整理这些原始数据就花了大量的时间,更不用说还要把有效的数据收集...【详细内容】
2021-11-30  百数    Tags:数据   点击:(21)  评论:(0)  加入收藏
数据作为新的生产要素,其蕴含的价值日益凸显,而安全问题却愈发突出。密码技术,是实现数据安全最经济、最有效、最可靠的手段,对数据进行加密,并结合有效的密钥保护手段,可在开放环...【详细内容】
2021-11-26  炼石网络    Tags:数据存储   点击:(17)  评论:(0)  加入收藏
导读:网易大数据平台的底层数据查询引擎,选用了Impala作为OLAP查询引擎,不但支撑了网易大数据的交互式查询与自助分析,还为外部客户提供了商业化的产品与服务。今天将为大家分享...【详细内容】
2021-11-26  DataFunTalk    Tags:大数据   点击:(15)  评论:(0)  加入收藏
导读:数据挖掘是一种发现知识的手段。数据挖掘要求数据分析师通过合理的方法,从数据中获取与挖掘项目相关的知识。作者:赵仁乾 田建中 叶本华 常国珍来源:华章科技数据挖掘是一...【详细内容】
2021-11-23  华章科技  今日头条  Tags:数据挖掘   点击:(20)  评论:(0)  加入收藏
今天再给大家分享一个不错的可视化大屏分析平台模板DataColour。 data-colour 可视化分析平台采用前后端分离模式,后端架构设计采用微服务架构模式。 前端技术:Angularjs、Jq...【详细内容】
2021-11-04  web前端进阶    Tags:DashboardClient   点击:(40)  评论:(0)  加入收藏
在Kubernetes已经成了事实上的容器编排标准之下,微服务的部署变得非常容易。但随着微服务规模的扩大,服务治理带来的挑战也会越来越大。在这样的背景下出现了服务可观测性(obs...【详细内容】
2021-11-02  大数据推荐杂谈    Tags:Prometheus   点击:(40)  评论:(0)  加入收藏
同一产品对老客户的要价竟然比新客户要高?这是当下“大数据杀熟”的直接结果。近年来,随着平台经济的蓬勃发展,大数据在为用户服务之外,也引发了多种不合理现象。为了有效遏制“...【详细内容】
2021-10-29    海外网   Tags:大数据   点击:(31)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条