首页 热点新闻关注正文

优德88手机中文版客服_w88俱乐部_w88优德亚洲官网

admin 热点新闻关注 2019-05-03 305 0

作者 | Boris B

译者 | Major

修正 | Jane

【导语】用深度学习猜测股票价格不是一个新论题,跟着技能的不断开展,咱们一直在不断测验新技能。这次教程中,作者规划了一个强强联合型模型来猜测股票价格,为什么这么描述?作者规划了一个 GAN 模型,其生成网络为 LSTM 模型用来猜测时刻序列数据、CNN 模型作判别网络,用 BERT 模型作为心情剖析模型。带有高斯进程的贝叶斯优化和深度强化学习办法来取得 GAN 的超参数。为什么创立这样的组合?AI科技大本营都将鄙人面的内容中为咱们进行逐个回答。

这篇教程的篇幅很长,为了让咱们能对重要技能内容一望而知,作者在开端参加了层级明晰的目录,首要从【布景】、【数据特征】、【GAN 模型架构】、【超参数优化】等几大方面进行全面解说。

下面营长对其间触及的技能细节进行了编译:

布景

在今日的使命中,猜测的是高盛公司(本文中会简称为 GS)的股票改动趋势,运用 2010 年 1 月 1 日至 2018 年 12 月 31 日的日收盘价作为练习(七年)和测验(两年)数据。

成功练习一个 GAN 最扎手的部分是取得正确的超参数。为此,作者运用 Bayesian optimisation(带有高斯进程的贝叶斯优化)和用于决议何时以及怎么改动 GAN 的超参数的深层强化学习(DRL),在创立强化学习进程中,将运用一些最新技能,如 RAINBOW 和 PPO。

此外,在模型中还运用许多不同类型的输入数据。跟着股票的前史买卖数据和技能目标,规划了一些技能办法,如运用 NLP 中的 BERT 来创立心情剖析模型(作为基本面剖析的来历),以及用傅立叶改换(Fourier transforms)提取全体趋势方向、辨认其他高档特征的栈式主动编码器( Stacked autoencoder);选用特征出资组合寻觅相关财物;选用 ARIMA 办法进行股票函数近似。实践上,这些技能都是为了尽或许多的获取关于股票的信息、形式、依靠联络等等。

开发环境和结构挑选 MXNet 和其高档 API(Gluon)创立一切的神经网络,并在多个 GPU 上进行练习。

图:完好体系结构概览

经过上面的技能布景介绍,信任咱们现已感觉到想准确猜测股市是一项十分杂乱的使命,影响股票改动的事情、条件或要素等实在是太多了。所以,想更好的了解这些先决条件,还需求先做几个重要的假定:(1)商场不是 100% 的随机;(2)前史重复;(3)商场遵从人们的理性行为;(4)商场是“完美的”。

数据

首要,要了解什么要素会影响 GS 的股票价格动摇,需求包括尽或许多的信息(从不同的方面和视点)。将运用 1585 天的日数据来练习各种算法(70% 的数据),并猜测别的 680 天的成果(测验数据)。然后,将猜测成果与测验数据进行比较。每种类型的数据(亦称为特征)将在后边的部分中具体解说。

简而言之,将运用的特征有:

a.相关财物:触及产品、外汇、指数、固定收益证券等各类财物数据;影响高盛公司股票价格趋势的外部要素又有许多,而且很杂乱,包括竞争对手、客户、全球经济、地缘政治形势、财政和钱银政策等等,这些要素还会彼此产生影响。挑选适宜的相关财物是十分重要的:

(1)首要是和 GS 类似的公司,如将摩根大通(JPMorgan Chase)和摩根士丹利(Morgan Stanley)等参加数据集。

(2)作为一家出资银行,高盛依靠于全球经济,需求重视全球经济指数和 libor 利率。

(3)每日动摇指数(VIX)。

(4)归纳指数,如 NASDAQ 和 NYSE(美国)、FTSE 100(英国)、日经指数 225(日本)、恒生指数和 BSE Sensex(APAC)指数。

(5)钱银,全球买卖屡次反映在钱银活动中,运用一篮子钱银(如美元-日元、英镑-美元等)作为特征。

总的来说,在数据会集还有 72 个其他财物(每个财物的每日价格)。

b.技能目标:许多出资人都会重视技能目标,在这儿,把最受欢迎的目标作为独立特征,包括 7 天和 21 天动摇均匀值、指数动摇均匀、Momentum、MACD 等 12项技能目标。

# Create Bollinger Bandsdataset['20sd'] = pd.stats.moments.rolling_std(dataset['price'],20)dataset['upper_band'] = dataset['ma21'] + (dataset['20sd']*2)dataset['lower_band'] = dataset['ma21'] - (dataset['20sd']*2)# Create Exponential moving averagedataset['ema'] = dataset['price'].ewm(com=0.5).mean()# Create Momentumdataset['momentum'] = dataset['price']-1returndatasetdataset_TI_df = get_technical_indicators(dataset_ex_df[['GS']])dataset_TI_df.head()

c.基本面剖析:不管股票涨跌,这都是一个十分重要的数据。剖析时会用到两个特征:公司业绩陈述和新闻将引导的一些趋势,因而经过剖析新闻来准确猜测商场的心情也是一项十分重要的作业,所以这次的办法中,将运用 BERT 来构建心情剖析模型,提取股票新闻中的心情倾向。终究选用 sigmoid 归一化,成果介于 0 到 1 之间,(0 标明负面心情,1 标明正面心情),每一天都会创立一个均匀每日分数作为一个特征增加。

运用的是 MXNet 中 Gluon NLP 库中所供给的经过预练习的 BERT 模型,咱们能够测验一下。此前咱们也为咱们介绍过简略易上手的 Gluon,概况可参阅营长亲身上手的教程。

d.傅里叶改换:运用每日收盘价,创立傅立叶改换,以取得几个长时刻和短期趋势。运用这些改换消除许多的噪声,取得实在股票动摇的近似值。有了趋势近似,能够协助 LSTM 网络更准确地挑选其猜测趋势。

图:高盛股票的傅里叶改换

e.ARIMA:这是猜测时刻序列数据未来值的最盛行技能之一。

X = series.valuessize = int(len(X) * 0.66)train, test = X[0:size], X[size:len(X)]history = [x forx intrain]predictions = list()fort inrange(len(test)):model = ARIMA(history, order=(5,1,0))model_fit = model.fit(disp=0)output = model_fit.forecast()yhat = output[0]predictions.append(yhat)obs = test[t]history.append(obs)error = mean_squared_error(test, predictions)print('Test MSE: %.3f'% error)Test MSE: 10.151# Plot the predicted (from ARIMA) and real pricesplt.figure(figsize=(12, 6), dpi=100)plt.plot(test, label='Real')plt.plot(predictions, color='red', label='Predicted')plt.xlabel('Days')plt.ylabel('USD')plt.title('Figure 5: ARIMA model on GS stock')plt.legend()plt.show

f.Stacked autoencoders (栈式主动编码器):上面说到的一些特征是研讨人员经过几十年的研讨发现的,可是仍是会忽视一些躲藏的相关特征,由此,Stacked autoencoders  就能够处理这个问题,经过学习每个躲藏层,发现更多新特征(或许有些是咱们无法发现,了解的)。这次没有把 RELU 作为激活函数,而是运用了 GELU,也能够用于 BERT 模型中。至于为什么挑选 GELU,咱们能够在原文中看到作者给出的和 RELU 比照的实例。

g.深度无监督学习:用于期权定价中的反常检测,将再运用一个特征:每天都会增加高盛股票90天看涨期权的价格。期权定价自身结合了许多数据。期权合约的价格取决于股票的未来价值(剖析师也企图猜测价格,以便为看涨期权得出最准确的价格)。运用深度无监督学习(自组织映射),测验发现呈现反常的每日价格。反常(如价格的剧烈改动)或许标明呈现了一个事情,这有助于LSTM了解全体股票形式。

importtimeimportnumpy asnp

frommxnet importnd, autograd, gluonfrommxnet.gluon importnn, rnnimportmxnet asmximportdatetimeimportseaborn assns

importmatplotlib.pyplot asplt%matplotlib inlinefromsklearn.decomposition importPCA

importmath

fromsklearn.preprocessing importMinMaxScalerfromsklearn.metrics importmean_squared_errorfromsklearn.preprocessing importStandardScaler

importxgboost asxgbfromsklearn.metrics importaccuracy_scoreimportwarningswarnings.filterwarnings("ignore")context = mx.cpu(); model_ctx=mx.cpu()mx.random.seed(1719)

Note: The purpose of this section (3.The Data) isto show the data preprocessing andto give rationale forusing different sources of data, hence I will only use a subset of the full data (that isused fortraining).

defparser(x):returndatetime.datetime.strptime(x,'%Y-%m-%d')dataset_ex_df = pd.read_csv('data/panel_data_close.csv', header=0, parse_dates=[0], date_parser=parser)dataset_ex_df[['Date', 'GS']].

接下来,有了这么多特征,还需求履行几个重要进程:

h.对数据的“质量”进行核算查看:保证数据质量对模型来说十分重要,因而要履行以下几个简略的查验,如异方差、多重共线性、Serial correlation 等。

i.确认特征重要性:选用 XGBoost 算法。这么多的特征,有必要考虑是否一切这些都实在地指示了 GS 股票动摇方向。例如,数据会集包括其改动或许意味着经济改动的 LIBOR,而这又或许暗示 GS 股票将会发作动摇,因而需求对此猜测进行测验,在很多的测验办法中,本教程中挑选了 XGBoost,其在分类和回归问题上都供给了很好的成果。

y_train= y.iloc[:train_samples]y_test= y.iloc[train_samples:]return(X_train, y_train), (X_test, y_test)# Get training and test data(X_train_FI,y_train_FI), (X_test_FI, y_test_FI) = get_feature_importance_data(dataset_TI_df)regressor= xgb.XGBRegressor(gamma=0.0,n_estimators=150,base_score=0.7,colsample_bytree=1,learning_rate=0.05)xgbModel= regressor.fit(X_train_FI,y_train_FI, eval_set = [(X_train_FI, y_train_FI), (X_test_FI, y_test_FI)], verbose=False)eval_result= regressor.evals_result()training_rounds =range(len(eval_result['validation_0']['rmse']))

终究一步,运用主成分剖析(PCA)创立特征组合,以削减主动编码器生成特征的维数。在主动编码器中创立了 112 个特征,不过高维特征对咱们的价值更大,所以在这 112 个特征的根底上经过 PCA 创立高维的特征组合,削减数据维度。不过,这也是咱们提出的实验性办法。

ranges_ = (-10, 3, .25)

plt.subplot(1, 2, 1)plt.plot([i fori innp.arange(*ranges_)], [relu(i) fori innp.arange(*ranges_)], label='ReLU', marker='.')plt.plot([i fori innp.arange(*ranges_)], [gelu(i) fori innp.arange(*ranges_)], label='GELU')plt.hlines(0, -10, 3, colors='gray', linestyles='--', label='0')plt.title('Figure 7: GELU as an activation function for autoencoders')plt.ylabel('f(x) for GELU and ReLU')plt.xlabel('x')plt.legend()

plt.subplot(1, 2, 2)plt.plot([i fori innp.arange(*ranges_)], [lrelu(i) fori innp.arange(*ranges_)], label='Leaky ReLU')plt.hlines(0, -10, 3, colors='gray', linestyles='--', label='0')plt.ylabel('f(x) for Leaky ReLU')plt.xlabel('x')plt.title('Figure 8: LeakyReLU')plt.legend()

plt.sho

让咱们看一下曩昔 9 年的股价改动。虚线标明练习数据和测验数据之间的分割线。

图:曩昔9年高盛股价的动摇

生成对抗性网络(GAN)

图:GAN 架构

1、为什么选用GAN进行股市猜测?

GAN 最多被运用在发明传神的图画、画作和视频剪辑等。对猜测时刻序列数据的运用并不多。但这两者的思维都是类似的。咱们期望猜测未来的股票价格,GS 的股票动摇和行为应该大致相同(除非开端以彻底不同的办法运作,或许经济急剧改动)。因而,期望“生成”的数据与现已具有的前史买卖数据散布类似,当然不是彻底相同。在这个比如中将运用 LSTM 作为时刻序列生成模型,CNN 作为判别模型。

2、Metropolis-Hastings GAN 和 Wasserstein GAN

(1)Metropolis-Hastings GAN:与传统的 GAN 比较,Uber 团队最近提出一种新改善的 GAN 模型——Metropolis-Hastings GAN (MHGAN),它有点类似于谷歌和加州大学伯克利分校提出的Discriminator Rejection Sampling。通常情况下,在练习完GAN之后就不再运用 D 了。可是,MHGAN 和 DRS 企图运用 D 来挑选由 G 生成的挨近实在的样本。

(2)Wasserstein GAN:练习 GAN 是适当困难的。模型或许永久不会收敛,形式溃散也很容易发作。,经过 Wasserstein GAN 测验处理这个问题。KL 间隔和 JS 间隔是两种常用的散布,而 WGAN 运用的是 Wasserstein distanc。

3、生成模型:单层RNN

(1)LSTM 仍是 GRU?

关于 RNN、LSTM 等模型的根底介绍这儿不多做赘述,首要聚集在 RNN 在时刻序列数据上的运用,由于它们能够盯梢一切曾经的数据点,而且能够捕获经过时刻开展的形式。能够经过裁剪解 RNN 梯度消失或梯度爆破问题。

在精度方面,LSTM 和 GRU 的成果相差不多,可是 GRU 运用的练习参数要比 LSTM 少,核算强度也要小。

(2)LSTM 体系结构

LSTM架构十分简略:一个LSTM层,包括112个输入单元(数据会集有112个特征)和500个躲藏单元;一个以每日股价为输出的 Dense 层;选用 Xavier 初始化,运用 L1 丢失函数

鄙人面的代码中,选用adam作为优化器,学习率为 0.01。

classRNNModel(gluon.Block):def__init__(self, num_embed, num_hidden, num_layers, bidirectional=False, sequence_length=sequence_length, **kwargs):super(RNNModel, self).__init__(**kwargs)self.num_hidden = num_hiddenwith self.name_scope():self.rnn = rnn.LSTM(num_hidden, num_layers, input_size=num_embed, bidirectional=bidirectional, layout='TNC')self.decoder = nn.Dense(1, in_units=num_hidden)defforward(self, inputs, hidden):output, hidden = self.rnn(inputs, hidden)decoded = self.decoder(output.reshape((-1, self.num_hidden)))returndecoded, hiddendefbegin_state(self, *args, **kwargs):returnself.rnn.begin_state(*args, **kwargs)lstm_model = RNNModel(num_embed=gan_num_features, num_hidden=500, num_layers=1)lstm_model.collect_params().initialize(mx.init.Xavier(), ctx=mx.cpu())trainer = gluon.Trainer(lstm_model.collect_params(), 'adam', {'learning_rate': .01})loss = glu

(3)学习率调度器

学习率是十分重要的参数之一,每个优化器设置学习率,如 SGD、Adam 或 RMSProp 在练习神经网络时至关重要,由于它既操控着网络的收敛速度,又操控着网络的终究功能,接下来就要确认每个阶段的学习率。

classCyclicalSchedule():def__init__(self, schedule_class, cycle_length, cycle_length_decay=1, cycle_magnitude_decay=1, **kwargs):self.schedule_class = schedule_classself.length = cycle_lengthself.length_decay = cycle_length_decayself.magnitude_decay = cycle_magnitude_decayself.kwargs = kwargsdef__call__(self, iteration):cycle_idx = 0cycle_length = self.lengthidx = self.lengthwhileidx <= iteration:cycle_length = math.ceil(cycle_length * self.length_decay)cycle_idx += 1idx += cycle_lengthcycle_offset = iteration - idx + cycle_lengthschedule = self.schedule_class(cycle_length=cycle_length,**self.kwargs)returnschedule(cycle_offset) *self.magnitude_decay**cycle_idx

(4)避免过拟合与差错-方差权衡

避免过拟合,留意总丢失也是要在练习模型中十分重要的一个问题。不只在生成器中的 LSTM 模型,判别器中的 CNN 模型、主动编码器中都运用了几种避免过拟合的技能:

a.保证数据质量

b.正则化,或权重赏罚:最常用的两种正则化技能是L1 和 L2 正则法。L1对离散值更有鲁棒性,当数据稀少时运用,可得到特征重要性。因而,在股票价格猜测这个运用事例中将运用 L1 正则法。

c.Dropout。Dropout层随机删去躲藏层中的节点。

d.Dense-sparse-dense training

e.提早中止.

(5)权衡差错-方差

树立杂乱神经网络时,另一个重要的考虑要素是差错-方差权衡。练习网络的差错基本上是差错、方差和不行约差错 σ(噪声和随机性引起的差错)的函数。

最简略的权衡公式是:差错=差错^2+方差+σ.

a.差错(Bias):差错衡量一个经过练习的(练习数据集)算法对未见数据的归纳才干。高差错(欠拟合)意味着模型在躲藏数据上不能很好地作业。

b.方差(Variance):方差衡量模型对数据集改动的敏感性。高方差意味着过拟合。

4、 一维 CNN 判别模型

(1)为何选用CNN作为判别模型?

CNN 网络在提取躲藏特征等作业上具有优势,那怎么运用于这个使命中?咱们无妨测验一下,数据点行程小趋势,小趋势行程大趋势,趋势反之构成形式,而 CNN 在此用检测特征的才干来提取 GS 股价趋势中的形式信息。

图:本文提出的 CNN 模型的体系结构。

超参数优化

(1)盯梢和优化的超参数是:

batch_size:LSTM 和 CNN 的 Batch 巨细

cnn_lr:CNN 的学习率

strides:CNN 的跨步卷积数

lrelu_alpha:GAN 中 LeakyReLU 的 Alpha 值

batchnorm_momentum:CNN Batch 正则化的 momentum

padding:CNN 中的 Padding

kernel_size:1 CNN 的内核巨细

dropout:LSTM 中的 Dropout 层

filters:过滤器的初始数目

epoch = 200

(2)超参数优化

经过 200 次 GAN 练习后,将记载 MAE(LSTM、GG 中的差错函数)并作为奖赏值传递给强化学习(RL)模型,以决议是否用同一组超参数来改动坚持练习的超参数,假如RL决议更新超参数,它将调用 Bayes 优化库。

(3)超参数优化中的强化学习

为什么在超参数优化中运用强化学习?股票商场一直在改动。即便能够练习 GAN 和 LSTM 来发明十分准确的成果,成果也只能在必定的时刻内有效。也便是说,咱们需求不断优化整个进程。为了优化这一进程,能够增加或删去特征,或改善深度学习模型。改善模型的最重要的办法之一便是经过超参数。一旦找到了一组特定的超参数,就需求决议何时修正它们,以及何时运用现已知道的调集(探究或运用)。此外,股票商场代表了一个依靠于数百万参数的接连空间。

(4)强化学习理论

运用无模型的 RL 算法,原因很明显,咱们不知道整个环境,因而没有关于环境怎么作业的界说模型(假如存在,就不需求猜测股票价格的改动)。运用两个细分的无模型RL:战略优化(Policy Optimization)和 Q-Learning。构建 RL 算法的一个要害方面是准确设置奖赏。它有必要捕捉环境的一切方面以及署理与环境的交互。

a.Q-Learning:一种根据Q-Learning的非战略深度强化学习算法,它将7种算法结合在一起:DQN、Double Q Learning(双QL)、Prioritized replay、决战网络(Dueling networks)、多步学习、散布式RL、噪声网络(Noisy Nets)。在Q-Learning中,学习价值从某一状况采纳举动。Q 值采纳举动后的预期报答。

b.战略优化:这儿选用近端战略优化(Proximal Policy Optimization, PPO),在决议计划优化中,学习从某一状况采纳的举动。(假如运用比如Actor/Critic之类的办法,也会了解处于给定状况的价值。

(5)贝叶斯优化

运用贝叶斯优化,不选用网格查找,由于或许需求很长时刻才干找到超参数的最佳组合。

图:贝叶斯超参数优化的高斯进程

5、成果

终究,运用测验数据作为不同阶段的输入,LSTM 的输出与实践股价进行比较:

(1)制作第一次练习之后的成果

(2)制作 50 次练习后的成果。

(3)制作 200 次练习后的成果。

RL 运行了 10 eposide ,本文界说一个 eposide 是 GAN 完好练习 200 次后,下图是得到的终究的成果。

总结

可见,作者在把各路强模型联合打造的成果仍是十分优异的。不过作者还测验创立一个 RL 环境,用于测验决议何时以及怎么进行买卖的买卖算法。GAN 的输出将是此环境中的一个参数,尽管这些都不能彻底做到猜测的效果,可是在实践使命中不断测验新技能仍是很有含义的,等待作者后续作业能够带来更好的成果。完好具体教程还能够拜访 Github 项目:

https://github.com/borisbanushev/stockpredictionai

(本文为AI科技大本营编译文章,转载请微信联络1092722531)

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间服务。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

周黑鸭加盟费多少,阎庆民:加大发行、买卖、退市、信息发表等制度改革力度-优德88登录网址

  • 格林童话读后感,东宏股份(603856.SH):华晨生长拟清仓减持不超1.44%的股份-优德88登录网址

    格林童话读后感,东宏股份(603856.SH):华晨生长拟清仓减持不超1.44%的股份-优德88登录网址

  • 优德88官网网站_优德88中文客户端_w优德88官网登录

    优德88官网网站_优德88中文客户端_w优德88官网登录

  • 优德88娱乐官方网站_优德88备用网址_w88优德体育平台

    优德88娱乐官方网站_优德88备用网址_w88优德体育平台

  • 最近发表

      优德88登录网址_优德88官网网站_优德88手机登录

      http://www.blockdog.net/

      |

      Powered By

      使用手机软件扫描微信二维码

      关注我们可获取更多热点资讯

      w88出品