深度学习 交易预测 LSTM 层的神经元数量、训练轮数

news/2025/2/15 3:35:43/

以下是一个使用 Python 和 Keras 库构建 LSTM 模型进行交易预测的代码示例,同时会展示如何调整 LSTM 层的神经元数量和训练轮数,代码中还包含了不同参数下的实验对比,帮助你理解它们对模型性能的影响。

示例代码

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt# 数据加载与预处理
def load_and_preprocess_data(file_path):data = pd.read_csv(file_path)close_prices = data['Close'].values.reshape(-1, 1)scaler = MinMaxScaler(feature_range=(0, 1))scaled_close_prices = scaler.fit_transform(close_prices)return scaled_close_prices, scaler# 创建时间序列数据
def create_sequences(data, seq_length):xs, ys = [], []for i in range(len(data) - seq_length):x = data[i:i+seq_length]y = data[i+seq_length]xs.append(x)ys.append(y)return np.array(xs), np.array(ys)# 构建 LSTM 模型
def build_lstm_model(seq_length, neurons):model = Sequential()model.add(LSTM(neurons, return_sequences=True, input_shape=(seq_length, 1)))model.add(LSTM(neurons, return_sequences=False))model.add(Dense(25))model.add(Dense(1))model.compile(optimizer='adam', loss='mean_squared_error')return model# 训练和评估模型
def train_and_evaluate_model(X_train, y_train, X_test, y_test, scaler, neurons, epochs):model = build_lstm_model(X_train.shape[1], neurons)model.fit(X_train, y_train, batch_size=32, epochs=epochs, verbose=0)predictions = model.predict(X_test)predictions = scaler.inverse_transform(predictions)y_test = scaler.inverse_transform(y_test)mse = mean_squared_error(y_test, predictions)return mse, predictions# 主函数
def main():file_path = 'your_stock_data.csv'scaled_close_prices, scaler = load_and_preprocess_data(file_path)train_size = int(len(scaled_close_prices) * 0.8)train_data = scaled_close_prices[:train_size]test_data = scaled_close_prices[train_size:]seq_length = 30X_train, y_train = create_sequences(train_data, seq_length)X_test, y_test = create_sequences(test_data, seq_length)# 不同神经元数量和训练轮数的实验neuron_options = [30, 50, 70]epoch_options = [30, 50, 70]results = []for neurons in neuron_options:for epochs in epoch_options:mse, predictions = train_and_evaluate_model(X_train, y_train, X_test, y_test, scaler, neurons, epochs)results.append((neurons, epochs, mse))print(f'Neurons: {neurons}, Epochs: {epochs}, MSE: {mse}')# 可视化结果best_result = min(results, key=lambda x: x[2])best_neurons, best_epochs, _ = best_resultbest_model_mse, best_predictions = train_and_evaluate_model(X_train, y_train, X_test, y_test, scaler, best_neurons, best_epochs)plt.plot(y_test, label='Actual Prices')plt.plot(best_predictions, label='Predicted Prices')plt.xlabel('Time')plt.ylabel('Stock Price')plt.title(f'Best Model: Neurons={best_neurons}, Epochs={best_epochs}, MSE={best_model_mse:.4f}')plt.legend()plt.show()if __name__ == "__main__":main()

代码解释

  1. 数据加载与预处理
    • load_and_preprocess_data 函数用于读取 CSV 文件中的股票收盘价数据,并使用 MinMaxScaler 进行归一化处理。
  2. 创建时间序列数据
    • create_sequences 函数将数据转换为适合 LSTM 模型输入的时间序列格式。
  3. 构建 LSTM 模型
    • build_lstm_model 函数根据指定的序列长度和神经元数量构建 LSTM 模型,包含两个 LSTM 层和两个全连接层,并使用 adam 优化器和均方误差损失函数进行编译。
  4. 训练和评估模型
    • train_and_evaluate_model 函数使用指定的训练轮数训练模型,并在测试集上进行评估,返回均方误差(MSE)和预测结果。
  5. 主函数
    • main 函数中定义了不同的神经元数量和训练轮数选项,进行多次实验,并记录每次实验的 MSE。
    • 最后找出 MSE 最小的模型配置,绘制实际价格和预测价格的对比图。

注意事项

  • 请将 'your_stock_data.csv' 替换为你实际的股票数据文件路径。
  • 你可以根据需要调整 neuron_optionsepoch_options 中的参数值,进行更多不同组合的实验。
  • 实际应用中,还可以考虑使用更复杂的模型结构、添加更多特征或进行超参数调优,以提高预测性能。

http://www.ppmy.cn/news/1572135.html

相关文章

STM32、GD32驱动TM1640原理图、源码分享

一、原理图分享 二、源码分享 /************************************************* * copyright: * author:Xupeng * date:2024-07-18 * description: **************************************************/ #include "smg.h"#define DBG_TAG "smg&…

【Vue】打包vue3+vite项目发布到github page的完整过程

文章目录 第一步:打包第二步:github仓库设置第三步:安装插件gh-pages第四步:两个配置第五步:上传github其他问题1. 路由2.待补充 参考文章: 环境: vue3vite windows11(使用终端即可&…

#渗透测试#批量漏洞挖掘#Crocus系统—Download 文件读取

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

计算机网络综合实训室解决方案(2025年最新版)

一、计算机网络综合实训室概述 数字化转型的关键在于计算机网络技术的支撑,因此,当前教育教学的一大热点及社会需求,在于培养能够全面设计计算机整体系统、实施综合布线、安装网络设备并进行调试与维护的专业人才。鉴于计算机网络技术的高度…

【推荐】碰一碰发视频源码搭建,支持OEM

引言:重新定义视频分享体验 在移动优先的互联网时代,"碰一碰"交互已成为设备间快速连接的代名词。本文将突破传统文件传输思维,结合Web NFC与WebRTC技术,实现无需后端服务器的端到端视频实时传输方案。通过纯前端技术栈…

从零开始设计一个完整的网站:HTML、CSS、PHP、MySQL 和 JavaScript 实战教程

前言 本文将从实战角度出发,带你一步步设计一个完整的网站。我们将从 静态网页 开始,然后加入 动态功能(使用 PHP),连接 数据库,最后加入 JavaScript 实现交互功能。通过这个教程,你将掌握一个…

Linux ln创建、删除软链接的正确方式

在 Linux 系统中,ln 命令用于创建链接文件,链接分为软链接(符号链接)和硬链接。以下详细介绍创建和删除软链接的正确方式: 创建软链接 基本语法 ln -s [源文件或目录] [目标软链接文件或目录] -s 选项:…

解决 DeepSeek 官网服务器繁忙的实用方案

解决 DeepSeek 官网服务器繁忙的实用方案 大家在使用 DeepSeek 时,是不是经常遇到官网服务器繁忙,等半天都加载不出来的情况?别担心,今天就给大家分享一个用 DeepSeek 硅基流动 Cherry Studio 解决这个问题的实用方案&#xff…