使用LSTM预测股价,特征:19个指标5天历史数据


LSTM介绍

LSTM是具有时间特性的神经网络,我们利用LSTM预测时间序列——股价。 
从文本到股价,LSTM的输入特征和网络结构都有哪些变化呢? 
我们先看一个简单的RNN结构。与普通的全连接层神经网络的权重更新沿着一层层隐藏层网络不同,RNN的权重更新有两个方向,一个是像传统神经网络沿着输入层隐藏层更新,即图中的U和V的权重矩阵,一个是沿着St-2,St-1,St,St+1...的状态层更新,即途中的W权重矩阵。 
image.png-54.6kB 
对于传统的神经网络,假如输入数据的格式是[100,5],即100个样本,特征是5,那么输入神经元的个数是[5] 
对于RNN处理的时间序列,应该是什么样的呢? 
首先我们知道RNN可以处理文本信息。例如,这句话。

我昨天上学迟到了

利用python的jieba分词

 
  1. jieba.cut('我昨天上学迟到了')

得到这样的句式结构。

我 昨天 上学 迟到 了

那么实际上输入输出是这样的:

输入 标签
s
昨天
昨天 上学
上学 迟到
迟到

或者

input: [“Jack”, “and”, “Jill”, “went”], label: [“up”]

input: [“and”, “Jill”, “went”, “up”], label: [“the”]

input: [“Jill”, “went”, “up”, “the”], label: [“hill”]

input: [“went”, “up”, “the”, “hill”], label: [“.”]

做向量化和one-hot编码得到,这里的one-hot不是真正的编码,是我举例的,真正的维度要高得多,这里假设是10维

输入 标签
0000000001 0000000010
0000000010 0000000100
0000000100 0000001000
0000001000 0000010000
0000010000 0000100000

输入数据的格式(100,20,10) 
100是序列个数,一篇文章句子的个数。 
20是时间步,就是句子最大能容纳的词数,词数少的句子补齐。 
10是每个时间步的维度,就是词向量维度。

image.png-17.4kB

开始建模

数据:香港恒生指数 
指标:'Closing Price', 'Open Price', 'High price', 'Low Price','Volume','MACD', 'CCI', 'ATR', 'BOLL_MID', 'EMA20','MA10','MTM6', 'MA5','MTM12', 'ROC', 'SMI', 'WVAD', 'US Dollar Index','HIBOR' 
日期:2008-07-02' 至 '2016-09-30'

首先,定义一个求t-5,t-4,t-3,t-2,t-1时刻的特征指标的函数,也就是之前的19维特征,现在变成了19*(5+1)=114维的特征。+1是因为考虑t时刻本身的特征。

 
  1. def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
  2. #if n_in=2, t-2,t-1,t
  3. n_vars = 1 if type(data) is list else data.shape[1] #return feature numbers
  4. df = DataFrame(data)
  5. cols, names = list(), list()
  6. # input sequence (t-n_in, ... t-1)
  7. for i in range(n_in, 0, -1):#print n_int to i in inverted order[n_in,n_in-1,...,1]
  8. cols.append(df.shift(i))
  9. names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
  10. # forecast sequence (t, t+1, ... t+n)
  11. for i in range(0, n_out):
  12. cols.append(df.shift(-i
  • 9
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值