当前位置:首页 » 分析预测 » lstm股票走势matlab代码
扩展阅读
张国荣同性恋的原因 2024-11-17 23:12:10
西安自驾游 2024-11-17 23:04:27
山东俊富公司股票 2024-11-17 22:38:43

lstm股票走势matlab代码

发布时间: 2022-09-03 07:10:42

『壹』 BP神经网络的原理的BP什么意思

人工神经网络有很多模型,但是日前应用最广、基本思想最直观、最容易被理解的是多层前馈神经网络及误差逆传播学习算法(Error Back-Prooaeation),简称为BP网络。

在1986年以Rumelhart和McCelland为首的科学家出版的《Parallel Distributed Processing》一书中,完整地提出了误差逆传播学习算法,并被广泛接受。多层感知网络是一种具有三层或三层以上的阶层型神经网络。典型的多层感知网络是三层、前馈的阶层网络(图4.1),即:输入层、隐含层(也称中间层)、输出层,具体如下:

图4.1 三层BP网络结构

(1)输入层

输入层是网络与外部交互的接口。一般输入层只是输入矢量的存储层,它并不对输入矢量作任何加工和处理。输入层的神经元数目可以根据需要求解的问题和数据表示的方式来确定。一般而言,如果输入矢量为图像,则输入层的神经元数目可以为图像的像素数,也可以是经过处理后的图像特征数。

(2)隐含层

1989年,Robert Hecht Nielsno证明了对于任何在闭区间内的一个连续函数都可以用一个隐层的BP网络来逼近,因而一个三层的BP网络可以完成任意的n维到m维的映射。增加隐含层数虽然可以更进一步的降低误差、提高精度,但是也使网络复杂化,从而增加了网络权值的训练时间。误差精度的提高也可以通过增加隐含层中的神经元数目来实现,其训练效果也比增加隐含层数更容易观察和调整,所以一般情况应优先考虑增加隐含层的神经元个数,再根据具体情况选择合适的隐含层数。

(3)输出层

输出层输出网络训练的结果矢量,输出矢量的维数应根据具体的应用要求来设计,在设计时,应尽可能减少系统的规模,使系统的复杂性减少。如果网络用作识别器,则识别的类别神经元接近1,而其它神经元输出接近0。

以上三层网络的相邻层之间的各神经元实现全连接,即下一层的每一个神经元与上一层的每个神经元都实现全连接,而且每层各神经元之间无连接,连接强度构成网络的权值矩阵W。

BP网络是以一种有教师示教的方式进行学习的。首先由教师对每一种输入模式设定一个期望输出值。然后对网络输入实际的学习记忆模式,并由输入层经中间层向输出层传播(称为“模式顺传播”)。实际输出与期望输出的差即是误差。按照误差平方最小这一规则,由输出层往中间层逐层修正连接权值,此过程称为“误差逆传播”(陈正昌,2005)。所以误差逆传播神经网络也简称BP(Back Propagation)网。随着“模式顺传播”和“误差逆传播”过程的交替反复进行。网络的实际输出逐渐向各自所对应的期望输出逼近,网络对输入模式的响应的正确率也不断上升。通过此学习过程,确定下各层间的连接权值后。典型三层BP神经网络学习及程序运行过程如下(标志渊,2006):

(1)首先,对各符号的形式及意义进行说明:

网络输入向量Pk=(a1,a2,...,an);

网络目标向量Tk=(y1,y2,...,yn);

中间层单元输入向量Sk=(s1,s2,...,sp),输出向量Bk=(b1,b2,...,bp);

输出层单元输入向量Lk=(l1,l2,...,lq),输出向量Ck=(c1,c2,...,cq);

输入层至中间层的连接权wij,i=1,2,...,n,j=1,2,...p;

中间层至输出层的连接权vjt,j=1,2,...,p,t=1,2,...,p;

中间层各单元的输出阈值θj,j=1,2,...,p;

输出层各单元的输出阈值γj,j=1,2,...,p;

参数k=1,2,...,m。

(2)初始化。给每个连接权值wij、vjt、阈值θj与γj赋予区间(-1,1)内的随机值。

(3)随机选取一组输入和目标样本

提供给网络。

(4)用输入样本

、连接权wij和阈值θj计算中间层各单元的输入sj,然后用sj通过传递函数计算中间层各单元的输出bj

基坑降水工程的环境效应与评价方法

bj=f(sj) j=1,2,...,p (4.5)

(5)利用中间层的输出bj、连接权vjt和阈值γt计算输出层各单元的输出Lt,然后通过传递函数计算输出层各单元的响应Ct

基坑降水工程的环境效应与评价方法

Ct=f(Lt) t=1,2,...,q (4.7)

(6)利用网络目标向量

,网络的实际输出Ct,计算输出层的各单元一般化误差

基坑降水工程的环境效应与评价方法

(7)利用连接权vjt、输出层的一般化误差dt和中间层的输出bj计算中间层各单元的一般化误差

基坑降水工程的环境效应与评价方法

(8)利用输出层各单元的一般化误差

与中间层各单元的输出bj来修正连接权vjt和阈值γt

基坑降水工程的环境效应与评价方法

(9)利用中间层各单元的一般化误差

,输入层各单元的输入Pk=(a1,a2,...,an)来修正连接权wij和阈值θj

基坑降水工程的环境效应与评价方法

(10)随机选取下一个学习样本向量提供给网络,返回到步骤(3),直到m个训练样本训练完毕。

(11)重新从m个学习样本中随机选取一组输入和目标样本,返回步骤(3),直到网路全局误差E小于预先设定的一个极小值,即网络收敛。如果学习次数大于预先设定的值,网络就无法收敛。

(12)学习结束。

可以看出,在以上学习步骤中,(8)、(9)步为网络误差的“逆传播过程”,(10)、(11)步则用于完成训练和收敛过程。

通常,经过训练的网络还应该进行性能测试。测试的方法就是选择测试样本向量,将其提供给网络,检验网络对其分类的正确性。测试样本向量中应该包含今后网络应用过程中可能遇到的主要典型模式(宋大奇,2006)。这些样本可以直接测取得到,也可以通过仿真得到,在样本数据较少或者较难得到时,也可以通过对学习样本加上适当的噪声或按照一定规则插值得到。为了更好地验证网络的泛化能力,一个良好的测试样本集中不应该包含和学习样本完全相同的模式(董军,2007)。

『贰』 如何在Python中用LSTM网络进行时间序列预测

时间序列模型

时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的,同样大小的值改变顺序后输入模型产生的结果是不同的。
举个栗子:根据过去两年某股票的每天的股价数据推测之后一周的股价变化;根据过去2年某店铺每周想消费人数预测下周来店消费的人数等等

RNN 和 LSTM 模型

时间序列模型最常用最强大的的工具就是递归神经网络(recurrent neural network, RNN)。相比与普通神经网络的各计算结果之间相互独立的特点,RNN的每一次隐含层的计算结果都与当前输入以及上一次的隐含层结果相关。通过这种方法,RNN的计算结果便具备了记忆之前几次结果的特点。

典型的RNN网路结构如下:

4. 模型训练和结果预测
将上述数据集按4:1的比例随机拆分为训练集和验证集,这是为了防止过度拟合。训练模型。然后将数据的X列作为参数导入模型便可得到预测值,与实际的Y值相比便可得到该模型的优劣。

实现代码

  • 时间间隔序列格式化成所需的训练集格式

  • import pandas as pdimport numpy as npdef create_interval_dataset(dataset, look_back):

  • """ :param dataset: input array of time intervals :param look_back: each training set feature length :return: convert an array of values into a dataset matrix. """

  • dataX, dataY = [], [] for i in range(len(dataset) - look_back):

  • dataX.append(dataset[i:i+look_back])

  • dataY.append(dataset[i+look_back]) return np.asarray(dataX), np.asarray(dataY)


  • df = pd.read_csv("path-to-your-time-interval-file")

  • dataset_init = np.asarray(df) # if only 1 columndataX, dataY = create_interval_dataset(dataset, lookback=3) # look back if the training set sequence length

  • 这里的输入数据来源是csv文件,如果输入数据是来自数据库的话可以参考这里

  • LSTM网络结构搭建

  • import pandas as pdimport numpy as npimport randomfrom keras.models import Sequential, model_from_jsonfrom keras.layers import Dense, LSTM, Dropoutclass NeuralNetwork():

  • def __init__(self, **kwargs):

  • """ :param **kwargs: output_dim=4: output dimension of LSTM layer; activation_lstm='tanh': activation function for LSTM layers; activation_dense='relu': activation function for Dense layer; activation_last='sigmoid': activation function for last layer; drop_out=0.2: fraction of input units to drop; np_epoch=10, the number of epoches to train the model. epoch is one forward pass and one backward pass of all the training examples; batch_size=32: number of samples per gradient update. The higher the batch size, the more memory space you'll need; loss='mean_square_error': loss function; optimizer='rmsprop' """

  • self.output_dim = kwargs.get('output_dim', 8) self.activation_lstm = kwargs.get('activation_lstm', 'relu') self.activation_dense = kwargs.get('activation_dense', 'relu') self.activation_last = kwargs.get('activation_last', 'softmax') # softmax for multiple output

  • self.dense_layer = kwargs.get('dense_layer', 2) # at least 2 layers

  • self.lstm_layer = kwargs.get('lstm_layer', 2) self.drop_out = kwargs.get('drop_out', 0.2) self.nb_epoch = kwargs.get('nb_epoch', 10) self.batch_size = kwargs.get('batch_size', 100) self.loss = kwargs.get('loss', 'categorical_crossentropy') self.optimizer = kwargs.get('optimizer', 'rmsprop') def NN_model(self, trainX, trainY, testX, testY):

  • """ :param trainX: training data set :param trainY: expect value of training data :param testX: test data set :param testY: epect value of test data :return: model after training """

  • print "Training model is LSTM network!"

  • input_dim = trainX[1].shape[1]

  • output_dim = trainY.shape[1] # one-hot label

  • # print predefined parameters of current model:

  • model = Sequential() # applying a LSTM layer with x dim output and y dim input. Use dropout parameter to avoid overfitting

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=input_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out,

  • return_sequences=True)) for i in range(self.lstm_layer-2):

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out,

  • return_sequences=True)) # argument return_sequences should be false in last lstm layer to avoid input dimension incompatibility with dense layer

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out)) for i in range(self.dense_layer-1):

  • model.add(Dense(output_dim=self.output_dim,

  • activation=self.activation_last))

  • model.add(Dense(output_dim=output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_last)) # configure the learning process

  • model.compile(loss=self.loss, optimizer=self.optimizer, metrics=['accuracy']) # train the model with fixed number of epoches

  • model.fit(x=trainX, y=trainY, nb_epoch=self.nb_epoch, batch_size=self.batch_size, validation_data=(testX, testY)) # store model to json file

  • model_json = model.to_json() with open(model_path, "w") as json_file:

  • json_file.write(model_json) # store model weights to hdf5 file

  • if model_weight_path: if os.path.exists(model_weight_path):

  • os.remove(model_weight_path)

  • model.save_weights(model_weight_path) # eg: model_weight.h5

  • return model

  • 这里写的只涉及LSTM网络的结构搭建,至于如何把数据处理规范化成网络所需的结构以及把模型预测结果与实际值比较统计的可视化,就需要根据实际情况做调整了。

    『叁』 lstm工具箱2016matlab有吗

    有的。
    Matlab2016b官方版是一款出自MathWorks公司之手的科学计算工具,Matlab2016b最新版功能强劲,能够帮助用户轻松进行工程计算、控制设计、信号处理与通讯、图像处理、信号检测等操作,MathworksMatlab2016b操作简便,可实现数值分析、数值和符号计算、工程与科学绘图等。
    此版本增加了新的功能以简化MATLAB中的大数据处理过程,还包括Simulink的其他新功能、一个新的工具箱RiskManagementToolbox以及其它83款产品的更新和问题修复。除此之外,Matlab2016b还增加一个时间表数据容器,用于索引和同步带时间戳的表格数据,增加了字符串数组,用于进行有效的进行文本数据的操作、比较和存储,以及增加其它用于数据预处理的新功能。

    『肆』 matlab2018a中有lstm工具箱吗

    matlab工具箱就是省去了matlab编程的过程。

    他就是把程序转换成界面,便于初学者的学习,操作。里面有各种工具箱,比如小波工具箱,神经网络工具箱,粒子算法优化工具箱,仿真模拟工具箱等等。

    sum=xlsread('name.xls');%name为文件名,将excel数据储存在sum矩阵中。sum1=sum(:,1);%取出sum第一列数据为sum1,很多时候会用到取出某一行;如果是取出列,类似的。

    服务支持:

    Simulink®: Simulation Performance Advisor,链接库模块的封装,以及通过逻辑表达式控制有效变量。

    Simulink: 除 LEGO® MINDSTORMS® NXT、Arino®、Pandaboard 和 Beagleboard 外,还为 Raspberry Pi™ 和 Gumstix® Overo® 硬件提供了内置支持。

    SimRF™: 针对快速仿真和模型加载时间的电路包络求解器。

    SimMechanics™: 发布了用于从 CAD 和其他系统导入模型的 XML 架构。

    Simulink Design Verifier™: 数组超出边界检查。

    『伍』 使用MATLAB里面的LSTM,Invalid training data. Responses must be a vector of categorical responses

    responses 变量需要定义为categorical类型。比如你的变量是a,你加一句:a=categorical(a);

    『陆』 什么算法可以改进lstm

    基于模糊聚类算法改进lstm的预测方法。
    发明的目的在于解决股票市场中的价格预测问题,提供一种基于模糊聚类算法改进lstm的预测方法,该预测方法引入模糊聚类算法,对已序列化的数据进行模糊聚类得到隶属度矩阵,并利用隶属度矩阵对经过融合的lstm网络输出进行加权求和,最终得到股票价格预测值,可以有效的模拟股票趋势中的波动特点及场景,使得预测结果更加准确且符合实际。

    『柒』 matlab中如何调用更改lstm的权重

    方法/步骤

    • 在电脑上打开Matlab软件,并将要进行预测的Excel中数据保存到Matlab工作路径下

    • 总结:

      1.打开Matlab,将要处理的数据保存到工作路径下

      2.接着新建一个脚本文件

      3.在脚本文件中输入程序,读取数据、建立LSTM网络,并训练网络

      4.编写好程序以后点击“保存”,接着点击“运行”捷克语在figure页面看导预测结果

    『捌』 什么是BP神经网络

    误差反向传播(Error Back Propagation, BP)算法
    1、BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。
    1)正向传播:输入样本->输入层->各隐层(处理)->输出层
    注1:若输出层实际输出与期望输出(教师信号)不符,则转入2)(误差反向传播过程)
    2)误差反向传播:输出误差(某种形式)->隐层(逐层)->输入层
    其主要目的是通过将输出误差反传,将误差分摊给各层所有单元,从而获得各层单元的误差信号,进而修正各单元的权值(其过程,是一个权值调整的过程)。
    注2:权值调整的过程,也就是网络的学习训练过程(学习也就是这么的由来,权值调整)。
    2、BP算法实现步骤(软件):
    1)初始化
    2)输入训练样本对,计算各层输出
    3)计算网络输出误差
    4)计算各层误差信号
    5)调整各层权值
    6)检查网络总误差是否达到精度要求
    满足,则训练结束;不满足,则返回步骤2)
    3、多层感知器(基于BP算法)的主要能力:
    1)非线性映射:足够多样本->学习训练
    能学习和存储大量输入-输出模式映射关系。只要能提供足够多的样本模式对供BP网络进行学习训练,它便能完成由n维输入空间到m维输出空间的非线性映射。
    2)泛化:输入新样本(训练时未有)->完成正确的输入、输出映射
    3)容错:个别样本误差不能左右对权矩阵的调整
    4、标准BP算法的缺陷:
    1)易形成局部极小(属贪婪算法,局部最优)而得不到全局最优;
    2)训练次数多使得学习效率低下,收敛速度慢(需做大量运算);
    3)隐节点的选取缺乏理论支持;
    4)训练时学习新样本有遗忘旧样本趋势。
    注3:改进算法—增加动量项、自适应调整学习速率(这个似乎不错)及引入陡度因子

    『玖』 lstm序列指什么

    LSTM(Long Short-Term Memory)是长短期记忆网络,是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。

    LSTM 已经在科技领域有了多种应用。基于 LSTM 的系统可以学习翻译语言、控制机器人、图像分析、文档摘要、语音识别图像识别、手写识别、控制聊天机器人、预测疾病、点击率和股票、合成音乐等等任务。
    工作原理
    LSTM区别于RNN的地方,主要就在于它在算法中加入了一个判断信息有用与否的"处理器",这个处理器作用的结构被称为cell。

    一个cell当中被放置了三扇门,分别叫做输入门、遗忘门和输出门。一个信息进入LSTM的网络当中,可以根据规则来判断是否有用。只有符合算法认证的信息才会留下,不符的信息则通过遗忘门被遗忘。

    说起来无非就是一进二出的工作原理,却可以在反复运算下解决神经网络中长期存在的大问题。目前已经证明,LSTM是解决长序依赖问题的有效技术,并且这种技术的普适性非常高,导致带来的可能性变化非常多。各研究者根据LSTM纷纷提出了自己的变量版本,这就让LSTM可以处理千变万化的垂直问题。

    『拾』 matlablstm工具箱在哪里打开

    工具箱的打开方式在左下角有个Start
    ---toolbox里面,看你需要什么工具箱了。