Ⅰ 如何在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网络的结构搭建,至于如何把数据处理规范化成网络所需的结构以及把模型预测结果与实际值比较统计的可视化,就需要根据实际情况做调整了。
Ⅱ 如何从股票数据中预测股票涨跌
在股市中成交量和股价是技术分析的最基本要素,其中量是市场运动的原因,价是市场运动的结果,量价之间有一个基本的对应,称为量价关系。利用这个关系,就可以根据成交量和股价的变化来推测股价的未来走势。
在成交量和股价的关系组合中具有意义的主要有如下几个:
1、价格随成交量的递增而上涨,为市场行情的正常特性,此种量增价涨的关系,表示股价将继续上升。
2、股价下跌,向下跌破股价形态、趋势线、移动平均线,同时出现大成交量是股价将深幅下跌的信号,强调趋势的反转。
3、股价随着缓慢递增的成交量而逐渐上涨,渐渐的走势突然成为垂直上升的爆发行情,成交量急剧增加,股价爆涨,紧接着,成交量大幅萎缩,股价急剧下跌,表示涨势已到末期,有转势可能。
4、温和放量。个股的成交量在前期持续低迷之后,出现连续温和放量形态,一般可以证明有实力资金在介入。但这并不意味着投资者就可以马上介入,个股在底部出现温和放量之后,股价会随量上升,量缩时股价会适量调整。当持续一段时间后,股价的上涨会逐步加快。
5、突放巨量。这其中可能存在多种情况,如果股价经历了较长时间的上涨过程后放巨量,通常表明多空分歧加大,有实力资金开始派发,后市继续上涨将面临一定困难。而经历了深幅下跌后的巨量一般多为空方力量的最后一次集中释放,后世继续深跌的可能性很小,反弹或反转的时机近在眼前。如果股市整体下跌,而个股逆势放量,在市场一片喊空声之时放量上攻,造成十分醒目的效果。这类个股往往持续时间不长,随后反而加速下跌。
6、成交量也有形态,当成交量构筑圆弧底,而股价也形成圆弧底时,往往表明该股后市将出现较大上涨机会。
这些可以慢慢去领悟,炒股最重要的是掌握好一定的经验与技巧,这样才能作出准确的判断,新手在把握不准的情况下不防用个牛股宝手机炒股去跟着里面的牛人去操作,这样要稳妥得多,希望可以帮助到您,祝投资愉快!
Ⅲ 请教用人工神经网络进行股票预测在weka
预测股票可不是有以往股票数据就能的,要考虑因果性,现实事件与股票波动有因果性,也就是时序性。在这情况下有LSTM单元组成循环神经网络可以做到,但训练集的强度跟体积可是很大的,这需要注意。
Ⅳ 通常用什么数据预测股票的价格收盘价,开盘价,最低价,最高价
您好,股票的价格一般是不能预测的,但是大体走势还是可以看得出来,不是单一的看某种价格,您可以查看近几日的k线图变化来大致推算预测走势,k线图的上影线和下影线有一定的趋势象征,还是要多关注财经新闻,国家政策。纯手打,望采纳,谢谢!
Ⅳ 有没有大佬能利用机器学习预测30天后股票涨跌情况啊,我实现不出来,头都大了
考虑两个最简单的模型,第一个是趋势跟随,也就是正在上涨的股票后面大概率还会延续上涨,正在下跌的股票后面大概率还会延续下跌。第二个是均值回归,就是跌得多了,一定会涨;涨的过头了,一定会跌。用这两个作为输出,实现预测。
Ⅵ 如何利用Python预测股票价格
预测股票价格没有意义。
单支股票价格,多股组合,大盘这些都可以使用神经网络来学习,02年就做过了,涨跌预测平均能达到54%到57%的准确率,但是只能定性,无法定量,因此,在扣除印花税之后无利可图。
纯粹使用股票交易数据来预测并保证总体获利不是程序能办到的,人也办不到。
目前世界上最先进的炒股机器也只能利用网络时差那微不可计的零点几秒在欧洲与美国证券间倒来倒去,那套系统研发费用数千万,硬件(主要是独立光缆)费用以亿计。
Ⅶ 怎样预测股票价格趋势
在看布雷利的公司理财一书中提到,股票的价格走势是无法预测的。它说1.从技术面分析,股价的变化模式无法是一致的,相继周期之间价格没有相关性,股票看起来是服从随机游走的。2.从基本面分析,所有关于公司的信息会瞬间,准确的反应在股价上,远比人们做出的反应快。
而且,在一次大学讲座的,以及炎黄财经某老师说道股价更大程度是作布朗运动。
那么,如果股价真的是无法预测的话,那么所谓的投资不就是投机?那些日本蜡烛图,rsi各种指标又如何风靡?如果是的话我的世界就凌乱了!
Ⅷ 预测股票的方法有几种
1、股票价格的预测要综合考虑多种因素,比如公司的基本面、日K线、周K线、月K线、成交量、各种技术指标等等。股票买了就涨是许多人梦寐以求的事情,其实,盘中判断股价会不会拉升并不是“可‘想’不可求”的事情,是通过长期看盘、操盘实践可以达到或者部分达到的境界。其中一个重要方法是“结合技术形态研判量能变化”,尤其是研判有无增量资金。
2、股票预测公式和方法是:
如果当天量能盘中预测结果明显大于上一天的量能,增量达到一倍以上,出现增量资金的可能性较大。股票预测首先要预测全天可能出现的成交量。公式是(240分钟÷前市9:30分到看盘时为止的分钟数)×已有成交量(成交股数)。使用这个公式时要注意:
(1)往往时间越是靠前,离开9:30分越近,越是偏大于当天的实际成交量。
(2)一般采用前15分钟、30分钟、45分钟等三个时段的成交量来预测全天的成交量。过早则失真,因为开盘不久成交偏大偏密集;过晚则失去了预测的意义。
Ⅸ 如何预测股票的目标价位
一般是前期的筹码密集区和重要均线压力附近,一般涨到这儿上涨就会比较难了,剩下的就是看大盘近期走势和目标股的股性了。