主页 > imtoken新版本 > 基于循环神经网络和 LSTM 的比特币价格预测

基于循环神经网络和 LSTM 的比特币价格预测

imtoken新版本 2023-07-20 05:15:08

递归神经网络 (RNN) 是最先进的时间序列算法,被 Apple 的 Siri 和 Google 的语音搜索所使用。

它是一种通过内部存储器记住其输入的算法,这使得该算法非常适合解决涉及时序的机器学习问题,这也使其在深度学习中取得了巨大的成果。

在本文中,讨论了如何通过分析过去 6 年的信息来预测比特币的价格。 我们使用 Python 和 RNN 实现了一个简单的模型,以帮助我们更好地理解时间序列的工作原理。

了解比特币

比特币是一种加密货币,诞生于 2009 年 1 月。它是世界上最有价值的加密货币,在全球 40 多家交易所交易,接受 30 多种不同的货币。

作为一种货币,比特币因其高波动性(与传统货币相比高得多)而为价格预测提供了新的机会。

比特币系统是一组分散的节点,运行比特币代码并存储其区块链。

区块链可以被认为是区块的集合。 在每个区块中比特币预测网站,都有一组交易。 因为运行区块链的所有计算机都有相同的区块和交易列表,并且可以透明地看到这些新区块正在填充新的比特币交易,所以没有人可以欺骗系统。

比特币使用点对点技术来促进即时支付,矿工在区块链上处理交易。

比特币预测网站_比特币年底价格预测_比特币2019年底预测

比特币的运作方式是理解它为何如此受欢迎的关键。 与其他投资不同,加密货币不与实物资产或美元挂钩。 它的主要目的是让两个人在任何地方都可以直接交换价值。 这意味着网络没有中央控制。 没有政府,没有中央银行可以随意关闭或提高或降低价值。 每次有人进行交易时,都会在分类帐中添加一个唯一的加密签名以进行验证。

实施循环神经网络

递归神经网络是一种健壮而强大的神经网络,被认为是最专业的算法之一,因为它们是唯一具有内部记忆的神经网络。

循环神经网络最初创建于 1980 年代,但直到最近几年才真正发挥其潜力。

计算能力的提升,加上我们现在拥有的海量数据,以及 1990 年代短时记忆(LSTM)的发明,让 RNN 真正走进了人们的视野。

该算法对于时间序列、语音、文本、金融数据、音频、视频、天气等时间序列问题表现非常出色。与其他算法相比,RNN 能够更深入地理解序列及其上下文。

在 RNN 中,信息通过一个循环。 在做出决定时比特币预测网站,它会考虑当前的输入以及它从之前收到的输入中学到的东西。

下图说明了 RNN 算法中的信息流是如何工作的。

比特币预测网站_比特币年底价格预测_比特币2019年底预测

比特币年底价格预测_比特币预测网站_比特币2019年底预测

LSTM

长短期记忆网络是循环神经网络的扩展,在RNN的基础上扩展了记忆。 因此,它非常适合从具有长期滞后的重要经验中学习。

LSTM 使 RNN 能够长时间记住输入,因为 LSTM 将信息存储在内存中,就像计算机的内存一样。 LSTM 可以从其内存中读取、写入和删除信息。

在 LSTM 中,您有三个门:输入门、遗忘门和输出门。 这些门决定是否让新的输入进入(输入门),移除不重要的信息(遗忘门),或者让它影响当前时间步的输出(输出门)。 下面是具有三个门的 RNN 的图示。

比特币年底价格预测_比特币预测网站_比特币2019年底预测

LSTM 中的门是模拟 sigmoid,这意味着它们的范围从 0 到 1。它们是模拟的这一事实使它们能够反向传播。

获取实时加密货币数据(比特币)

比特币年底价格预测_比特币预测网站_比特币2019年底预测

本文所用数据来自雅虎财经:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import MinMaxScaler

data = pd.read_csv('BTC-USD.csv', date_parser = True)
data.tail()
比特币预测网站_比特币年底价格预测_比特币2019年底预测

data_training = data[data['Date']< '2020-01-01'].copy()
data_training
比特币预测网站_比特币年底价格预测_比特币2019年底预测

data_test = data[data['Date']< '2020-01-01'].copy()
data_test
比特币预测网站_比特币2019年底预测_比特币年底价格预测

training_data = data_training.drop(['Date', 'Adj Close'], axis = 1)
training_data.head()
比特币年底价格预测_比特币2019年底预测_比特币预测网站

归一化

我们对数据采取的第一步是标准化其值。 归一化的目的是将数据集中数字列的值更改为通用尺度,而不会扭曲值范围的差异。

MinMaxScaler is used to normalize the data
scaler = MinMaxScaler()
training_data = scaler.fit_transform(training_data)
training_data
比特币年底价格预测_比特币预测网站_比特币2019年底预测

比特币2019年底预测_比特币预测网站_比特币年底价格预测

X_train = [] 
Y_train = []

for i in range(60, training_data.shape[0]):
X_train.append(training_data[i-60:i])
Y_train.append(training_data[i,0])

X_train, Y_train = np.array(X_train), np.array(Y_train)
X_train.shape

使用 LSTM 神经网络(深度学习)预测加密货币价格

现在是建立模型的阶段。 找到正确的模型是一门艺术,需要多次调整并尝试为每个模型找到正确的层和超参数。

对于这类问题,模型构建是相当简单和标准的。

训练这个模型即使没有GPU也可以完成,数据量很小,网络结构也很简单。 当涉及到具有更精细信息的更高级模型时,训练可能需要数小时或数天。

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, LSTM, Dropout

model = Sequential() model.add(LSTM(units = 50, activation = 'relu', return_sequences = True, input_shape = (X_train.shape[1], 5)))
model.add(Dropout(0.2)) model.add(LSTM(units = 60, activation = 'relu', return_sequences = True))
model.add(Dropout(0.3)) model.add(LSTM(units = 80, activation = 'relu', return_sequences = True))

model.add(Dropout(0.4)) model.add(LSTM(units = 120, activation = 'relu'))
model.add(Dropout(0.5)) model.add(Dense(units =1))
model.summary()

比特币2019年底预测_比特币预测网站_比特币年底价格预测

model.compile(optimizer = 'adam', loss = 'mean_squared_error')
history= model.fit(X_train, Y_train, epochs = 20, batch_size =50, validation_split=0.1

loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(len(loss))
plt.figure()
plt.plot(epochs, loss, 'b', label='Training loss')
plt.plot(epochs, val_loss, 'r', label='Validation loss')
plt.title("Training and Validation Loss")
plt.legend()
plt.show()

比特币年底价格预测_比特币预测网站_比特币2019年底预测

比特币年底价格预测_比特币2019年底预测_比特币预测网站

核实

part_60_days = data_training.tail(60)
df= part_60_days.append(data_test, ignore_index = True)
df = df.drop(['Date', 'Adj Close'], axis = 1)
df.head()

比特币2019年底预测_比特币预测网站_比特币年底价格预测

inputs = scaler.transform(df) inputs

比特币年底价格预测_比特币2019年底预测_比特币预测网站

X_test = []
Y_test = []
for i in range (60, inputs.shape[0]):
X_test.append(inputs[i-60:i]) Y_test.append(inputs[i, 0])
X_test, Y_test = np.array(X_test), np.array(Y_test) X_test.shape, Y_test.shape
Y_pred = regressor.predict(X_test) Y_pred, Y_test

scaler.scale_

scale = 1/5.18164146e-05
Y_test = Y_test*scale Y_pred = Y_pred*scale
Y_pred

比特币年底价格预测_比特币2019年底预测_比特币预测网站

Y_test

比特币预测网站_比特币年底价格预测_比特币2019年底预测

plt.figure(figsize=(14,5))
plt.plot(Y_test, color = 'red', label = 'Real Bitcoin Price')
plt.plot(Y_pred, color = 'green', label = 'Predicted Bitcoin Price')
plt.title('Bitcoin Price Prediction using RNN-LSTM')
plt.xlabel('Time')
plt.ylabel('Price')
plt.legend()
plt.show()

比特币年底价格预测_比特币2019年底预测_比特币预测网站

结语

RNN 和 LSTM 是优秀的技术,具有良好的架构,可用于分析和预测时间序列信息。 这篇文章的重点是实现一个简单的模型,如果你对这个话题感兴趣,你可以尝试不同的东西。