参考视频: https://www.bilibili.com/video/BV16A41157LW?p=52
下图是使用rnn预测价的曲线,红线是真实价格 蓝色是预测价格。

这张图说明了什么呢? 说明实际价格和预测价格相差10%吧(10%你懂的)
我知道你想说,他们趋势差不多呀?最开始我也以为趋势一样的话我可以利用趋势赚钱呀!!!
后来看了代码才发现,他是用1-60天的数据预测第61天的数据,2到61天真实数据 预测第62天的数据,
然后排列起来的!预测曲线上的任何两个点没有
参看视频而来的代码如下:

# -*- coding: utf-8 -*-
import datetimeimport numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Dropout, Dense, SimpleRNN
import matplotlib.pyplot as plt
import os
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error, mean_absolute_error
import math# 归一化
sc = MinMaxScaler(feature_range=(0, 1))  # 定义归一化:归一化到(0,1)之间def get_stock_data():# 没有进行归一化# 获取原始股票数据maotai = pd.read_csv('./data/stock/SH600519.csv')  # 读取股票文件# 前(2426-300=2126)天的开盘价作为训练集,表格从0开始计数,   2:3 是提取[2:3)列,前闭后开,即提取出C列开盘价training_set = maotai.iloc[0:2426 - 300, 2:3].values# # 后300天的开盘价作为测试集test_set = maotai.iloc[2426 - 300:, 2:3].values# 求得训练集的最大值,最小值这些训练集固有的属性,并在训练集上进行归一化# training_set_scaled 归一化的训练集training_set_scaled = sc.fit_transform(training_set)# 归一化的测试集test_set_scaled = sc.transform(test_set)  # 利用训练集的属性对测试集进行归一化x_train = []y_train = []# 训练数据# 利用for循环 连续60天作为输入特征 第61天作为输出特征for i in range(60, len(training_set_scaled)):x_train.append(training_set_scaled[i - 60:i, 0])y_train.append(training_set_scaled[i, 0])# 对训练集进行打乱np.random.seed(7)np.random.shuffle(x_train)np.random.seed(7)np.random.shuffle(y_train)# 将训练集由list格式变为array格式x_train = np.array(x_train)y_train = np.array(y_train)# 使x_train符合RNN输入要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]。# 送入样本数: x_train.shape[0]即2066组数据;# 循环核时间展开步数: 输入60个开盘价,# 每个时间步输入特征个数:  每个时间步送入的特征是某一天的开盘价,只有1个数据,故为1x_train = np.reshape(x_train, (x_train.shape[0], 60, 1))# 测试数据x_test = []y_test = []for i in range(60, len(test_set_scaled)):x_test.append(test_set_scaled[i - 60:i, 0])y_test.append(test_set_scaled[i, 0])# 测试集变array并reshape为符合RNN输入要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]x_test = np.array(x_test)y_test = np.array(y_test)# 使x_test符合RNN输入要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]。x_test = np.reshape(x_test, (x_test.shape[0], 60, 1))return (x_train, y_train), (x_test, y_test)def load_local_model(model_path):if os.path.exists(model_path + '/saved_model.pb'):print('-------------load the model-----------------')print(datetime.datetime.now())local_model = tf.keras.models.load_model(model_path)else:local_model = tf.keras.Sequential([SimpleRNN(80, return_sequences=True),Dropout(0.2),SimpleRNN(100),Dropout(0.2),Dense(1)])local_model.compile(optimizer=tf.keras.optimizers.Adam(0.001),loss='mean_squared_error')  # 损失函数用均方误差# 该应用只观测loss数值,不观测准确率,所以删去metrics选项,一会在每个epoch迭代显示时只显示loss值return local_modeldef show_train_line(history):loss = history.history['loss']val_loss = history.history['val_loss']plt.plot(loss, label='Training Loss')plt.plot(val_loss, label='Validation Loss')plt.title('Training and Validation Loss')plt.legend()plt.show()def stock_predict(model, x_test, y_test):# 测试集输入模型进行预测predicted_stock_price = model.predict(x_test)print(predicted_stock_price)# 对预测数据还原---从(0,1)反归一化到原始范围predicted_stock_price = sc.inverse_transform(predicted_stock_price)# 对真实数据还原---从(0,1)反归一化到原始范围real_stock_price = sc.inverse_transform(np.reshape(y_test, (y_test.shape[0], 1)))# 画出真实数据和预测数据的对比曲线plt.plot(real_stock_price, color='red', label='MaoTai Stock Price')plt.plot(predicted_stock_price, color='blue', label='Predicted MaoTai Stock Price')plt.title('MaoTai Stock Price Prediction')plt.xlabel('Time')plt.ylabel('MaoTai Stock Price')plt.legend()plt.show()##########evaluate############### calculate MSE 均方误差 ---> E[(预测值-真实值)^2] (预测值减真实值求平方后求均值)mse = mean_squared_error(predicted_stock_price, real_stock_price)# calculate RMSE 均方根误差--->sqrt[MSE]    (对均方误差开方)rmse = math.sqrt(mean_squared_error(predicted_stock_price, real_stock_price))# calculate MAE 平均绝对误差----->E[|预测值-真实值|](预测值减真实值求绝对值后求均值)mae = mean_absolute_error(predicted_stock_price, real_stock_price)print('均方误差: %.6f' % mse)print('均方根误差: %.6f' % rmse)print('平均绝对误差: %.6f' % mae)if __name__ == '__main__':(x_train, y_train), (x_test, y_test) = get_stock_data()model_path = "./data/model/stock/rnn2"model = load_local_model(model_path)history = model.fit(x_train, y_train, batch_size=32, epochs=100, validation_data=(x_test, y_test),validation_freq=1)show_train_line(history)model.summary()model.save(model_path, save_format="tf")stock_predict(model, x_test, y_test)print(datetime.datetime.now())

RNN实现股票预测(别当真)相关推荐

  1. 深度学习RNN实现股票预测实战(附数据、代码)

    背景知识 最近再看一些量化交易相关的材料,偶然在网上看到了一个关于用RNN实现股票预测的文章,出于好奇心把文章中介绍的代码在本地跑了一遍,发现可以work.于是就花了两个晚上的时间学习了下代码,顺便把 ...

  2. 一文详解 RNN 及股票预测实战(Python)!

    作者 | 泳鱼 来源 | 算法进阶 循环神经网络(RNN)是基于序列数据(如语言.语音.时间序列)的递归性质而设计的,是一种反馈类型的神经网络,其结构包含环和自重复,因此被称为"循环&quo ...

  3. 【深度学习】一文详解RNN及股票预测实战(Python)!

    循环神经网络(RNN)是基于序列数据(如语言.语音.时间序列)的递归性质而设计的,是一种反馈类型的神经网络,其结构包含环和自重复,因此被称为"循环".它专门用于处理序列数据,如逐字 ...

  4. 一文详解RNN及股票预测实战(Python)

    循环神经网络(RNN)是基于序列数据(如语言.语音.时间序列)的递归性质而设计的,是一种反馈类型的神经网络,其结构包含环和自重复,因此被称为"循环".它专门用于处理序列数据,如逐字 ...

  5. 【深度学习21天学习挑战赛】4、初尝循环神经网络(RNN)——股票预测

    ​ 活动地址:CSDN21天学习挑战赛 本文为

  6. 基于RNN的短期股票预测

    1.数据集来源 本文数据集是通过python中tushare模块下载的股票日k线数据,本次数据只用来了其中的开盘价格  tushare模块简介 导入tushare import tushare as ...

  7. Python实现LSTM股票预测阶段心得笔记

    前言 尝试阶段,本科课设,简易实现,应付期末,还在探索,欢迎交流 实现框架 TensorFlow 实验数据 来自老师给的CSV文件,共3000多行,每行包含字段如下: avg_price close ...

  8. MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 摘要 近些年,随着计算机技术的不断发展,神 ...

  9. 深度学习 Day 4——利用RNN玩转股票预测

    深度学习 Day 4--利用RNN玩转股票预测 文章目录 深度学习 Day 4--利用RNN玩转股票预测 一.前言 二.准备工作 1.我的环境 2.设置GPU 3.加载数据 三.数据预处理 1.归一化 ...

最新文章

  1. 图片上传之FileAPI与NodeJs
  2. java 文件读写demo
  3. 2020-11-06 Python OpenCV给证件照换底色
  4. android消息响应实验报告,android实验一实验报告-20210401011015.docx-原创力文档
  5. DM8168 TILER(3)
  6. Android开发之多点触摸(Multitouch)
  7. android ListView和GridView拖拽移位具体实现及拓展
  8. VB为MSHFlexGrid添加表格编辑功能
  9. 采用Mono进行移动开发图书推荐
  10. c 提示错误expected) before ; token_NLP.TM[33] | 纠错:pycorrector的错误检测
  11. 数据库系统概论--课后习题
  12. C++制作植物大战僵尸
  13. 高一物理必修第二册公式整理
  14. 阿里云商标注册怎么样?附上申请步骤流程
  15. 熊猫分发_与熊猫度假
  16. 云服务器和真实服务器,个人网站主机选择原则 看配置也要看是不是有助于优化...
  17. Hibernate第七篇【对象状态、一级缓存】
  18. UML在项目实施中的使用心得(详细设计阶段)
  19. 【锐捷无线】AC集群配置
  20. Canvas绘制八卦图

热门文章

  1. 基于STM32的智能篮球测温记分记时系统
  2. 转:创业之路“一生悬命”---只有偏执狂才能生存
  3. delphi透明panel组件或者制作方法
  4. 智能世界2030八大展望
  5. Exchange Server分层通讯簿 (HAB) 和 地址簿策略 (ABP)
  6. 查看联通GPON/4+1+WiFi(2.4G)光猫管理员密码的一种思路
  7. C++多线程学习06 利用RAII
  8. 【学术期刊】2023CCF推荐的A,B,C类英文科技期刊目录最新发布
  9. 天猫精灵 python 控制_(二 -3-1) 天猫精灵接入Home Assistant-自动发现Mqtt设备--灯系列 实战...
  10. 2.2. Concepts