深度学习-[源码+数据集]基于LSTM神经网络黄金价格预测实战

简介: 深度学习-[源码+数据集]基于LSTM神经网络黄金价格预测实战

循环神经网络(Recurrent Neural Networks,简称RNNs)是一类用于处理序列数据的神经网络。与传统的神经网络(如全连接神经网络或卷积神经网络)不同,RNNs具有记忆能力,能够捕获序列数据中的时间依赖性和模式。这使得RNNs在自然语言处理、语音识别、时间序列预测等领域具有广泛的应用。

一、RNNs的基本结构

RNNs的基本结构包括输入层、隐藏层和输出层。其中,隐藏层是RNNs的核心部分,它通过循环的方式连接,使得每个时间步的隐藏层都能接收上一时间步的隐藏层状态作为输入。这种结构使得RNNs能够捕获序列数据中的时间依赖性。

二、RNNs的工作原理

  1. 输入层:接收当前时间步的输入数据(如一个单词、一个时间点的观测值等)。
  2. 隐藏层:根据当前时间步的输入数据和上一时间步的隐藏层状态,计算当前时间步的隐藏层状态。这个状态包含了从序列开始到当前时间步的所有信息。隐藏层状态的计算通常使用非线性激活函数(如tanh或ReLU)进行。
  3. 输出层:根据当前时间步的隐藏层状态,计算当前时间步的输出。输出层可以是一个简单的全连接层,也可以是更复杂的结构(如softmax层用于分类任务)。
  4. 循环连接:隐藏层的状态通过循环连接传递给下一个时间步的隐藏层。这种循环连接使得RNNs能够捕获序列数据中的时间依赖性。

三、RNNs的变种

由于RNNs在处理长序列时存在梯度消失和梯度爆炸的问题,研究者们提出了许多RNNs的变种来改进这些问题,包括:

  1. 长短期记忆网络(Long Short-Term Memory,LSTM):通过引入门控机制(如输入门、遗忘门和输出门)来控制信息的传递和遗忘,从而有效地解决了梯度消失和梯度爆炸的问题。
  2. 门控循环单元(Gated Recurrent Unit,GRU):GRU是LSTM的一种简化版本,它合并了LSTM中的遗忘门和输入门,使得模型结构更加简单,但性能与LSTM相当。
  3. 双向循环神经网络(Bidirectional RNNs):双向RNNs同时考虑序列的前向和后向信息,从而能够捕获更丰富的上下文信息。

四、RNNs的应用

RNNs在自然语言处理、语音识别、时间序列预测等领域具有广泛的应用。例如,在机器翻译任务中,RNNs可以将一种语言的句子编码为向量表示,然后解码为另一种语言的句子;在语音识别任务中,RNNs可以将音频信号转换为文本序列;在时间序列预测任务中,RNNs可以利用历史数据来预测未来的趋势。

案例代码实现:

模型训练:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.layers import Dense,LSTM
import keras
 
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
 
#加载数据
dataset = pd.read_csv("LBMA-GOLD.csv",index_col=[0])   #将第一列作为索引列和标题列
#print(dataset)
 
#设置训练集的长度
training_len = 1056
 
#获取训练集
training_set = dataset.iloc[0:training_len, [0]]
 
#获取测试集数据
test_set = dataset.iloc[training_len:, [0]]
#print(test_set)
#对数据集进行归一化
sc = MinMaxScaler(feature_range=(0,1))
train_set_scaled = sc.fit_transform(training_set)
test_set = sc.fit_transform(test_set)
 
#设置训练集特征和训练集标签
x_train = []
y_train = []
 
#设置测试集特征和训练集标签
x_test = []
y_test = []
 
#利用for循环进行训练集特征和标签的制作,提取数据中连练五天作为特征
for i in range(5,len(train_set_scaled)):
    x_train.append(train_set_scaled[i-5:i,0])
    y_train.append(train_set_scaled[i,0])
 
#将训练集用list转换为array格式
x_train,y_train = np.array(x_train),np.array(y_train)
 
# 使x_train符合输入要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]。
# 此处整个数据集送入,送入样本数为x_train.shape[0]即训练数据的样本个数; 循环核时间展开步数定位5
x_train = np.reshape(x_train,(x_train.shape[0],5,1))
 
#print(x_train.shape)
 
# 同理划分测试集数据
for i in range(5, len(test_set)):
    x_test.append(test_set[i - 5:i, 0])
    y_test.append(test_set[i, 0])
 
 
# 测试集变array并reshape为符合要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]
x_test, y_test = np.array(x_test), np.array(y_test)
x_test = np.reshape(x_test, (x_test.shape[0], 5, 1))
 
#print(x_test.shape)
 
 
# # 搭建神经网络模型
model = keras.Sequential()
model.add(LSTM(80, return_sequences=True, activation="relu"))
model.add(LSTM(100, return_sequences=False, activation="relu"))
model.add(Dense(10, activation="relu"))
model.add(Dense(1))
 
 
# 对模型进行编译,选用学习率为0.01
model.compile(loss='mse', optimizer=keras.optimizers.Adam(0.01))
 
# 将训练集和测试集放入网络进行训练,每批次送入的数据为32个数据,一共训练50轮,将测试集样本放入到神经网络中测试其验证集的loss值
history = model.fit(x_train, y_train, batch_size=32, epochs=100, validation_data=(x_test, y_test))
model.save('model.h5')
 
 
 
# 绘制训练集和测试集的loss值对比图
plt.plot(history.history['loss'], label='train')
plt.plot(history.history['val_loss'], label='val')
plt.title("LSTM神经网络loss值")
plt.legend()
plt.show()

数据测试:

# 导入库
import pandas as pd
import numpy as np
import matplotlib.pyplot
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from math import sqrt
from keras.models import load_model
import matplotlib.pyplot as plt
 
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
 
# 加载历史数据文件
dataset = pd.read_csv('LBMA-GOLD.csv', index_col='Date')
# print(dataset)
 
# 设置训练集的长度
training_len = 1256 -200
 
 
# 获取测试集数据
test_set = dataset.iloc[training_len:, [0]]
 
# 将数据集进行归一化,方便神经网络的训练
sc = MinMaxScaler(feature_range=(0, 1))
test_set = sc.fit_transform(test_set)
 
 
# 设置放置测试数据特征和测试数据标签的列表
x_test = []
y_test = []
 
 
 
# 同理划分测试集数据
for i in range(5, len(test_set)):
    x_test.append(test_set[i - 5:i, 0])
    y_test.append(test_set[i, 0])
 
 
# 测试集变array并reshape为符合要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]
x_test, y_test = np.array(x_test), np.array(y_test)
x_test = np.reshape(x_test, (x_test.shape[0], 5, 1))
 
# 导入模型
model = load_model('model.h5')
 
 
# 利用模型进行测试
predicted = model.predict(x_test)
# print(predicted.shape)
 
# 进行预测值的反归一化
prediction = sc.inverse_transform(predicted)
# print(prediction)
 
# 对测试集的标签进行反归一化
 
real = sc.inverse_transform(test_set[5:])
# print(real)
 
 
# 打印模型的评价指标
rmse = sqrt(mean_squared_error(prediction, real))
mape = np.mean(np.abs((real-prediction)/prediction))
print('rmse', rmse)
print('mape', mape)
 
# 绘制真实值和预测值的对比
plt.plot(real, label='真实值')
plt.plot(prediction, label='预测值')
plt.title("基于LSTM神经网络的黄金价格预测")
plt.legend()
plt.show()

预测结果:

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

相关文章
|
4月前
|
机器学习/深度学习 算法 安全
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
259 0
|
6月前
|
机器学习/深度学习 算法 数据挖掘
基于WOA鲸鱼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB 2022a/2024b实现,采用WOA优化的BiLSTM算法进行序列预测。核心代码包含完整中文注释与操作视频,展示从参数优化到模型训练、预测的全流程。BiLSTM通过前向与后向LSTM结合,有效捕捉序列前后文信息,解决传统RNN梯度消失问题。WOA优化超参数(如学习率、隐藏层神经元数),提升模型性能,避免局部最优解。附有运行效果图预览,最终输出预测值与实际值对比,RMSE评估精度。适合研究时序数据分析与深度学习优化的开发者参考。
|
6月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本内容包含基于BiLSTM与遗传算法(GA)的算法介绍及实现。算法通过MATLAB2022a/2024b运行,核心为优化BiLSTM超参数(如学习率、神经元数量),提升预测性能。LSTM解决传统RNN梯度问题,捕捉长期依赖;BiLSTM双向处理序列,融合前文后文信息,适合全局信息任务。附完整代码(含注释)、操作视频及无水印运行效果预览,适用于股票预测等场景,精度优于单向LSTM。
|
2月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
6月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本内容展示了一种基于粒子群优化(PSO)与时间卷积神经网络(TCN)的时间序列预测方法。通过 MATLAB2022a 实现,完整程序运行无水印,核心代码附详细中文注释及操作视频。算法利用 PSO 优化 TCN 的超参数(如卷积核大小、层数等),提升非线性时间序列预测性能。TCN 结构包含因果卷积层与残差连接,结合 LSTM 构建混合模型,经多次迭代选择最优超参数,最终实现更准确可靠的预测效果,适用于金融、气象等领域。
|
3月前
|
机器学习/深度学习 数据采集 资源调度
基于长短期记忆网络定向改进预测的动态多目标进化算法(LSTM-DIP-DMOEA)求解CEC2018(DF1-DF14)研究(Matlab代码实现)
基于长短期记忆网络定向改进预测的动态多目标进化算法(LSTM-DIP-DMOEA)求解CEC2018(DF1-DF14)研究(Matlab代码实现)
110 0
|
3月前
|
机器学习/深度学习 传感器 数据采集
基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)
基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)
603 0
|
6月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB2022a/2024b开发,结合粒子群优化(PSO)算法与双向长短期记忆网络(BiLSTM),用于优化序列预测任务中的模型参数。核心代码包含详细中文注释及操作视频,涵盖遗传算法优化过程、BiLSTM网络构建、训练及预测分析。通过PSO优化BiLSTM的超参数(如学习率、隐藏层神经元数等),显著提升模型捕捉长期依赖关系和上下文信息的能力,适用于气象、交通流量等场景。附有运行效果图预览,展示适应度值、RMSE变化及预测结果对比,验证方法有效性。
|
10月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
303 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
6月前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于Matlab 2022a/2024b实现,结合灰狼优化(GWO)算法与双向长短期记忆网络(BiLSTM),用于序列预测任务。核心代码包含数据预处理、种群初始化、适应度计算及参数优化等步骤,完整版附带中文注释与操作视频。BiLSTM通过前向与后向处理捕捉序列上下文信息,GWO优化其参数以提升预测性能。效果图展示训练过程与预测结果,适用于气象、交通等领域。LSTM结构含输入门、遗忘门与输出门,解决传统RNN梯度问题,而BiLSTM进一步增强上下文理解能力。

热门文章

最新文章