当前位置:首页区块链使用LSTM框架实时预测比特币价格

使用LSTM框架实时预测比特币价格

温馨提示:本案例只作为学习研究用途,不构成投资建议。

温馨提示:本案例仅供学习研究之用,不构成投资建议。

比特币的价格数据是基于时间序列的,所以比特币的价格预测大部分是通过LSTM模来实现的。

LSTM是一种深度学习模,特别适用于时间序列数据(或具有时间/空间/结构顺序的数据,如电影、句子等),是预测加密货币价格走势的理想模。

本文主要描述通过LSTM进行数据拟合来预测比特币未来的价格。

要导入的库

1 importpandasaspd2importnumpyasnp34fromsklearn。PreprocessingimportMinMaxScaler LabelEncoder5fromkeras。ModelsimportSequential6fromkeras。LayersimportLSTM, density, Dropout78frommatpLootlibimportpypLootasplt9 % matpLootlibinline

数据分析

1. 数据加载

读取BTC的日常交易数据

1 data = pd。Read_cs (filepath_or_buffer = "btc_data_day")

根据数据,共有1380条数据,由日期、开盘、高、低、收盘、成交量(BTC)、成交量(货币)、加权价格等栏目组成。除了Date列之外,其余的数据列都属于float64数据类。

1的数据。info ()

看看前10行

1的数据。头(10)

使用LSTM框架实时预测比特币价格

2.数据可视化

利用matpLootlib绘制加权后的价格,可以看到数据的分布和趋势。在图中,我们发现有一段数据0,所以我们需要确认数据中是否有异常。

1 PLT。pLoot (data [' WeightedPrice], label = 'Price') 2 PLTYlabel (' Price ') 3 PLT图例()4 PLTshow ()

使用LSTM框架实时预测比特币价格1

3.异常数据处理

检查数据是否包含nan数据,可以看到在我们的数据中没有nan数据

1数据。Isnull ()。sum ()
1 date02open03high04low05close06olume (BTC) 07 olume (Currency) 08 weightedprice09dtype: int64

如果我们再次查看0的数据,我们可以看到我们的数据中有一个0的值。我们需要处理0的值

1 (data = = 0). Astype (int) any ()
1 datefalse2opentrue3hightrue4lowtrue5closetrue6olume (BTC) True7Volume (Currency) True8WeightedPriceTrue9dtype: bool
数据,数据。替换(0,np。2数据[' WeightedPrice] fillna (mETHod = 'ffill', ' inplace = True) 3数据[' Open ']。替换(0,np。4 data [' Open '] fillna (mETHod = 'ffill', inplace = True) 5 data [' High ']。替换(0,np。[' High '] fillna (mETHod = 'ffill', ' inplace = True] 7 data [' Low ']。替换(0,np。8 data [' Low '] fillna (mETHod = 'ffill', ' inplace = True] 9 data [' Close ']。替换(0,np。[' Close '] fillna (mETHod = 'ffill', ' inplace = True) 11 data [' Volume (BTC)']。替换(0,np。12数据[' Volume (BTC)']。Fillna (mETHod = 'ffill', inplace = True) 13数据[' Volume(货币)']。替换(0,np。Nan, inplace = True)数据14 [' Volume(货币)']。Fillna (mETHod = 'ffill', inplace = True)
1 (data = = 0). Astype (int) any ()
1 datefalse2open谬误3 high谬误4 low谬误5close谬误6卷(BTC)谬误7卷(货币)谬误8 weightedpricalse9dtype: bool

如果你观察数据的分布和趋势,曲线是非常连续的

1 PLT。pLoot (data [' WeightedPrice], label = 'Price') 2 PLTYlabel (' Price ') 3 PLT图例()4 PLTshow ()

使用LSTM框架实时预测比特币价格2

4. 划分训练数据集和测试数据集

将数据规范化为0 – 1

1 data_set = data。删除(' Date ',轴= 1). Values2data_set = data_set。Astype (' float32) 3 MMS = MinMaxScaler (feature_range = (0,1)) 4 data_set = MMS。Fit_transform (data_set)

测试数据集和训练数据集按2:8划分

1 thewire = 0.82 train_size = int (len (data_set) * thewire) 3 test_size = len (data_set) - train_size4train, test = data_set [0: train_size,:], data_set [train_size: len (data_set),:)

创建培训数据集和测试数据集。以1天为窗口创建我们的培训数据集和测试数据集。

1 . DeFicreate_dataset (data): 2 window = 13 label_index = 64 x, y = [], [] 5 foriinrange (len (data) - Windows): 6 x. Append (data/I + window: (I),:) 7 y. Append (data/I + Windows, label_index) 8 returnnp。数组(x), np。数组(y)
1 . train_x train_y = create_dataset (test) 2 . test_x, test_y = create_dataset (test)

定义模并对其进行培训

这次我们使用一个简单的模,其结构如下。

这里需要解释LSTM的输入形状。输入形状的输入维度是(batch_size、时间步长、特性)。其中,时间步长值为数据输入时的时间窗区间。这里,我们用1天作为时间窗口,我们的数据都是每天的数据,所以这里的时间步长是1。

长短时记忆(LSTM)是一种特殊的RNN,主要用于解决长序列训练过程中的梯度消失和梯度爆炸问题。下面是LSTM的简要介绍。

使用LSTM框架实时预测比特币价格3

从LSTM的网络结构图可以看出,LSTM实际上是一个小模,包括3个sigmoid激活函数、2个tanh激活函数、3个乘法函数和1个加法函数。

细胞状态

单元格状态是LSTM的核心,它是上图顶部的黑线,黑线下面是我们后面要讲的门。单元状态将根据每个gate的结果进行更新。让我们通过这些门,你们就会理解细胞状态的流动。

LSTM网络可以通过一个称为门的结构删除或添加有关单元状态的信息。盖茨可以有选择地决定让什么信息通过。栅极结构是乙状结肠层和点积运算的组合。因为sigmoid层的输出是0-1,0表示它们都不能通过,1表示它们都能通过。LSTM包含三个控制单元状态的门。我们来谈谈每一扇门。

忘记门

LSTM中的第一步是确定单元状态需要丢弃哪些信息。这部分操作是通过一个名为遗忘门的sigmoid单元来处理的。让我们看看动画。

使用LSTM框架实时预测比特币价格4

我们可以看到那扇被遗忘的门正在向外张望

使用LSTM框架实时预测比特币价格5使用LSTM框架实时预测比特币价格6

该信息用于输出一个介于0和1之间的向量,其中0和1的值表示单元格的状态

使用LSTM框架实时预测比特币价格7

有多少信息被保留或丢弃。零意味着没有,一意味着两者都有。

数学表达式:

使用LSTM框架实时预测比特币价格8

进入门

下一步是通过打开输入门来决定要向单元格状态添加什么新信息。我们先来看动画,

使用LSTM框架实时预测比特币价格9

我们可以看到,

使用LSTM框架实时预测比特币价格5使用LSTM框架实时预测比特币价格6

信息被放入遗忘门(sigmoid)和输入门(tanh)。因为忘记门的输出是0和1的价值,因此,如果混沌之门的输出为0,结果进入门美元C_{我}$不会被添加到当前状态的细胞,如果它是1,都将被添加到细胞的状态,这是混沌之门进入门的作用选择性的结果添加到细胞状态。

数学公式为:

使用LSTM框架实时预测比特币价格10

输出门

在更新单元格的状态之后,我们需要数据

使用LSTM框架实时预测比特币价格5使用LSTM框架实时预测比特币价格6

输入的和用于确定输出单元的状态特征。这里,我们需要将输入通过一个名为output gate的sigmoid层传递,以获得判断条件,然后通过tanh层传递单元格的状态,以获得一个值介于-1和1之间的向量。这个向量乘以输出门得到的判断条件,得到RNN单元的最终输出。动画图如下,

使用LSTM框架实时预测比特币价格11

1 DeFicreate_model (): 2 model =顺序模()3添加(LSTM (50, input_shape = (train_x))。形状[1],train_x形状[2]))4个模。添加(密集(1))5 model.com运行(损失= 'mae',优化器= 'Adam') 6模。返回model89m Odel = create_model ()

使用LSTM框架实时预测比特币价格12

1 . history = model fit (train_x train_y, epochs = 80, batch_size = 64, alidation_data = (test_x test_y), erbose = 1, shuffle = False)
1 PLT。情节(历史。History [' loss '], label = 'train') 2 PLT。情节(历史。历史[' al_loss], label = 'test') 3 PLT。图例()4 PLTshow ()

使用LSTM框架实时预测比特币价格13

预测

1 predict =模。预测(test_x) 2 PLT。pLoot (predict, label = 'predict') 3 PLT。pLoot (test_y, label = 'groundtrue') 4 PLT。图例()5pltshow ()

使用LSTM框架实时预测比特币价格14

目前,通过机器学习来预测比特币的长期价格走势仍然非常困难。本文只能作为一个学习案例。之后的案例将在线与瞬间池云演示镜像,有兴趣的用户可以直接体验。

温馨提示:

文章标题:使用LSTM框架实时预测比特币价格

文章链接:https://www.btchangqing.cn/21372.html

更新时间:2021年05月29日

本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。

区块链

意大利政府承诺出资1500万欧元保护“意大利制造”

2020-5-17 8:54:57

区块链

数据:比特币矿工收入减半后下降61%,17%来自交易成本

2020-5-17 10:35:58

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索