深度学习_循环神经网络_预测平安中国股价(文末附带数据集下载链接, 长期有效, 如果有大佬愿意帮忙, 我先在这磕一个,感谢) 简介:使用循环神经网络RNN对股价进行预测,也就是搭建循环神经网络对中国平安的收盘股价进行预测深度学习训练流程1.数据集导入2.数据预处理3.模型训练模型结构要求:单层简单RNN, 神经元5, 每次使用前八个预测第九个数据输出层: 因为是对股价进行拟合预测, 使用线性回归4.预测和评估, 并可视化结果代码实现(人工版)效果预览图# # 1.导入数据集 import pandas as pd zgpa_datapd.read_csv(rC:\Users\鹰\Desktop\zgpa.csv) # 格式: r文件地址 zgpa_data.shape # # 2.数据预处理 # 2.1.数据基本处理, 数据很完善, 不需要进行缺失值/异常值处理 # 2.2.特征工程 # 2.2.1确定特征值和目标值 pricezgpa_data.loc[:,close] # 2.2.2特征预处理-对数据进行归一化, 可以加快函数收敛速度 price_normprice/max(price) # 2.2.3对处理后的结果进行可视化, 主要是确定一下处理的怎么样, 可视化嘛, 就是方便给人看的嘛 from matplotlib import pyplot as plt price_figplt.figure(figsize(4,3)) plt.plot(price) plt.xlabel(time) plt.ylabel(price) plt.title(zgpa_price) plt.show() # 这一步是将之前归一化之后的数据进行分段截取, 每段截取8个数 # extract_data()函数的作用就是根据输入的数据:price和截取长度time_step8, 实现上述功能 import numpy as np # 在这里导入numpy的作用是调用numpy来将数据转化为数组格式 def extract_data(data, time_step): x[] y[] for i in range(len(data)-time_step): x.append([a for a in data[i:itime_step]]) y.append(data[itime_step]) # 加上这两行, 有什么区别? xnp.array(x) ynp.array(y) # 下面这一步给数据增加维度, 是为了让数据能够进入神经网络层, 因为simpleRNN需要接受的是三维数据 xx.reshape(x.shape[0], x.shape[1], 1) return x, y time_step8 # 每次截取的数据长度8 x_all, y_allextract_data(price_norm, time_step) # 将处理好的输入数据进行数据分割 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test train_test_split(x_all, y_all, test_size0.3,random_state10) print(x_train.shape, y_train.shape) # # 3.训练模型-SimpleRNN # 选择模型框架 from keras.models import Sequential price_modelSequential() # 填充框架 from keras.layers import SimpleRNN, Dense price_model.add(SimpleRNN(units50, input_shape(time_step, 1), activationrelu)) # price_model.add(SimpleRNN(units50, input_shape(time_step, 1), activationrelu, return_sequencesTrue)) # price_model.add(SimpleRNN(units50, activationrelu)) price_model.add(Dense(units1, activationlinear)) # 编译模型--主要是对模型进行的配置 price_model.compile(lossmean_squared_error, optimizeradam) # 模型概述--就是可以简单查看一下模型怎么样 price_model.summary() # 训练模型--输入训练集特征值x, 目标值y, 每次喂给模型的样本数batch_size30, 训练次数epochs200 # batch_size越小, 模型泛化能力越好,但是训练起来需要的时间和算力也就更多, # epoch是指使用全部样本训练一次, 每个epoch中包含多个batch_size, # 两者的关系: 设有一百样本, batch_size20, epochs10, 那么系统会将100样本分成五次投喂给模型, 而这, 就完成了一次epoch, 类似操作还需要重复九次 price_model.fit(x_train, y_train, batch_size30, epochs10) # # 4.对模型进行预测 y_train_predictprice_model.predict(x_train)*max(price) y[i*max(price) for i in y_train] # print(len(y_predict),len(y), y_predict, y) # 对预测情况进行数据可视化: import matplotlib.pyplot as plt fig_contrast plt.figure(figsize(4,3)) # 增大图形大小以便更好比较 plt.plot(y_train, labely_real) # 绘制实际值 plt.plot(y_train_predict, labely_predict) # 绘制预测值 plt.title(Y_Real VS Y_Predict) plt.xlabel(Time) plt.ylabel(Price) plt.legend() # 添加图例 plt.show()代码实现(AI版)效果预览:import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense from tensorflow.keras.callbacks import EarlyStopping from sklearn.metrics import mean_squared_error, mean_absolute_error # 读取数据 zgpa_data pd.read_csv(rC:\Users\鹰\Desktop\zgpa.csv) # 选择特征 price zgpa_data.loc[:, close] # 特征预处理-对数据进行归一化 scaler MinMaxScaler(feature_range(0, 1)) price_norm scaler.fit_transform(price.values.reshape(-1, 1)).flatten() # 对处理后的结果进行可视化 plt.figure(figsize(12, 6)) plt.plot(price) plt.xlabel(time) plt.ylabel(price) plt.title(zgpa_price) plt.show() # 数据分段截取 def extract_data(data, time_step): x [] y [] for i in range(len(data) - time_step): x.append([a for a in data[i:i time_step]]) y.append(data[i time_step]) x np.array(x) y np.array(y) # 增加维度, 是为了让数据能够进入神经网络层, 因为LSTM需要接受的是三维数据 x x.reshape(x.shape[0], x.shape[1], 1) return x, y time_step 8 # 每次截取的数据长度8 x, y extract_data(price_norm, time_step) # 划分训练集和测试集 split int(0.8 * len(x)) x_train, x_test x[:split], x[split:] y_train, y_test y[:split], y[split:] # 构建LSTM模型 model Sequential() model.add(LSTM(units50, input_shape(time_step, 1), activationrelu, return_sequencesTrue)) model.add(LSTM(units50, activationrelu)) model.add(Dense(units1, activationlinear)) model.compile(lossmean_squared_error, optimizeradam) model.summary() # 使用早停法 early_stopping EarlyStopping(monitorval_loss, patience10, restore_best_weightsTrue) # 训练模型 history model.fit(x_train, y_train, batch_size32, epochs200, validation_split0.2, callbacks[early_stopping]) # 预测 y_predict model.predict(x_test) # 反归一化 y_test_inv scaler.inverse_transform(y_test.reshape(-1, 1)).flatten() y_predict_inv scaler.inverse_transform(y_predict).flatten() # 评估 mse mean_squared_error(y_test_inv, y_predict_inv) rmse np.sqrt(mse) mae mean_absolute_error(y_test_inv, y_predict_inv) print(fMean Squared Error (MSE): {mse}) print(fRoot Mean Squared Error (RMSE): {rmse}) print(fMean Absolute Error (MAE): {mae}) # 绘制结果 plt.figure(figsize(4,3)) plt.plot(y_test_inv, labelActual Price) plt.plot(y_predict_inv, labelPredicted Price) plt.title(Y_Real VS Y_Predict) plt.xlabel(Time) plt.ylabel(Price) plt.legend() plt.show()数据集下载1.获取途径一:通过tushare网站获取,直接导入tushare模块, 调用内部的api, 但是需要注册..布拉布拉一大堆事情, 我觉得有点麻烦就没用Tushare -财经数据接口包http://tushare.org/2.获取途径二:github上的数据集https://github.com/cmiao7-illinois/stock_prediction-based-on-lstm-and-transform3.获取途径三:百度网盘链接链接https://pan.baidu.com/s/188gbZJYJP3yG4UyJX5wAxQ提取码wnm4吐槽进行模型训练时出现问题, 然后我通过AI获取到另一个模型训练过程基本相同的优秀模型然后把这两个模型都分成三段, 分别是1段:数据导入和数据预处理2段:模型训练3段:模型评估和可视化然后, 我把自己的三段代码挨个替换优秀模型中的三段代码方式发现第二段代码是正常的, 也就是可以在优秀模型中正常发挥作用, 基本不影响结果但是其他两端代码, 放进去任何一个, 都会出现问题,这种问题是什么啊?应该怎么解决啊? 难捱呀

相关新闻

最新新闻

操作系统核心原理与进程内存管理详解

操作系统核心原理与进程内存管理详解

1. 操作系统基础概念解析操作系统(Operating System)作为计算机系统的核心软件,扮演着硬件与应用程序之间的桥梁角色。简单来说,它就像一位经验丰富的管家,负责协调计算机的所有资源和工作流程。现代操作系统通常包含四…

2026/9/7 22:44:13
清除缓存需谨慎:Selenium、Win11临时目录与sessionStorage清理实战

清除缓存需谨慎:Selenium、Win11临时目录与sessionStorage清理实战

说个真实经历。前几天一个同事慌慌张张跑过来,说生产环境的页面突然白屏了,他在控制台试了一圈,最后干脆一键清了浏览器缓存。结果问题没解决,反而把另一个同事本地调试用的登录态也给带崩了。这个场景大家应该都不陌生——“清除…

2026/9/7 22:44:13
低代码平台二次开发实战:从技术路径到企业个性化需求落地

低代码平台二次开发实战:从技术路径到企业个性化需求落地

低代码平台最近几年在企业里真是火得不行,但我接触过的不少团队,包括我们自己在内,最开始都被"拖拖拽拽就能开发系统"这句话给带偏了。真正落到企业个性化需求上,尤其是要对接老系统、复杂流程和特殊业务规则时&#xf…

2026/9/7 22:44:13
Visual Studio中配置Qt开发环境:从插件安装到打包发布全攻略

Visual Studio中配置Qt开发环境:从插件安装到打包发布全攻略

做 Qt 开发的朋友,十有八九是从 Qt Creator 开始的,界面简洁、一键构建、自带设计器,新手入门确实友好。可一旦进了项目组,或者开始做稍微复杂一点的桌面工具,往往会收到一个要求:把这个 Qt 工程放到 Visua…

2026/9/7 22:44:13
VSCode C++编译卡顿优化实战

VSCode C++编译卡顿优化实战

1. 问题现象与背景分析最近在VSCode中开发C项目时,发现一个奇怪现象:每次点击编译运行按钮后,程序总要卡顿5-10秒才会真正开始编译。作为每天要编译上百次的重度用户,这个延迟实在难以忍受。经过一周的排查和测试,终于…

2026/9/7 22:44:13
CSS文本处理全攻略:从基础样式到炫酷动效

CSS文本处理全攻略:从基础样式到炫酷动效

1. 先别小看文本相关的那一堆 CSS 属性1.1 为什么样式处理绕不开 CSS Text做前端这几年,我最大的一个感受是:页面里真正占面积的往往不是图片和视频,而是文本。无论是博客正文、后台表格、按钮文字,还是弹窗提示,任何一…

2026/9/7 22:39:13