温馨提示:本案例只作为学习研究用途,不构成投资建议。 比特币的价格数据是基于时间序列的,因此比特币的价格预测大多采用LSTM模型来实现。 长期短期记忆(LSTM)是一种特别适用于时间序列数据(或具有时间 / 空间 / 结构顺序的数据,例如电影、句子等)的深度学习模型,是预测加密货币的价格走向的理想模型。 本文主要写了通过LSTM进行数据拟合,从而预测比特币的未来价格。 ![]() import需要使用的库 ![]() 1import pandas as pd ![]() 数据分析 ![]() 数据加载 读取BTC的日交易数据 1data = pd.read_csv(filepath_or_buffer="btc_data_day") 查看数据可得,现在的数据一共有1380条,数据由Date、Open、High、Low、Close、Volume(BTC)、Volume(Currency)、Weighted Price这几列组成。其中除去Date列以外,其余的数据列都是float64数据类型。 1data.info() 查看下前10行的数据 1data.head(10) 数据可视化 使用matplotlib将Weighted Price绘制出来,看下数据的分布跟走势。在图中我们发现了有一段数据0的部分,我们需要确认下数据是否有异常。 1plt.plot(data['Weighted Price'], label='Price') 异常数据处理 先查看下数据是否含有nan的数据,可以看到我们的数据中没有nan的数据 1data.isnull().sum() 1Date 0 再查看下0数据,可以看到我们的数据中含有0值,我们需要对0值做下处理 1(data == 0).astype(int).any() 1Date False 1data['Weighted Price'].replace(0, np.nan, inplace=True) 1(data == 0).astype(int).any() 1Date False 再看下数据的分布跟走势,这个时候曲线已经非常的连续 1plt.plot(data['Weighted Price'], label='Price') 训练数据集和测试数据集划分 将数据归一化到0-1 1data_set = data.drop('Date', axis=1).values 以2:8划分测试数据集跟训练数据集 1ratio = 0.8 创建训练数据集跟测试数据集,以1天作为窗口期来创建我们的训练数据集跟测试数据集。 1def create_dataset(data): 1train_x, train_y = create_dataset(train) ![]() 定义模型并训练 ![]() 这次我们使用一个简单的模型,这个模型结构如下1. LSTM2. Dense。 这里需要对LSTM的inputh shape做下说明, Input Shape的输入维度为(batch_size, time steps, features)。其中,time steps值的是数据输入的时候的时间窗口间隔,这里我们使用1天作为时间窗口,并且我们的数据都是日数据,因此这里我们的time steps为1。 长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题,这里先简单介绍下LSTM。 从LSTM的网络结构示意图中,可以看到LSTM其实是一个小型的模型,他包含了3个sigmoid激活函数,2个tanh激活函数,3个乘法,1个加法。 细胞状态 细胞状态是LSTM的核心,他是上图中最上面的那根黑线, 在这根黑线下面是一些门,我们在后面介绍。细胞状态会根据每个门的结果,来得到更新。下面我们介绍下这些门,你就会理解细胞状态的流程。 LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。门能够有选择性的决定让哪些信息通过。门的结构是一个sigmoid层和一个点乘操作的组合。因为sigmoid层的输出是0-1的值,0表示都不能通过,1表示都能通过。一个LSTM里面包含三个门来控制细胞状态。下面我们来一一介绍下这些门。 遗忘门 LSTM的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为忘记门的sigmoid单元来处理的。我们来看下动画示意图, 我们可以看到,遗忘门通过查看 数学表达式: 输入门 下一步是决定给细胞状态添加哪些新的信息,这个步骤是通过输入门开完成的。我们先来看下动画示意图, 我们看到了 数学公式为: 输出门 更新完细胞状态后需要根据 1def create_model(): 1history = model.fit(train_x, train_y, epochs=80, batch_size=64, validation_data=(test_x, test_y), verbose=1, shuffle=False) 1plt.plot(history.history['loss'], label='train') ![]() 预测 ![]() 1predict = model.predict(test_x) 当前利用机器学习预测比特币长期价格走势还是非常困难的,本文只能作为学习案例使用。该案例之后会上线与矩池云的Demo镜像之中,感兴趣的用户可以直接体验。 ![]() 本文来源:巴比特资讯 —- 编译者/作者:巴比特资讯 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
利用LSTM框架实时预测比特币价格
2020-05-17 巴比特资讯 来源:火星财经
LOADING...
相关阅读:
- 比特币正成为机构投资者的数字黄金2020-08-01
- 分析:基于ETH的资产在2020年创下最高收益2020-08-01
- 市场总结:比特币推至$ 11,450,DeFi值现在锁定在$ 4B2020-08-01
- 7月24日至31日,大型科技公司,中央银行与垄断调查2020-08-01
- 分析师:比特币价格飙升是因为价格上涨2020-08-01