专栏名称: 炼数成金前沿推荐
关注炼数成金,学习数据挖掘与分析技巧,了解最新快的数据分析课程信息。更多知识更多优惠,尽在炼数成金!招募天下好汉,一起炼数成金!
目录
相关文章推荐
中国舞台美术学会  ·  首期舞台化妆造型高级人才研修班即将在中国国家 ... ·  3 天前  
中国舞台美术学会  ·  关注丨北京市文化和旅游工作会:聚焦高质量发展 ... ·  3 天前  
中国舞台美术学会  ·  关注丨2025年沉浸式文旅核心趋势与实施路径解码 ·  4 天前  
中国舞台美术学会  ·  观察丨经典,在首都舞台焕新重塑 ·  2 天前  
中国舞台美术学会  ·  中国舞台美术学会第九届(第十七次)理事代表大 ... ·  4 天前  
51好读  ›  专栏  ›  炼数成金前沿推荐

如何一夜暴富?这里有一份比特币价格预测指南

炼数成金前沿推荐  · 公众号  ·  · 2018-01-19 16:24

正文

近年来,以比特币为代表的加密数字货币一直是社交媒体和搜索引擎上的热门。但是,比特币价格浮动也使各位看官们经历了过山车般的体验。


随着本周各大权威机构纷纷表示看好区块链的未来,从1月17日到18日凌晨,比特币成功止住前一日暴跌的颓势,涨幅接近20%(18.46%)。


如果我们能够智能化的制定投资策略的话,就能发现这些反复无常的波动背后潜藏着巨大的利润。


与传统金融工具相比,加密货币由于缺乏指标数据,预测变得非常困难。 本文以当下最火的比特币为例,来探讨如何用深度学习预测加密数字货币的价格,并了解它们未来的发展趋势。


免责声明:比特币等数字货币的交易属于投资行为。交易有风险,买币须谨慎。由此带来的收益和亏损,和营长无关。若要打赏,猛戳“转发”与“点赞”即可。


第一步

要运行本文中的代码,请确保已经安装了以下环境和代码库:

Python 2.7

Tensorflow=1.2.0

Keras=2.1.1

Pandas=0.20.3

Numpy=1.13.3

h5py=2.7.0

sklearn=0.19.1


数据采集

用于分析预测的数据可以从Kaggle或者Poloniex上收集到。 为确保在不同数据集之间代码适用的一致性,从Poloniex上收集数据的列名都会更改为与Kaggle相匹配的列名。



数据准备

从数据源收集而来的数据需要先被解析一下才能送到模型中进行预测。下面代码中,PastSampler类是参考这个博客上的方法将数据分成一列子数据集和相应的标签数据集。模型输入数据大小(N)为256个,输出大小(K)为16个。


值得注意的是,从Poloniex收集来的数据是以5分钟为基础间隔时序数据。 这表明输入模型的数据跨度为1280分钟,而输出的数据跨度超过了80分钟。



在创建完PastSampler类之后,我将利用此类来收集数据。 由于原始数据的取值范围从0到10000以上,因此需要对数据进行缩放操作来使神经网络更容易理解数据。



模型构建

CNN

一维卷积神经网络可以通过核窗口在输入数据上滑动的情况下很好地捕捉数据的局部特征。 如下图所示。


CNN 图例 来自 http://cs231n.github.io/convolutional-networks/



上述代码是我建立的第一个卷积神经网络模型。 以下代码将我的GPU编号为“1”(这是因为我有4个GPU,您可以将其设置为您任何一个GPU)。 由于Tensorflow在多GPU上运行似乎不尽人意,因此把它限制在一个GPU上运行很合适的。 如果您没有GPU也请不要担心,尽管忽略下面的代码就好。



构建CNN模型的代码是非常简单的。加入dropout层是为了避免过拟合问题。 损失函数的定义为均方误差(MSE),而优化器选用较先进的Adam自适应优化。



需要担心的是每层之间的输入数据和输出数据的维度。 计算某个卷积层输出数据维度的公式是:


输出时间步长=(输入时间步长 - 核窗口大小)/步幅+ 1


在下面代码的末尾,我添加了两个回调函数CSVLogger和ModelCheckpoint。 前者可以帮助我跟踪所有的训练和验证过程,而后者则可以存储每个周期的模型权重参数。



LSTM

长期短期记忆(LSTM)网络是递归神经网络(RNN)的一种变体,发明它的目的是为了解决在普通RNN中存在的梯度消失问题。 据称LSTM能够记住更长的时序输入步长。


LSTM 图例 (来自 http://colah.github.io/posts/2015-08-Understanding-LSTMs/>)

LSTM比CNN更容易通过代码实现,这是因为你根本不需要关心核窗口的大小,步长,输入和输出的数据维度大小之间的关系等。 只需要确保输入网络数据和输出网络的数据维度就可以了。


GRU

门控循环单元(GRU)是RNN的另一种变体。 它的网络结构不如LSTM那么复杂,只有一个复位门和忘记门,而不是记忆单元。 据称GRU的性能与LSTM是相当的,但效率可以更高。 (在本文中也是如此的,因为LSTM大约需要跑45秒/周期,而GRU则不到40秒/周期)


来自http://www.jackdermody.net/brightwire/article/GRU_Recurrent_Neural_Networks)



只需将LSTM模型中的第二行



替换为


绘图结果

由于三个模型的计算结果图像很相似,所以我只会查看CNN模型的图像。 首先,我们需要重建模型并将训练权重加载到模型中。



然后,我们需要对预测后的数据进行反向缩放,因为之前使用了MinMaxScaler,因此此时预测的数据范围是在[0,1]。



如上所示的两个Dataframes分别构造了真实值(实际价格)以及比特币的预测价格。 为了更好的可视化,绘制的图像只显示了2017年8月之后的数据。



我们使用pyplot绘制图形。 由于预测出的价格是以16分钟为间隔的,所以为了让我们更方便的查看结果,我就不把它们全部链接起来了。 结果,这里预测的数据被绘制成红点,如第三行中的“ro”所示。


下图中的蓝线表示真实值(实际价格数据),而红点表示预测的比特币价格。




使用2层CNN模型预测的较佳比特币价格

从上图可以看出,预测价格与比特币的实际价格是非常相似的。 为了得到较佳模型效果,我决定测试集中配置下的神经网络,如下表所示。



不同模型下的预测结果

上表中的每一行都是从100个训练周期中得到的较佳验证损失的模型。 从以上结果可以看出,LeakyReLU似乎总是比通常的ReLU产生更好的损失效果。 但是,使用Leaky ReLU作为激活函数的4层CNN模型会得到较大的验证损失值,这可能是由于重新验证的模型所导致的问题。 CNN模型可以训练得非常快(使用GPU时,2秒/周期),在性能上要比LSTM和GRU稍差一点。 虽然3层CNN似乎可以更好地捕捉数据的局部时间依赖性,但较好的模型似乎是用 tanh和Leaky ReLU作为激活函数的LSTM模型。


用Tanh和Leaky ReLu作为激活函数的LSTM模型


用Leaky ReLu作为激活函数的3层CNN模型







请到「今天看啥」查看全文