姓名:王正帅
学号:14020120007
转载自:mp.weixin.qq.com/s ,有删节
【嵌牛导读】:截至 11 月 22 日,比特币的价格再创历史新高(约 1 比特币兑 8120 美元),在惊讶于虚拟货币「不可战胜」的同时,我们或许能可以从这一波热潮中学到些什么。本文中,博士毕业于伦敦大学学院(UCL)的 David Sheehan 为我们介绍了使用 Keras 基于 LSTM 预测比特币价格走势的详细方法。在测试中,这个机器学习预测法似乎有着不错的准确度。
【嵌牛鼻子】:比特币、虚拟货币、Keras、比特币价格走势
【嵌牛提问】:比特币有何神奇之处?如何用机器学习预测比特币价格走势?
【嵌牛正文】:
如果要列出 2017 年最为荒谬的三样事物,则一定是指尖陀螺、人工智能,当然,还有加密虚拟货币(cryptocurrency)。以上是玩笑话,实际上我对虚拟货币的原理印象深刻,而且非常看好这种颠覆性技术的长期前景。我试图通过深度学习、机器学习或者说人工智能(是的,所有这三个!)成功预测虚拟货币的价格。
我认为把深度学习和虚拟货币结合起来是非常独特的想法,但是在写本文时,我发现了一些类似的内容(http://www.jakob-aungiers.com/articles/a/Multidimensional-LSTM-Networks-to-Predict-Bitcoin-Price)。这篇文章只关注比特币(最有名的虚拟货币),但是我还想讨论一下以太币。
我们打算使用 LSTM 模型,一种非常适合时序数据的深度学习模型。
数据
在构建模型之前,我们需要先获取一些数据。Kaggle 上的数据集(https://www.kaggle.com/mczielinski/bitcoin-historical-data)非常详细地记录了近几年的比特币价格。在这个时间长度(数年)中,噪声可能盖住了信号,因此我们需要选择单日价格数据。问题在于我们可能没有充足的数据(我们需要数百行而不是数千行、数百万行)。在深度学习中,没有模型可以克服数据严重缺乏的问题。我同样不想使用静态文件,因为未来使用新数据更新模型时,这种做法会复杂化更新流程。于是,我们计划从网站和 API 中抓取数据。
我们将在一个模型中使用多种虚拟货币,因此从同一个数据源抓取数据或许是一个不错的主意。我们将使用 coinmarketcap.com。现在,我们只需要考虑比特币和以太币,但是使用这种方法添加最新火起来的山寨币(altcoin)就很难了。在输入数据之前,我们必须加载一些 Python 包,这样会容易一些。
为了证明数据是准确的,我们将两种虚拟币的价格和成交量按时间作图:
训练、测试和随机游走
有了数据,接下来就该建立模型了。深度学习中,通常把数据分为训练集和测试集。模型建立在训练集上,随后用未见过的测试集评估。在时间序列模型中,我们通常使用一段时期的数据训练,然后用另一段时期的数据进行测试。我把时间界限定为 2017 年 6 月 1 日(即模型将使用该日期之前的数据进行训练,用该日期之后的数据进行测试)。
结果很不错!除了一些缺陷,该模型基本上追踪到了两种货币的实际收盘价。它甚至捕捉到了六月中旬和八月下旬的以太币价格上升(和随后的下跌)。正如在其他博客中提到的,由于误差无法传递到随后的预测中,单点预测的模型通常是有误导性的。由于将真实价格馈送到模型中,无论误差有多大,都会在下一个时间点被重新设置。比特币随机游走其实特别具欺骗性,因为 y 轴的分布范围很宽,才使得预测线看起来很平滑。
长短期记忆(LSTM)
如果读者对 LSTM 的理论比较感兴趣,可以查看上文机器之心发过的教程与解释。在本文中,我们并不需要从头构建一个 LSTM 网络,我们甚至都不需要理解它就能通过如 Keras 或 PyTorch 那样的深度学习框架完成实现。本文选择的是 Keras 框架,因为它只需要很少的理论知识,并且是目前最直观的深度学习框架。
只是为了打败随机游走模型的话也太 low 了。对比 LSTM 模型和更合适的时序模型(加权平均值,ARIMA 或 Facebook 的 Prophet)岂不是更加有趣!另外,我确定很难再提升我们的 LSTM 模型了(添加更多层和/或神经元,改变批量大小、学习率等)。可能虚拟货币价格变化没有规律吧,可能没有一个模型可以把信号和噪声分离开(类似于使用深度学习预测地震的优点)。以后的文章中可能会讨论这些话题。
我确定他们最终最终会找到深度学习的使用案例的。同时,你可以下载完整的 Python 代码构建自己的模型。