中国10年前比特币怎么入手,比特币人工计算

  

  通过实际操作,作者利用递归神经网络对比特币和以太坊的价格进行了预测。   

  

  2017年是人工智能和加密货币的重要一年。我们目睹了许多新的研究进展和突破。毫无疑问,人工智能是当今乃至未来很长一段时间内最显著的技术之一。然而,加密货币在这一年的受欢迎程度出乎意料。这是一个加密货币的大牛市,加密货币(如比特币、以太坊、莱特币、Ripple等)的投资回报率。)都快疯了。   

  

  我从2017年初就开始深入研究机器学习的相关技术。和其他机器学习专家和爱好者一样,我认为将这些技术应用到加密货币市场是非常有吸引力的。通过各种方法将机器学习和深度学习的模型应用于股票市场或加密货币市场的研究,是一件非常有趣的事情。   

  

  我认为建立单点预测模型来探索深度学习在时间序列数据(例如股票价格数据)中的应用是一个很好的方法。当然,这只是开始,还有很大的提升空间。我目前正在尝试使用深度强化学习来进行程序化交易。然而,学会使用LSTM长短期记忆和建立一个好的预测模型是第一步。   

  

  

先决条件和开发环境

  

  

  在开始下面的内容之前,你可能需要掌握Python的基本编程技巧,机器学习的基础知识,尤其是深度学习的相关知识。如果你还没有这方面的知识,建议先浏览一下这篇文章。   

  

  我选择的开发环境是Google的Colab。因为它的环境操作简单,而且有免费的GPU资源,所以对训练时间很有帮助。这里有一个   

  

  如何在Google云盘中设置和使用Colab的教程。你也可以在GitHub上找到我自己关于Colab的笔记。   

  

  如果您希望使用AWS环境,我还写了一篇教程,介绍如何在GPU上使用Docker设置AWS实例。这是教程的链接。   

  

  

什么是循环神经网络(RNN)?

  

  

  要解释递归神经网络,我们先来看一个简单的例子,这是一个只有一个隐层的感知器网络。这样的网络可以胜任简单的分类问题。通过添加更多的隐藏层,网络将能够推断出更复杂的数据模式,并提高预测的准确性。然而,这种类型的网络只能很好地分类与时间无关的数据。比如训练中前一个样本的图像分类,不会影响下一个样本的分析。换句话说,感知机没有记忆。为图像识别而设计的卷积神经网络也是如此。   

  

     

  

  一个简单的具有一个隐层和两个输出的感知器神经网络   

  

  递归神经网络用于解决与数据和时间序列相关的问题。它将前一个隐藏状态的输出循环输入到感知器中,并作为当前输入进入网络进行处理。   

  

  具体来说,每次使用新样本作为网络的输入时,网络都没有能力记忆上一步处理的数据。要解决时间序列数据的处理问题,一种方法是将上一步和当前步的输入样本输入到网络中,这样我们的网络就可以知道之前发生了什么。但是,这种方法还是无法知道之前发生的一切。这样我们就想到了一个比较好的方法,就是把隐层结果(隐层的权重矩阵)作为当前的输入样本反馈给网络。   

  

  我把隐层的权重矩阵看成是神经网络思维过程的一种状态,这样隐层就把前一步神经元中的数据以权重分布的形式记忆下来了。下图是循环神经网络的处理过程。   

  

     

  

  当Xt进入时,来自Xt-1的隐藏状态将与Xt一起成为t时刻的输入,进入网络。将按时间顺序对每个样品重复这一过程。   

  

  以上是对循环神经网络原理的介绍。以下是一些关于循环神经网络的其他资源,我强烈推荐你阅读:   

  

  RNNs介绍(循环神经网络介绍)   

  

  初学者的递归神经网络(递归神经网络介绍)   

  

  递归神经网络的非理性有效性(高效递归神经网络)   

  

  

什么是长短期记忆网络(LSTM)

  

  

  在我们开始了解LSTM之前,我们先来看看递归神经网络的最大问题。到目前为止,神经网络的训练看起来不错,直到它涉及到反向传播。随着我们的训练样本的梯度在网络中传播回来,它变得越来越弱,直到它们到达更老的数据点时才能正确调整。这是消失梯度。LSTM是一种存储过去重要信息的循环神经网络。这样,当梯度反向传播时,就不会受到不必要信息的干扰。   

  

  比如我们在看书的时候,经常会忘记上一章的内容,也不一定能记住所有的要点。为了解决这个问题,我们把这些问题的要点摘抄下来,写下来,而忽略了过于详细和与题目关联不大的内容。克里斯托弗奥拉的《理解LSTM网络》深入解释了这一原理。   

  

  首先让我们开始导入所需的库。   

>

  

历史数据

这里,我使用了www.coinmarketcap.com的历史数据,当然你也可以使用任何其他资源,只是我觉得使用它非常顺手。 从中我们可以获得比特币的每日价格数据。 我还在Colab笔记里添加了关于以太币价格的代码,这是为了让我的代码能够重用于其他加密货币。下面就是如何获取市场数据的函数。

  

def get_market_data(market, tag=True):

  

"""

  

market: the full name of the cryptocurrency as spelled on coinmarketcap.com. eg.: 'bitcoin'

  

tag: eg.: 'btc', if provided it will add a tag to the name of every column.

  

returns: panda DataFrame

  

This function will use the coinmarketcap.com url for provided coin/token page.

  

Reads the OHLCV and Market Cap.

  

Converts the date format to be readable.

  

Makes sure that the data is consistant by converting non_numeric values to a number very close to 0.

  

And finally tags each columns if provided.

  

"""

  

market_data = pd.read_html("https://coinmarketcap.com/currencies/" + market +

  

"/historical-data/?start=20130428&end="+time.strftime("%Y%m%d"), flavor='html5lib')<0>

  

market_data = market_data.assign(Date=pd.to_datetime(market_data<'Date'>))

  

market_data<'Volume'> = (pd.to_numeric(market_data<'Volume'>, errors='coerce').fillna(0))

  

if tag:

  

market_data.columns = > + >

  

return market_data

  

现在让我们获取比特币的数据并将其加载到变量'''btc_data'''中去,并显示其中的前五行。

  

btc_data = get_market_data("bitcoin", tag='btc')

  

btc_data.head()

  

比特币市场数据

  

让我们来看看比特币的收盘价以及随着时间推移的日交易量。

  

show_plot(btc_data, tag='BTC')

  

  

数据准备

构建任何深度学习模型的很大一部分是工作是准备数据,这些数据将被神经网络用于训练或预测。 这一步我们称其为预处理,其中根据我们使用数据的类型,可能包括多个步骤。 在此,我们将要做以下这些预处理:

  

数据清理,填充缺失的数据点

  

合并不同的数据,把比特币和以太币的数据放在一个数据框架下

  

去除不必要的数据列

  

对数据根据日期进行升序排序

  

分离出训练样本和测试样本数据

  

创建输入样本并对其进行0和1的范式化

  

创建训练样本和测试样本集的目标输出,并对其进行0和1的范式化

  

将数据转换为 Numpy 数组以供模型使用

  

数据清理部分已经在我们加载数据时中完成了。 在下面的代码中,你可以找到相关的必要功能:

  

  

  

  

  

下面是绘制函数和创建日期标签的代码。这里我们将调用上面的函数来创建最终的数据集。

  

train_set = train_set.drop('Date', 1)

  

  

现在我们来构建LSTM-RNN模型。 在这个模型中,我使用了三层LSTM层,每层512个神经元,每层LSTM之后设置了 0.25 的Dropout,以防止过拟合。最后是全链接层来进行输出。

  

def build_model(inputs, output_size, neurons, activ_func=activation_function, dropout=dropout, loss=loss, optimizer=optimizer):

  

"""

  

inputs: input data as numpy array

  

output_size: number of predictions per input sample

  

neurons: number of neurons/ units in the LSTM layer

  

active_func: Activation function to be used in LSTM layers and Dense layer

  

dropout: dropout ration, default is 0.25

  

loss: loss function for calculating the gradient

  

optimizer: type of optimizer to backpropagate the gradient

  

This function will build 3 layered RNN model with LSTM cells with dripouts after each LSTM layer

  

and finally a dense layer to produce the output using keras' sequential model.

  

Return: Keras sequential model and model summary

  

"""

  

model = Sequential()

  

model.add(LSTM(neurons, return_sequences=True, input_shape=(inputs.shape<1>, inputs.shape<2>), activation=activ_func))

  

model.add(Dropout(dropout))

  

model.add(LSTM(neurons, return_sequences=True, activation=activ_func))

  

model.add(Dropout(dropout))

  

model.add(LSTM(neurons, activation=activ_func))

  

model.add(Dropout(dropout))

  

model.add(Dense(units=output_size))

  

model.add(Activation(activ_func))

  

model.compile(loss=loss, optimizer=optimizer, metrics=<'mae'>)

  

model.summary()

  

return model

  

  

TensorBoard导出的TensorFlow计算图

  

我用'tanh'作为激活函数,均方误差作为损失和'adam'作为优化者。 你也可以试试不同的设置选项,看看它们如何影响模型的性能。

  

这是该模型的概述:

  

  

我代码的开始部分已经声明了超参数,这样对于不同情况的调参比较方便一点。这是我设的超参数:

  

  

现在开始对我们收集的数据进行模型训练

  

# clean up the memory

  

gc.collect()

  

# random seed for reproducibility

  

np.random.seed(202)

  

# initialise model architecture

  

btc_model = build_model(X_train, output_size=1, neurons=neurons)

  

# train model on data

  

btc_history = btc_model.fit(X_train, Y_train_btc, epochs=epochs, batch_size=batch_size, verbose=1, validation_data=(X_test, Y_test_btc), shuffle=False)

  

根据你机器的性能,上述代码可能需要一段时间完成。一旦程序运行结束,你的训练模型也就完成了:)

  

我们来看看BTC和ETH的结果

  

  

结果看来还不错 :)

  

这是David Sheehan写的一篇很棒的关于如何使用LSTM进行加密货币价格预测的博客文章。希望你也能像我一样从中收益!

  

以上为译文。

  

本文由阿里云云栖社区组织翻译。

  

文章原标题《How to predict Bitcoin and Ethereum price with RNN-LSTM in Keras》

  

作者:Siavash Fahimi

  

译者:friday012。

相关文章