拓冰建站拓冰建站
首页 / 资讯中心 / 正文

深度学习_循环神经网络_预测平安中国股价(文末附带数据集下载链接, 长期有效, 如果有大佬愿意帮忙, 我先在这磕一个,感谢)

简介:使用循环神经网络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段:模型评估和可视化然后, 我把自己的三段代码挨个替换优秀模型中的三段代码方式发现第二段代码是正常的, 也就是可以在优秀模型中正常发挥作用, 基本不影响结果但是其他两端代码, 放进去任何一个, 都会出现问题,这种问题是什么啊?应该怎么解决啊? 难捱呀
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门