时间序列分析与LSTM网络原理与实践_第1页
时间序列分析与LSTM网络原理与实践_第2页
时间序列分析与LSTM网络原理与实践_第3页
时间序列分析与LSTM网络原理与实践_第4页
时间序列分析与LSTM网络原理与实践_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

时间序列分析与LSTM网络

原理与实践提纲时间序列分析与LSTM原理LSTM进行时间序列预测实现

时间序列算法简介LSTM是长短期记忆网络,是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。LSTM在算法中加入了一个判断信息有用与否的“处理器”,这个处理器作用的结构被称为cell。一个cell当中被放置了三扇门,分别叫做输入门、遗忘门和输出门。一个信息进入LSTM的网络当中,可以根据规则来判断是否有用。只有符合算法认证的信息才会留下,不符的信息则通过遗忘门被遗忘。说起来无非就是一进二出的工作原理,却可以在反复运算下解决神经网络中长期存在的大问题。目前已经证明,LSTM是解决长序依赖问题的有效技术,并且这种技术的普适性非常高,导致带来的可能性变化非常多。各研究者根据LSTM纷纷提出了自己的变量版本,这就让LSTM可以处理千变万化的垂直问题相对于传统ARMA模型,

LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件。在非线性预测能力、抽象能力或者集成学习能力上,LSTM具有明显优势,且ARMA模型确定阶数过程复杂繁琐,而LSTM可自行学习相关参数。但LSTM的效果必须在庞大数据量基础上才能发挥出色,在小样本情况下ARMA往往比LSTM效果要好。LSTM算法简介(神经网络基础原理请看BP神经网络)关键字提取流程数据清洗,序列切分,序列平稳化划分数据集,测试集建立序列模型为模型添加适当的网络层,设计权重表达方式,正则化规则(或随机失效),激活函数定义损失函数,训练模式,提前停止机制模型训练模型检验应用关于LSTM输入序列,一般整理为3D张量,即[样本量,序列,数据]关于数据切分,为获得足够详尽的序列,一般采用滑动窗口切分,例如序列ABCD,窗口为2,预测一期,则序列划分为[[ABC][BCD]]其余参数设置可见BP神经网络教程提纲时间序列分析与LSTM原理LSTM进行时间序列预测实现LSTM实验前提准备系统准备:centos6.8、Spark2.3.1、Pyrhon3.X,导入pandas,keras,numpy数据准备:标注普洱500指数。建模目的:训练时间序列模型对股票后期走势进行预测。实例:启动python,读取数据importnumpyasnpimportpandasaspdfromkeras.modelsimportSequentialfromkeras.layersimportDensefromkeras.layersimportLSTMfromkeras.layersimportDropoutimportkeras#读取数据df=pd.read_csv('sp500.txt',

header=None)

#type:pd.DataFrame

data=np.array(df[0])

#数据整理,假设通过50个历史数据预测未来一期,则先整理出训练数据集time_step=50

sequence_length=time_step+1

实例:序列拆分,平稳化result=[]#获取全部可能序列#序列平稳化,本例选用相对变化率,即F(t)/F(0)-1forxin

range(len(df)-sequence_length):

data_cut=data[x:x+sequence_length]

#平稳化

data_norm=[((x*1.0/(data_cut[0]+1))-1)forxindata_cut]

data_norm.append(data_cut[0])

result.append(data_norm)

result=np.array(result)实例:数据集划分#随机打乱并划分训练集80%和测试集20%row=int(round(0.8*result.shape[0]))train=result[:row,:]

#数据形如[[1,2,3],[1,2,3]]np.random.shuffle(train)x_train=train[:,:-2]y_train=train[:,-2]x_test=result[row:,:-2]y_test=result[row:,-2]

mark_test=result[row:,-1]

x_train=np.reshape(x_train,(x_train.shape[0],x_train.shape[1],

1))

#数据形如[[1],[2],[3]],[[1],[2],[3]]]x_test=np.reshape(x_test,(x_test.shape[0],x_test.shape[1],

1))#构建神经网络#模型为1->50->100->1网络model=Sequential()

#序列型神经网络,即网络传播路径只有一条

#建立全连接层-首层需要指定输入层维度model.add(LSTM(output_dim=50,

#输出维度,配合下面return_sequences,返回[samples,timesteps,output_dim],即每个样本进入该层,返回[50,50]维数据

input_shape=(50,

1),

#输入维度,上面整理的输入张量每条序列有50个数组,每个值有一个元素

activation="tanh",

#激活函数

use_bias=True,

#使用偏置

return_sequences=True

#返回整个序列,由于需要连接下一层LSTM,所以需要输出整个序列

))model.add(Dropout(0.2))

#连接20%概率随机失效

model.add(LSTM(output_dim=100,

#输出维度无指定return_sequences情况下,输出[100]维数据

activation="tanh",

use_bias=True

))

#本层下接全连接层,无需返回序列,return_sequences默认Falsemodel.add(Dropout(0.2))

model.add(Dense(units=1,

activation="linear",

use_bias=True,

))实例:构建神经网络结构实例:构建训练模式并训练#建立评估函数#设计目标误差函数,以及训练方法pile(loss='mean_squared_error',

optimizer="rmsprop")

#提前结束训练的阈值,下面参数,观察误差,连续5次无改善.则结束训练early_stopping=keras.callbacks.EarlyStopping(monitor='loss',

patience=5,

verbose=0,

mode='auto')

#模型训练,写入数据,目标,迭代次数,批数,训练详情(0不显示),训练提早结束条件,分割5%作为验证model.fit(x_train,y_train,

epochs=50,

batch_size=512,

verbose=1,

validation_split=0.05,

callbacks=[early_stopping])实例:模型预测评价#模型预测与评价pred=model.predict(x_test).reshape(len(x_test))#构建评价数据F=pd.DataFrame({"y":y_test,

"pred":pred,

"mark_test":mark_test})F["pred"]=F["pred"].map(lambdax:x+1)*F["mark_test"].map(lambdax:x-1)F["y"]=F["y"].map(lambdax:x+1)*F["mark_test"].map(lambdax:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论