业界
降低股价方法
请问股价的升降原理是什么,或者说主力是通过什么手段在他们需要的时候拉升股价的
证券交易所股票价格是根据过去一笔交易的价格确定的
比如现在有人5元买,有人6元卖
就不可以成交
这个时候一旦有人报出6元的买价
那么成交
交易所显示刚刚成交的那笔交易的价格:6元
而后,有人7元卖,又有人在7元买
那交易所又会显示7元
当然,这只是举个例子 只是说明一下 交易价格的形成机制
好几笔大买单的线元更低的报价,就会马上成交
人家看到5元的报价挂在那里,也就不会报出比5元更低的价格
我的理解
不知道对你有没有帮助
庄家拉升和打压股价的时候,确实经常使用自买自卖的手法(即对敲)。下面这篇文章就讲述了中间的操作细节,供你参考:
家对敲主要是利用成交量制造有利于庄家的股票价位,吸引散户跟进或卖出.庄家经常在建仓, 震仓,拉高,出货,反弹行情中运用对敲.本人认为庄家对敲的方式主要有以下几种:
第一:建仓通过对敲的手法来打压股票价格,以便在低价位买到更多更便宜的筹码.在个股的K线图上表现为股票处于低位时,股价往往以小阴小阳沿10日线持续上扬.这说明有庄家在拉高建仓,
然后出现成交量放大并且股价连续的阴线下跌,而股价下跌就是庄家利用大手笔对敲来打压股价. 这期间K线图的主要特征是:股票价格基本是处于低位横盘(也有拉涨停的),但成交量却明显增加,从盘口看股票下跌时的每笔成交量明显大于上涨或者横盘时的每笔成交量. 这时的每笔成交会维持在相对较高的水平(因为在低位进行对敲散户尚未大举跟进).另外,在低位时庄家更多的运用夹板的手法,既上下都有大的买卖单,中间相差几分钱,同时不断有小买单吃货,其目的就是让股民觉得该股抛压沉重上涨乏力,而抛出手中股票;
第二:拉升利用对敲的手法来大幅度拉抬股价.庄家利用较大的手笔大量对敲, 制造该股票被市场看好的假象,提升股民的期望值,减少日后该股票在高位盘整时的抛盘压力(散户跟他抢着出货).这个时期散户投资者往往有买不到的感觉,需要高报许多价位才能成交,从盘口看小手笔的买单往往不容易成交,而每笔成交量明显有节奏放大.强势股的买卖盘均有3位数以上, 股价上涨很轻快,不会有向下掉的感觉,下边的买盘跟进很快, 这时的每笔成交会有所减少(因为对敲拉抬股价,不可能象吸筹时再投入更多资金, 加上散户跟风者众多,所以虽出现价量齐升,但每笔成交会有所减少);
第三:震仓洗盘因为跟风盘获利比较丰厚,庄家一般会采用大幅度对敲震仓的手法使一些不够坚定的投资者出局.从盘口看在盘中震荡时,高点和低点的成交量明显放大,这是庄家为了控制股价涨跌幅度而用相当大的对敲手笔控制股票价格造成的;
第四:对敲拉高当经过高位的对敲震仓之后, 股评家也都长线看好,股价再次以巨量上攻.这时庄家开始出货, 从盘口看往往是盘面上出现的卖二,卖三上成交的较大手笔,而我们并没有看到卖二,卖三上有非常大的卖单,而成交之后,原来买一或者是买二甚至是买三上的买单已经不见了,或者减小了,这往往是庄家运用比较微妙的时间差报单的方法对一些经验不足的投资者布下的陷阱, 散户吃进的往往是庄家事先挂好的卖单,而接庄家卖出的往往是跟风的散户;
第五:反弹对敲庄稼出货之后, 股票价格下跌,许多跟风买进的中小散户已经套牢, 成交量明显萎缩,庄家会找机会用较大的手笔连续对敲拉抬股价(这时庄家不会向以前那样卖力了), 较大的买卖盘总是突然出现又突然消失,因为庄家此时对敲拉抬的目的只是适当的拉高股价,以便能够把手中最后的筹码也卖个好价钱 如何降低股价
放假消息。挂大卖单。前提是你有很多资金做空他。很简单的 什么方法使股票价格上升和降低
【影响股市涨跌的相关因素,未来走势的预测办法】 1、股票价格的涨跌简单来说,供求决定价格,买的人多价格就涨,卖的人多价格就跌。形成股市、股票个股涨跌的原因是多方面的。 2、从深层次来说,影响股市走势、个股行情的是政策面、基本面、技术面、资金面、消息面的因素,以及上市公司的经营业绩、成长性等因素,它们分别是利空还是利多。 3、股指和股价升多了会有所调整,跌多了也会出现反弹,这是不变的规律。 4、投资者的心态不稳也会助长下跌的,还有的是对上市公司发展预期是好是坏,也会造成股票价格的涨跌。 5、也有的是主力洗盘打压下跌,就是主力庄家为了达到炒作股票的目的,在市场大幅震荡时,让持有股票的散户使其卖出股票,以便在低位大量买进,达到其手中拥有能够决定该股票价格走势的大量筹码。直至所拥有股票数量足够多时,再将股价向上拉升,从而获取较高利润。 6、股票软件走势图之中的K线系统、均线系统、各种技术指标,也可以做为研判的技术性工具。 除此之外,如果股价处在反弹高位时,KDJ 指标一般来说也会同时处在高位,但是,在高位之下再经过整理蓄势之后,不排除还会有更高的反弹高点;如果股价处在回调的低位,一般来说,这时的KDJ指标也将会处在低位,但是并不能排除还会有更低的低点。 因此来说,要研判股市未来走势和个股走向,可以借助一两个技术指标,还必须结合均线系统、成交量,以及日K线这些技术形态一起来看,才会有更大的可靠性。 庄家 是如何把股价抄上来,又如何把股价压下去的
. 庄家分析方法介绍
庄家炒股票也要获利。同样是买、卖的差价获利。与散户不同的是,他可以控制股票的走势和价格,也就是说散户获利是靠期待股价上涨,而庄家则是自己拉动股价上涨。 所以,庄家炒作包括四部分:建仓、拉高、整理、出货。所谓的“洗盘”,多为吃货。一般是吃、拉、出三步曲。
庄家建仓一般要选择股价较低时,而且希望越低越好,他恨不得砸两个板再买。所以,“拉高吃货”之类,以及股价已经创新高还说是吃货,等等,千万别信。吃货结束之后,一般会有一个急速的拉升过程。一旦一只股票开始大涨,它就脱离了安全区,随时都有出货的可能。所以我的中线推荐一律是在低位。 当庄家认为出货时机未到时,就需要在高位进行横盘整理,一般是打个差价,散户容易误认为出货。 庄家出货一般要做头部,头部的特点是成交量大,振幅大,除非赶上大盘做头,一般个股的头部时间都在1个月以上。
庄家分析方法是一种综合分析方法,不能单看图形,也要参考技术,还得注意股票的基本面和一些外围情况。
在介绍具体图形分析之前,先谈一些外围因素。
1.板块效应。板块效应就是具有相同地域、行业、题材的股票走势上相接近,并互相影响。板块联动对于庄家炒作具有非常大的益处。一个板块,只要有一个领涨股,其它股票只需轻拉,或不需拉高,就能上涨。同时,由于该板块成为市场的明显热点,短线资金会大量涌入,出货要方便得多。但板块联动也不是永远的,一方面有的股票属于多个板块,另一方面吃货阶段和出货之后,庄家不再进行照顾,自然也就没有联动了。所以用庄家分析方法,不能买入板块正在处于联动状态的股票,尤其是市场公认的热点时。
2.股价。在美国股市,股价对于股票的走势没有任何意义。而在中国近2年3元以下的股票几乎没有。这是一个怪现象,也是投机市场的一个表现。为了降低股价,各公司纷纷送股。这里要谈的是,当一只股票价格较低时,即便没有业绩、题材,庄家做起来地气也很足,而当一只股票价格过高时,尤其是在20元以上,庄家轻易不会建仓,而且一旦横盘,出货的面就很大。
3.业绩。在96年以前,股市是不谈业绩的,所以买入低市盈率的股票是很容易获利的。97年曾经一度消灭了20倍市盈率的股票,之后大家是注意业绩了,可是却进入了一个怪圈:业绩好的一路阴跌,业绩坏的,尤其是st,竟然一路上涨。其实主要原因是业绩影响散户的持股心态。市盈率低的,业绩成长好的,股价本来就高,散户还不愿意卖,庄家自然不愿意做,也就是主力在大盘起动时拉一把。而业绩不好的,尤其时亏损的,散户有一种恐惧感,即便跳水也要割肉,所以庄家能够吃到便宜的股票,自然会向上做,这就是st上涨的原因。
4.消息。目前市场的定势是,利好出货,利空吃货,当然以后不完全这样,但大家还是按这个操作比较把握。
5.技术。主要是指标。许多庄家就是喜欢和技术对着做,双头嘛,涨,头肩底嘛,跌。指标就是让它钝化。所以庄家分析方法虽然也看走势,看量价,但与传统的技术分析完全不同。在分析庄家时最好不要看技术,否则容易上当。
6.政策。政策对于庄家炒作的态度,直接影响到庄家的信心和操作策略。97年实行异动停牌制,多数庄家都不敢乱动。还有就是停板、t+1制度等。中国股市的政策多变,一定要加以关注。
7.大盘走势。与大盘走势的关系,和板块联动有些相似。大盘上涨时,拉高、出货容易,吃货就很困难,而大盘下跌时,拉高就非常费劲,而且接盘少,相反吃货却很容易。所以庄家炒股票也要顺势,尤其时资金量不足时。逆市庄家一般实力较强,但多数也有阴谋。近来跳水的很多,大家都已经看到了。
分析庄家的指导思想是什么呢
1、是庄家,都跑不了吃货、拉高、出货。
2、吃货的手段就是躲避买盘,吸引卖盘;出货的手段就是增强散户持股信心,吸引买盘。
3、庄家做股票的习惯、手法和信心。
4、庄家的共同心理:预期获利幅度、不愿赔钱、不愿认输。
5、大盘走势、板块联动、周边消息等对该股买卖盘的影响。
接下来的任务,就是挨项研究,哪些走势表明是吃货、哪些是拉高、哪些是洗盘、哪些是出货;哪些消息是为了出货,哪些是为了吃货;什么样的走势表明庄家信心十足,什么样的走势表明庄家已经开始失去耐心;一般庄家做到什么价钱开始考虑出货;顺势时对庄家的影响、逆市时的影响;板块联动时,什么布局可以有补涨,什么布局是同时结束;等等。
从小我就认为,人要自立。除了上课老师讲的东西,我很少愿意去问别人。我只是去看书、去分析研究。一方面,谁的知识来的都不容易,也没有教你的义务;另一方面,只有自己得到知识,掌握的才最牢靠。
庄家的分类
在分析庄家之前,应先了解庄家的分类,因为不同类型的庄家,操盘手法是不同的。还需说明一点,庄家的水平差距也比较大,庄家水平低的股票,还是不参与为妙。
根据操作周期可分为短线庄、中线庄、长线庄;根据走势振幅和幅度可分为强庄和弱庄;根据股票走势和大盘的关系,可分为顺势庄、逆市庄;根据庄家做盘顺利与否,可分为获利庄和被套庄。
这里还需谈一下我对庄家的定义。人们往往认为资金量大,持仓量大就是庄家,那是不对的。庄家需具备两点:有能力控制一段时间内的股价走势;有意识地进行与目标反方向的操作。即要买入时,还得不时地卖出以稳定股价;要卖出时,还要买入以拉高股价。
下面分别介绍不同类型庄家的特点。
短线庄家。短线庄家的特点是重势不重价,也不强求持仓量。大致可分为两种。一种是抄反弹的,在大盘接近低点时接低买进1-2天,然后快速拉高,待广大散户也开始抢反弹时迅速出局。一类是炒题材的,出重大利好消息前拉高吃货,或出消息后立即拉高吃货,之后继续迅速拉升,并快速离场。
中线庄家。中线庄家看中的往往是大盘的某次中级行情,或是某只股票的题材。中线庄家经常会对板块进行炒作。中线个月的建仓,持仓量并不是很高,然后借助大盘或利好进行拉高,通过板块联动效应以节省成本、方便出货,然后在较短的时间内迅速出局。中线庄家所依赖的东西都是他本身能力以外的,所以风险比较大,自然操作起来比较谨慎。一般情况下,上涨30%就算多了。
长线庄家往往看中的是股票的业绩。他们是以投资者的心态入市的。由于长线庄家资金实力大、底气足、操作时间长,在走势形态上才能够明确地看出吃货、洗盘、拉高、出货。所谓的“黑马”,一般都是从长庄股票中产生。长线庄的一个最重要的特点就是持仓量。由于持股时间非常长,预期涨幅非常大,所以要求庄家必须能买下所有的股票,其实庄家也非常愿意这样做。这样,股价从底部算起,有时涨了一倍了,可庄家还在吃货。出货的过程也同样漫长,而且到后期时不计价格的抛,这些大家都应注意。
还有一种提法叫“长庄”。即一个庄家在某个股票中总是不出来,来回打差价。
强庄:强庄的前提是持仓量大。持仓量越高,庄家拉高的成本就越低。所谓的强庄,并不是庄家一定就比别的庄强,而是某一段时间走势较强,或是该股预期升幅巨大。
弱庄:一般是资金实力较弱的庄家。由于大幅拉升顶不住抛盘,所以只能缓慢推升,靠洗盘、打差价来垫高股价。由于庄家持仓量低,靠打差价就能获得很大的收益,所以累计升幅并不大。
顺势庄即股价走势与大盘一致的,这是高水平的庄。
逆市庄从狭义上讲,就是大盘下跌时上涨的庄,从广义上讲,就是走势与大盘完全没有共性的庄,即人们常说的“庄股”。逆市庄由于白白放弃了一个重要的工具,所以做盘难度大,失败的较多。当然,有些庄家在建仓时逆市,在出货时顺势,那也是高水平的。
获利庄是正常的。
被套庄,当然好理解。不过被套也分两种:一种是股价低于庄家的建仓成本,且庄家已没有操纵股价的能力。这种庄家比散户被套要惨得多,因为没有新庄入场的话,就没有解套的可能。而割肉的话,又苦于没有接盘。另一类被套庄,是由于手法不对,或所炒股票明显超出合理价值,导致没有跟风盘,结果虽然股价高于成本,但却无法兑现。这类庄家由于具备控盘能力,所以通过制造题材,以及借助大盘,总会有出来的可能。大家看到的跳水股,往往属于这一类。
跟庄成功与否的关键
众所周知,一只股票的上涨不可能是无缘无故的,这其中主要的原因是有大资金在运作,换句话说,是有庄家在控制股价。而要想在一只股票中做庄,就离不开建仓、震仓拉升、平仓这三个阶段。如何准确地把握这三个阶段,是跟庄成功与否的关键。
建仓作为做庄三步曲中的第一步,手段多种多样,有按计划主动建仓的,有耐住性子慢慢吸筹的,有按约定倒仓接货的,有拉高快速主动建仓的……由于第一种建仓方式通常是大资金蓄谋已久、有备而来,因此,我们有必要来对其仔细探讨一下。
股谵云:“没有只涨不跌的股票,也没有只跌不涨的股票”。一只股票如果跌得久了,筹码往往就会很分散,表现在行情上,往往就是成交清淡,无人问津。而大资金在进场之前,显然得首先考虑其资金的安全性,介入的价位是否合适等等于是,在其真正建仓之前,一般要有一个试盘动作,在确认盘子很轻、场内没有其它庄家的情况下,往往还要借势打压股价,当股价跌无可跌,成交极其清淡的情况下,方才开始缓缓建仓。表现在K线图上,一般是阴阳相间,成交量温和放大,股价重心不断上移,但涨幅有限。——这便是“从缩量到放量”的过程。
经过一段时间(一般约在三个月以上)的建仓,庄家基本上吃够了一定筹码,而此时股价亦有了一定涨幅,成交也渐趋活跃起来。此时,为了阻止散户抢筹,也为了清除一部份已获利的筹码,该股往往在攻击形态极佳之时,突然掉头向下,一路震荡走低,股价连连击穿众多“支撑”。由于多数筹码在庄家手中,而散户又不可能齐心做多,于是,庄家仅需牺牲少量筹码,便可打压股价;因此,随着意志不坚定分子的不断出局,成交量日渐稀少,最后,在连续数日持续萎缩之后,股价渐渐止跌。——这便是“从放量至缩量”的过程。
主力建仓活动痕迹
主力建仓活动痕迹
1)从K线图看,当股价在低位进行震荡时,经常出现一些特殊的图形。典型的包括有:
A带长上、下影的小阳小阴线,并且当曰成交量主要集中在上影线区,而下影线中在在着较大的无量空体,许多上影线来自临收盘时的大幅无量打压;
B跳空高开后顺势打下,收出一支实体较大的阴线,同时成交量放大,但随后末继续放量,反而急速萎缩,股价重新陷入表面上的无序的运动状态;
C小幅跳空低开后借势上推,尾盘以光头阳线报收,甚至出现较大的涨幅,成交量明显地放大,但第二天又被很小的成交量打下来。
2)从K线组合来看,经常出现上涨时成交量显著放大,但涨幅不高的“滞涨”现象,但随后的下跌过程中成交量却以极快的速度萎缩。有时,则是上涨一小段后便不涨不跌,成交量虽然不如拉升时大,但始终维持在较活跃的水平,保持一到两个月后开始萎缩。由于主力比出的多,OBV线就会向上。尽管主力暂时末必有力量拉升,但是调控个股走势的能力还是有的。往往在收盘的时候打压力走向。
3)均线系统由杂乱无章,纠缠不清,渐向脉络清晰起伏有致。从技术上说,这是建仓成功与否的案例所表现出来的区别之处。其内在的机理是:在初期由于筹码分散,持仓的成本分布较宽,加上主力刻意打压,股价波动的规律性较差,反映到均线系统上,就是短、中、长均线不断地交叉起伏,随着主力手中持筹码的沉淀,市场上的浮动码减少了,当主力持筹到了一定的程度,往往会把股价的波动幅度减下来以拉平市场平均成本,减少其它的投资者来回搞腾短差。当均线之间的距离渐渐缩小甚至是重合时,就会开始试盘拉升或者是打压,由于主力对于股价有掌控力,尽管每曰盘中震荡不断,但是趋势已成,而反映趋势的均线系统自然是错落有致。
4)在建仓阶段,主力与散户实际上是处于博弈的两端,主力总是力图制造出假象迫使散户低价吐出筹码。正因为如此,在底部区域的顶端,主力往往发布种种利空,或者制造形态上的空头结构,意图使市场发生心理恐慌,主动促成股价下跌。这种下跌要与建仓失败的图区分出来,下跌的幅度深度就可以分辩出主力的目标。一般来说,如果主力在下跌途中坚定持筹,并且继续逢低吸纳,这种的股价是不会下跌回到前期成本密集区以下,而出货形态就没有这种情况。一只股票在建仓的阶段,这种情况可能会出现多次,但随着主力筹码的增加,震幅会减少,另外,当大盘急跌,那些震幅很小的个股,更加是主力持仓位的表现。(文章来源:股市马经) 如何在Python中用LSTM网络进行时间序列预测
时间序列模型
时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的,同样大小的值改变顺序后输入模型产生的结果是不同的。
举个栗子:根据过去两年某股票的每天的股价数据推测之后一周的股价变化;根据过去2年某店铺每周想消费人数预测下周来店消费的人数等等
RNN 和 LSTM 模型
时间序列模型最常用最强大的的工具就是递归神经网络(recurrent neural network, RNN)。相比与普通神经网络的各计算结果之间相互独立的特点,RNN的每一次隐含层的计算结果都与当前输入以及上一次的隐含层结果相关。通过这种方法,RNN的计算结果便具备了记忆之前几次结果的特点。
典型的RNN网路结构如下:
右侧为计算时便于理解记忆而产开的结构。简单说,x为输入层,o为输出层,s为隐含层,而t指第几次的计算;V,W,U为权重,其中计算第t次的隐含层状态时为St = f(U*Xt + W*St-1),实现当前输入结果与之前的计算挂钩的目的。对RNN想要更深入的了解可以戳这里。
RNN的局限:
由于RNN模型如果需要实现长期记忆的话需要将当前的隐含态的计算与前n次的计算挂钩,即St = f(U*Xt + W1*St-1 + W2*St-2 + ... + Wn*St-n),那样的话计算量会呈指数式增长,导致模型训练的时间大幅增加,因此RNN模型一般直接用来进行长期记忆计算。
LSTM模型
LSTM(Long Short-Term Memory)模型是一种RNN的变型,最早由Juergen Schmidhuber提出的。经典的LSTM模型结构如下:
LSTM的特点就是在RNN结构以外添加了各层的阀门节点。阀门有3类:遗忘阀门(forget gate),输入阀门(input gate)和输出阀门(output gate)。这些阀门可以打开或关闭,用于将判断模型网络的记忆态(之前网络的状态)在该层输出的结果是否达到阈值从而加入到当前该层的计算中。如图中所示,阀门节点利用sigmoid函数将网络的记忆态作为输入计算;如果输出结果达到阈值则将该阀门输出与当前层的的计算结果相乘作为下一层的输入(PS:这里的相乘是在指矩阵中的逐元素相乘);如果没有达到阈值则将该输出结果遗忘掉。每一层包括阀门节点的权重都会在每一次模型反向传播训练过程中更新。更具体的LSTM的判断计算过程如下图所示:
LSTM模型的记忆功能就是由这些阀门节点实现的。当阀门打开的时候,前面模型的训练结果就会关联到当前的模型计算,而当阀门关闭的时候之前的计算结果就不再影响当前的计算。因此,通过调节阀门的开关我们就可以实现早期序列对最终结果的影响。而当你不不希望之前结果对之后产生影响,比如自然语言处理中的开始分析新段落或新章节,那么把阀门关掉即可。(对LSTM想要更具体的了解可以戳这里)
下图具体演示了阀门是如何工作的:通过阀门控制使序列第1的输入的变量影响到了序列第4,6的的变量计算结果。
黑色实心圆代表对该节点的计算结果输出到下一层或下一次计算;空心圆则表示该节点的计算结果没有输入到网络或者没有从上一次收到信号。
Python中实现LSTM模型搭建
Python中有不少包可以直接调用来构建LSTM模型,比如pybrain, kears, tensorflow, cikit-neuralnetwork等(更多戳这里)。这里我们选用keras。(PS:如果操作系统用的linux或者mac,强推Tensorflow!!!)
因为LSTM神经网络模型的训练可以通过调整很多参数来优化,例如activation函数,LSTM层数,输入输出的变量维度等,调节过程相当复杂。这里只举一个最简单的应用例子来描述LSTM的搭建过程。
应用实例
基于某家店的某顾客的历史消费的时间推测该顾客前下次来店的时间。具体数据如下所示:
消费时间
2015-05-15 14:03:512015-05-15 15:32:462015-06-28 18:00:172015-07-16 21:27:182015-07-16 22:04:512015-09-08 14:59:56..
..
具体操作:
1. 原始数据转化
首先需要将时间点数据进行数值化。将具体时间转化为时间段用于表示该用户相邻两次消费的时间间隔,然后再导入模型进行训练是比较常用的手段。转化后的数据如下:
消费间隔04418054..
..
2.生成模型训练数据集(确定训练集的窗口长度)
这里的窗口指需要几次消费间隔用来预测下一次的消费间隔。这里我们先采用窗口长度为3, 即用t-2, t-1,t次的消费间隔进行模型训练,然后用t+1次间隔对结果进行验证。数据集格式如下:X为训练数据,Y为验证数据。
PS: 这里说确定也不太合适,因为窗口长度需要根据模型验证结果进行调整的。
X1 X2 X3 Y0 44 18 044 18 0 54..
..
注:直接这样预测一般精度会比较差,可以把预测值Y根据数值bin到几类,然后用转换成one-hot标签再来训练会比较好。比如如果把Y按数值范围分到五类(1:0-20,2:20-40,3:40-60,4:60-80,5:80-100)上式可化为:
X1 X2 X3 Y0 44 18 044 18 0 4...
Y转化成one-hot以后则是(关于one-hot编码可以参考这里)
1 0 0 0 00 0 0 0 1...
3. 网络模型结构的确定和调整
这里我们使用python的keras库。(用java的同学可以参考下deeplearning4j这个库)。网络的训练过程设计到许多参数的调整:比如
需要确定LSTM模块的激活函数(activation fucntion)(keras中默认的是tanh);
确定接收LSTM输出的完全连接人工神经网络(fully-connected artificial neural network)的激活函数(keras中默认为linear);
确定每一层网络节点的舍弃率(为了防止过度拟合(overfit)),这里我们默认值设定为0.2;
确定误差的计算方式,这里我们使用均方误差(mean squared error);
确定权重参数的迭代更新方式,这里我们采用RMSprop算法,通常用于RNN网络。
确定模型训练的epoch和batch size(关于模型的这两个参数具体解释戳这里)
一般来说LSTM模块的层数越多(一般不超过3层,再多训练的时候就比较难收敛),对高级别的时间表示的学习能力越强;同时,最后会加一层普通的神经网路层用于输出结果的降维。典型结构如下:
如果需要将多个序列进行同一个模型的训练,可以将序列分别输入到独立的LSTM模块然后输出结果合并后输入到普通层。结构如下:
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网络结构搭建
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 youll 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.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网络的结构搭建,至于如何把数据处理规范化成网络所需的结构以及把模型预测结果与实际值比较统计的可视化,就需要根据实际情况做调整了。
如何在python中用lstm网络进行时间序列预测
时间序列建模器 图表那个选项卡 左下勾选 拟合值 就可以了。我的为什么不出现预测值~~
- 上一篇:大牛股10分钟“天地板”!多只股票剧烈波动
- 下一篇:财神股票下载,炒股拜哪个财神