使用 LSTM 进行比特币时间序列预测

本文介绍了如何使用英特尔®ONEAPIAI分析工具包构建基于LSTM的比特币价格预测模型,包括数据预处理、模型训练、损失函数评估和推理时间优化,旨在提升预测的准确性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

比特币价格预测器是一项极具前瞻性和实用性的项目。在这个数字化时代,区块链技术的不断发展 推动着加密货币市场的蓬勃发展。随着越来越多的数字货币涌现,并且市场波动性增加,对比特币价格 的准确预测变得至关重要。

预期解决方案:

通过参考英特尔的类似实现方案,预测比特币价格趋势的可靠性和准确性,以及预测模型的推理速 度,可以为全球数字货币市场的安全性和可持续性提供有力支持。这里,我们将分类准确度和推理时间 作为评估比特币价格预测器的主要依据。

数据集:

你可以在此处下载数据集要求。

需求:

需要使用 英特尔® ONEAPI AI分析工具包

1.AI Tools: Deep Learning安装                                      

针对预测比特币价格趋势的可靠性和准确性,英特尔® ONEAPI AI 分析工具包中的 Deep Learning 组件可以为您提供强大的功能来构建和训练适用于时间序列预测的 LSTM 模型。首先进入官网安装相关 依赖。

Install with conda*

conda install -c intel -c conda-forge --override-channels intel-extension-for- tensorflow=2.14 tensorflow=2.14 intel-optimization-for-horovod=0.28.1.1 intel- extension-for-pytorch=2.0.100 pytorch=2.0.1 oneccl_bind_pt=2.0.0

torchvision=0.15.2 python=3.10

2.数据分析

在本小节将使用Python及其流行的数据分析库如pandas matplotlibnumpy来分析比特币的价  格走势。分析这些价格趋势对投资者和交易者做出明智决策至关重要。在技术分析中常用的一种技术是 计算移动平均线,它有助于平滑价格数据并识别潜在的趋势。

2.1首先,我们需要导入必要的Python库:

import pandas as pd

import matplotlib.pyplot as plt

import numpy as np

2.2接下来,我们将从CSV文件中读取比特币价格数据,并快速查看数据:

data = pd.read_csv("./data/bitcoin_price_Training - Training.csv") display(data.head())

输出:

Date

Open

High

Low

Close

Volume

Market Cap

Jul 31,

2017

2763.24

2889.62

2720.61

2875.34

860,575,000

45,535,800,000

Jul 30,

2017

2724.39

2758.53

2644.85

2757.18

705,943,000

44,890,700,000

Jul 29,

2017

2807.02

2808.76

2692.80

2726.45

803,746,000

46,246,700,000

Jul 28,

2017

2679.73

2897.45

2679.73

2809.01

1,380,100,000

44,144,400,000

Jul 27,

2017

2538.71

2693.32

2529.34

2671.78

789,104,000

41,816,500,000

2.3探索数据的基本信息和摘要统计信息。

data['Date'] = pd.to_datetime(data['Date'])

print("数据信息:")

print(data.info())

输出:

Data Info:

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 1556 entries, 0 to 1555

Data columns (total 7 columns):

#   Column      Non-Null Count  Dtype

0   Date        1556 non-null   datetime64[ns]

1   Open        1556 non-null   float64

2   High        1556 non-null   float64

3   Low         1556 non-null   float64

4   Close       1556 non-null   float64

5   Volume      1556 non-null   object

6   Market Cap  1556 non-null   object

dtypes: datetime64[ns](1), float64(4), object(2)

memory usage: 85.2+ KB

None

print("\n数据摘要:")

print(data.describe())

输出:

Data Summary:

Date

Open

High

Low

Close

count

1556

1556.000000

1556.000000

1556.000000

1556.000000

mean   2015-06-14

12:00:00

582.625328

597.992847

567.851446

584.239396

min    2013-04-28

00:00:00

68.500000

74.560000

65.530000

68.430000

25%    2014-05-21

18:00:00

254.287500

260.327500

248.835000

254.320000

50%    2015-06-14

12:00:00

438.600000

447.560000

430.570000

438.855000

75%    2016-07-07

06:00:00

662.437500

674.525000

646.735000

663.402500

max    2017-07-31

00:00:00

2953.220000

2999.910000

2840.530000

2958.110000

std

NaN

523.137312

542.992855

505.877401

525.904442

2.4绘制价格走势和移动平均线

data['MA_50'] = data['Close'].rolling(window=50).mean()

data['MA_200'] = data['Close'].rolling(window=200).mean()

plt.figure(figsize=(14, 7))

plt.plot(data['Date'], data['Close'], label='收盘价格 ', color='blue')

plt.plot(data['Date'], data['MA_50'], label='50日移动平均线 ', color='red')

plt.plot(data['Date'], data['MA_200'], label='200日移动平均线 ', color='green')

plt.title('比特币价格和移动平均线 ')

plt.xlabel('日期 ')

plt.ylabel('价格 ')

plt.legend()

plt.grid(True)

plt.show()

3.数据预处理

首先,我们需要读取比特币价格的历史数据,包括开盘价(Open)、最高价(High)、最低价

Low)、收盘价(Close)、交易量(Volume)和市值(Market Cap等信息。通过Pandas库读取 CSV文件,并对数据进行初步的处理。

import pandas as pd

import matplotlib.pyplot as plt

import numpy as np

# 读取数据集

train_data = pd.read_csv("./data/bitcoin_price_Training - Training.csv") test_data = pd.read_csv("./data/bitcoin_price_1week_Test - Test.csv")

# 将日期转换为日期时间格式

train_data['Date'] = pd.to_datetime(train_data['Date'])

test_data['Date'] = pd.to_datetime(test_data['Date'])

# 反转训练集和测试集的数据

train_data = train_data.iloc[::-1].reset_index(drop=True)

test_data = test_data.iloc[::-1].reset_index(drop=True)

#  Date 列设置为 DataFrame 的索引

train_data.set_index('Date', inplace=True)

test_data.set_index('Date', inplace=True)

接下来,我们使用MinMaxScaler对比特币的收盘价进行归一化处理,将其缩放到[0, 1]的范围内。

from sklearn.preprocessing import MinMaxScaler

# 创建MinMaxScaler对象

scaler = MinMaxScaler()

# 使用训练数据中的"Close"列拟合归一化器

scaler.fit(train_data[['Close']])

# 对训练数据中的"Close"列进行归一化处理

train_data_normalized = scaler.transform(train_data[['Close']])

# 对测试数据中的"Close"列进行归一化处理

test_data_normalized = scaler.transform(test_data[['Close']])

4.创建数据集

我们定义一个函数 create_dataset来创建LSTM模型所需的训练集和测试集。该函数通过设置

look_back参数,将时间序列数据转换成监督学习问题,其中每个样本包含过去若干天的比特币收盘价 作为输入特征,下一天的收盘价作为输出标签。

def create_dataset(dataset, look_back=1):

dataX, dataY = [], []

for i in range(len(dataset) - look_back):

a = dataset[i:(i + look_back), 0]  # 直接从 NumPy 数组中提取特定列

dataX.append(a)

dataY.append(dataset[i + look_back, 0])

return np.array(dataX), np.array(dataY)

# 使用 create_dataset 函数创建训练集和测试集

look_back = 1

trainX, trainY = create_dataset(train_data_normalized, look_back)

testX, testY = create_dataset(test_data_normalized, look_back)

5.构建LSTM模型                                                              

接下来,我们使用Keras库构建一个简单的LSTM模型。该模型包含一个LSTM隐藏层和一个全连接 输出层。我们选择使用均方误差(MAE)作为损失函数,并使用Adam优化器进行模型训练。

from keras.models import Sequential

from keras.layers import LSTM, Dense

from keras.optimizers import Adam

# 将数据重塑为LSTM模型所需的输入格式 [样本数 , 时间步 , 特征数]

trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1])) testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))

# 创建 LSTM 模型

model = Sequential()

model.add(LSTM(100, input_shape=(trainX.shape[1], trainX.shape[2]))) model.add(Dense(1))

model.compile(loss='mae', optimizer='adam')

6.模型训练

history = model.fit(trainX, trainY, epochs=300, batch_size=100, validation_data= (testX, testY), verbose=1, shuffle=False)

Epoch 1/300

2024-02-22 10:59:33.834991: I

tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:117] Plugin optimizer for device_type CPU is enabled.

16/16 [==============================] - 2s 38ms/step - loss: 0.1393 - val_loss: 0.8837

Epoch 2/300

16/16 [==============================] - 0s 11ms/step - loss: 0.0987 - val_loss: 0.7925

Epoch 3/300

16/16 [==============================] - 0s 18ms/step - loss: 0.0924 - val_loss: 0.7368

.......

Epoch 298/300

16/16 [==============================] - 0s 18ms/step - loss: 0.0113 - val_loss: 0.0393

Epoch 299/300

16/16 [==============================] - 0s 18ms/step - loss: 0.0096 - val_loss: 0.0360

Epoch 300/300

16/16 [==============================] - 0s 15ms/step - loss: 0.0063 - val_loss: 0.0452

7.模型评估

我们可以通过绘制训练过程中的损失曲线来评估模型的性能。

plt.plot(history.history['loss'], label='train')

plt.plot(history.history['val_loss'], label='test')

plt.legend()

plt.show()

8.模型推理

最后,我们使用训练好的模型进行推理,并将预测结果与实际值进行对比。

import time

# 记录开始时间

start_time = time.time()

# 在这里执行您的模型预测代码

predicted_normalized = model.predict(testX)

# 记录结束时间

end_time = time.time()

# 计算推理时间

inference_time = end_time - start_time

print("推理时间:", inference_time, "")

1/1 [==============================] - 0s 304ms/step

推理时间: 0.33905482292175293

# 反归一化预测结果

predicted_close = scaler.inverse_transform(predicted_normalized)

actual_close = test_data['Close'].values

date_index = test_data.index

# 绘制预测结果和实际值的折线图

plt.plot(test_data.index,predicted_close, label='Predicted Values', color='blue')

plt.plot(test_data.index,actual_close, label='Actual Values', color='green')

# 添加图例和标签

plt.legend()

plt.xlabel('Date')

plt.ylabel('Bitcoin Price')

# 旋转 x 轴标签以提高可读性

plt.xticks(rotation=45)

# 显示图形

plt.show()

9.总结                                                                               

在这个比特币价格预测的实验中,我们利用了英特尔® ONEAPI AI 分析工具包中的 Deep Learning 组件来构建预测模型,并对模型进行了训练和评估。以下是我们得出的一些实验结论:

1. 模型训练过程:   我们观察了模型在训练集和测试集上的损失曲线。通过使用英特尔® ONEAPI AI 分析工具包提供的 Deep Learning 组件,我们能够高效地训练模型并监控其收敛情况。损  失曲线的分析有助于我们了解模型在训练过程中的表现和优化空间。

2. 推理时间:   我们记录了模型进行推理的时间。利用英特尔® ONEAPI AI 分析工具包,我们能   够评估模型的推理性能,并在需要时进行优化。通过有效利用硬件加速功能,我们可以缩短推 理时间,提高模型的实时性和响应能力。

3. 预测结果对比:   我们将模型预测的比特币价格与实际价格进行了对比。借助英特尔® ONEAPI AI 分析工具包中的 Deep Learning 组件,我们能够快速训练和部署模型,并对其预测结果进  行验证。与实际价格较为接近的预测结果表明模型具有较高的准确性和预测能力。

综合以上观察,我们得出结论并指导实际应用中的模型优化和部署。利用英特尔® ONEAPI AI 分析 工具包提供的深度学习功能,我们能够构建高效、准确的预测模型,为比特币价格预测等应用领域提供 可靠的解决方案。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值