深度学习21天——循环神经网络(RNN)实现股票预测 |(第9天)

目录

一、前言

1.1 循环神经网络(RNN)

1.2 模块

1.2.1 数据加载

1.2.2 import sklearn

1.2.3 import pandas

二、其他

2.1 归一化

2.2 模型构建

2.3 评估

 活动地址:CSDN21天学习挑战赛

学习:深度学习100例-循环神经网络(RNN)实现股票预测 | 第9天_K同学啊的博客-CSDN博客

一、前言

1.1 循环神经网络(RNN)

       简而言之,循环神经网络带有上一次网络输出的“记忆”,即 当前网络的隐藏层的输入不仅和它的输入层有关,还和上一网络隐藏层的输出有关

也可参考:深度学习之RNN(循环神经网络)_笨拙的石头的博客-CSDN博客_rnn

1.2 模块

1.2.1 数据加载

import os,math
from tensorflow.keras.layers import Dropout, Dense, SimpleRNN
from sklearn.preprocessing   import MinMaxScaler
from sklearn                 import metrics
import numpy             as np
import pandas            as pd
import tensorflow        as tf
import matplotlib.pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

是为了解决 matplotlib 的如坐标轴中文出现乱码问题,若还出现乱码。则需要在中文字符前加上i,如:plt.xlabel(u"这是x轴")

1.2.2 import sklearn

参考:非常详细的sklearn介绍_机器学习算法那些事的博客-CSDN博客_sklearn

Sklearn (全称 Scikit-Learn) 是基于 Python 语言的机器学习工具。它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上

在 Sklearn 里面有六大任务模块:分别是分类、回归、聚类、降维、模型选择和预处理

preprocessing:预处理

1.2.3 import pandas

参考:Pandas入门详细教程_Python数据之道的博客-CSDN博客

总结了这67个pandas函数,完美解决数据处理,拿来即用!_数据分析与统计学之美的博客-CSDN博客

pandas,python+data+analysis的组合缩写,是python中基于numpy和matplotlib的第三方数据分析库,与后两者共同构成了python数据分析的基础工具包,享有数分三剑客之名

data = pd.read_csv('./datasets/SH600519.csv')  # 读取股票文件

data
"""
前(2426-300=2126)天的开盘价作为训练集,表格从0开始计数,2:3 是提取[2:3)列,前闭后开,故提取出C列开盘价
后300天的开盘价作为测试集
"""
training_set = data.iloc[0:2426 - 300, 2:3].values  
test_set = data.iloc[2426 - 300:, 2:3].values  

data.iloc [0:2426 - 300, 2:3].values:获取(2426-300)行,第2列数据的值(values)

二、其他

2.1 归一化

sc           = MinMaxScaler(feature_range=(0, 1)) # 初始化一个MinMaxScaler对象
training_set = sc.fit_transform(training_set)     # 先拟合,再转换成标准化
test_set     = sc.transform(test_set) 

sc = MinMaxScaler(feature_range=(0, 1)):将数据映射到[0, 1]中,此即 归一化

scaler = MinMaxScaler()自动归一化

也可以映射到其他区间 scaler2 = MinMaxScaler(feature_range=[1,2])
一定要先 fit_transform 再 transform

参考:【机器学习】数据归一化——MinMaxScaler理解_GentleCP的博客-CSDN博客_minmaxscaler

Python:sklearn数据预处理中fit(),transform()与fit_transform()的区别_健康平安的活着的博客-CSDN博客_sc.transform

2.2 模型构建

model = tf.keras.Sequential([
    SimpleRNN(100, return_sequences=True), #布尔值。是返回输出序列中的最后一个输出,还是全部序列。
    Dropout(0.1),                         #防止过拟合
    SimpleRNN(100),
    Dropout(0.1),
    Dense(1)
])

return_sequences=False,意思是RNN只输出最后一个状态向量,把之前的状态向量全都扔掉

Dropout(0.1):是为了防止过拟合,通过随即丢失节点来防止过拟合,在训练过程中,一些层的输出被随机忽略或“丢弃”,这种效果使原本的图层看起来像具有不同节点数,并且与前一个图层的连接关系也发生了变化。实际上,在训练期间对图层的每次更新都会对设置图层的不同“视图”执行。0.1是失活概率,即指定图层输出单元被丢弃的概率,若无法确定,可以从0.1到1尝试,增量为0.1

RNN模型与NLP应用笔记(3):Simple RNN模型详解及完整代码实现_番茄炒狼桃的博客-CSDN博客

深度学习基础之Dropout_Wang_AI的博客-CSDN博客

2.3 评估

"""
MSE  :均方误差    ----->  预测值减真实值求平方后求均值
RMSE :均方根误差  ----->  对均方误差开方
MAE  :平均绝对误差----->  预测值减真实值求绝对值后求均值
R2   :决定系数,可以简单理解为反映模型拟合优度的重要的统计量

详细介绍可以参考文章:https://blog.csdn.net/qq_38251616/article/details/107997435
"""
MSE   = metrics.mean_squared_error(predicted_stock_price, real_stock_price)
RMSE  = metrics.mean_squared_error(predicted_stock_price, real_stock_price)**0.5
MAE   = metrics.mean_absolute_error(predicted_stock_price, real_stock_price)
R2    = metrics.r2_score(predicted_stock_price, real_stock_price)

print('均方误差: %.5f' % MSE)
print('均方根误差: %.5f' % RMSE)
print('平均绝对误差: %.5f' % MAE)
print('R2: %.5f' % R2)

metrics:评价指标函数

Sklearn.metrics函数_*Snowgrass*的博客-CSDN博客_sklearn.metrics

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清园暖歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值