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

news2024/10/28 13:21:10

简介: 
            使用循环神经网络RNN对股价进行预测, 
            也就是搭建循环神经网络对中国平安的收盘股价进行预测
深度学习训练流程
            1.数据集导入
                   
    2.数据预处理
    3.模型训练
        模型结构要求: 
            单层简单RNN, 神经元=5, 每次使用前八个预测第九个数据 
            输出层: 因为是对股价进行拟合预测, 使用线性回归
    4.预测和评估, 并可视化结果

=============================================================== 

代码实现(人工版) 

效果预览图

# ====================================================================
# 1.导入数据集
import pandas as pd
zgpa_data=pd.read_csv(r"C:\Users\鹰\Desktop\zgpa.csv")        # 格式: r+文件地址
zgpa_data.shape
# ============================================================================
# 2.数据预处理
# 2.1.数据基本处理, 数据很完善, 不需要进行缺失值/异常值处理
# 2.2.特征工程
# 2.2.1确定特征值和目标值
price=zgpa_data.loc[:,'close']
# 2.2.2特征预处理-对数据进行归一化, 可以加快函数收敛速度
price_norm=price/max(price)
# 2.2.3对处理后的结果进行可视化, 主要是确定一下处理的怎么样, 可视化嘛, 就是方便给人看的嘛
from matplotlib import pyplot as plt
price_fig=plt.figure(figsize=(4,3))
plt.plot(price)
plt.xlabel('time')
plt.ylabel('price')
plt.title('zgpa_price')
plt.show()

# 这一步是将之前归一化之后的数据进行分段截取, 每段截取8个数
# extract_data()函数的作用就是根据输入的数据:price和截取长度time_step=8, 实现上述功能 
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:i+time_step]])
        y.append(data[i+time_step])
    # 加上这两行, 有什么区别?
    x=np.array(x)
    y=np.array(y)
    # 下面这一步给数据增加维度, 是为了让数据能够进入神经网络层, 因为simpleRNN需要接受的是三维数据
    x=x.reshape(x.shape[0], x.shape[1], 1)
    return x, y

time_step=8   # 每次截取的数据长度==8
x_all, y_all=extract_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_size=0.3,random_state=10)
print(x_train.shape, y_train.shape)

# =============================================================================
# 3.训练模型-SimpleRNN
# 选择模型框架
from keras.models import Sequential
price_model=Sequential()
# 填充框架
from keras.layers import SimpleRNN, Dense
price_model.add(SimpleRNN(units=50, input_shape=(time_step, 1), activation='relu'))
# price_model.add(SimpleRNN(units=50, input_shape=(time_step, 1), activation='relu', return_sequences=True))
# price_model.add(SimpleRNN(units=50, activation='relu'))
price_model.add(Dense(units=1, activation='linear'))
# 编译模型--主要是对模型进行的配置
price_model.compile(loss='mean_squared_error', optimizer='adam')
# 模型概述--就是可以简单查看一下模型怎么样
price_model.summary()                

# 训练模型--输入训练集特征值x, 目标值y, 每次喂给模型的样本数batch_size=30, 训练次数epochs=200
# batch_size越小, 模型泛化能力越好,但是训练起来需要的时间和算力也就更多, 
# epoch是指使用全部样本训练一次, 每个epoch中包含多个batch_size,
# 两者的关系: 设有一百样本, batch_size=20, epochs=10, 那么系统会将100样本分成五次投喂给模型, 而这, 就完成了一次epoch, 类似操作还需要重复九次
price_model.fit(x_train, y_train, batch_size=30, epochs=10)


# =======================================================================
# 4.对模型进行预测
y_train_predict=price_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, label='y_real')                # 绘制实际值
plt.plot(y_train_predict, label='y_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(r"C:\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(units=50, input_shape=(time_step, 1), activation='relu', return_sequences=True))
model.add(LSTM(units=50, activation='relu'))
model.add(Dense(units=1, activation='linear'))

model.compile(loss='mean_squared_error', optimizer='adam')
model.summary()

# 使用早停法
early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)

# 训练模型
history = model.fit(x_train, y_train, batch_size=32, epochs=200, validation_split=0.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(f'Mean Squared Error (MSE): {mse}')
print(f'Root Mean Squared Error (RMSE): {rmse}')
print(f'Mean Absolute Error (MAE): {mae}')

# 绘制结果
plt.figure(figsize=(4,3))
plt.plot(y_test_inv, label='Actual Price')
plt.plot(y_predict_inv, label='Predicted Price')
plt.title('Y_Real VS Y_Predict')
plt.xlabel('Time')
plt.ylabel('Price')
plt.legend()
plt.show()

数据集下载     

        1.获取途径一:通过tushare网站获取,

直接导入tushare模块, 调用内部的api, 但是需要注册..布拉布拉一大堆事情, 我觉得有点麻烦就没用

Tushare -财经数据接口包icon-default.png?t=O83Ahttp://tushare.org/

       2.获取途径二:github上的数据集

                https://github.com/cmiao7-illinois/stock_prediction-based-on-lstm-and-transform


        3.获取途径三:百度网盘链接

                链接:https://pan.baidu.com/s/188gbZJYJP3yG4UyJX5wAxQ 
                提取码:wnm4

吐槽

 进行模型训练时出现问题, 然后我通过AI获取到另一个模型训练过程基本相同的优秀模型

然后把这两个模型都分成三段, 分别是

1段:数据导入和数据预处理

2段:模型训练

3段:模型评估和可视化

然后, 我把自己的三段代码挨个替换优秀模型中的三段代码方式

发现

第二段代码是正常的, 也就是可以在优秀模型中正常发挥作用, 基本不影响结果

但是其他两端代码, 放进去任何一个, 都会出现问题,

这种问题是什么啊?应该怎么解决啊? 难捱呀

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2225449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

U盘恢复数据,这四款软件你必须知道!

不管是哪个行业哪个职位,数据安全都是很重要的。比如说我认识的财务姐姐,每天处理的财务报表、客户信息、合同文件等,都必须确保万无一失,尤其是各种U盘数据。为了防止数据丢失后找不到数据的情况,今天来和大家分享四款…

智能管线巡检系统:强化巡检质量,确保安全高效运维

线路巡检质量的监控是确保线路安全、稳定运行的重要环节。为了有效监控巡检质量,采用管线巡检系统是一种高效、科学的手段。以下是对如何通过管线巡检系统实现线路巡检质量监控的详细分析: 一、巡检速度监控 管线巡检系统能够实时监控巡检人员的巡检速度…

算力引领 智慧安防| Gooxi助力安防行业智慧化转型

安防行业作为AI最为合适生长的天然场域,早在国内AI市场爆发之前就提前进行了“预演”,诞生了AI四小龙。当AIGC赋能安防技术革新,安防再次与AI浪潮撞了个满怀。在这一次大模型的浪潮中,安防场上的老玩家纷纷抢滩大模型。而今&#…

Word中Normal.dotm样式模板文件

Normal.dotm文档 首先将自己电脑中C:\Users\自己电脑用户名\AppData\Roaming\Microsoft\Templates路径下的Normal.dotm文件做备份,在下载本文中的Normal.dotm文件,进行替换,重新打开word即可使用。 字体样式如下(可自行修改&#…

Redis 发布订阅 总结

前言 相关系列 《Redis & 目录》(持续更新)《Redis & 发布订阅 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 发布订阅 & 总结》(学习总结/最新最准/持续更新)《Redis &a…

git的学习之远程进行操作

1.代码托管GitHub:充当中央服务器仓库的角色 2.git远程进行操作 3.配置本地服务器的公钥 4.推送 5.git远程操作 pull .gitignore 6.给命令配置别名 git config --global alias.st status 7.标签管理 git tag -a [name] -m "XXX" [commit_id] 操作标签…

ICMP Redirect Attack Lab

本实验的网络拓扑图如下所示: Task 1: Launching ICMP Redirect Attack 在Victim主机上查看路由表,结果如下: 2.在Victim上Ping 192.168.60.60.5,结果如下: 3.在Attkaker主机上创建redirect_attack.py文件, 内容如下: 4.接下来查看tracerou…

纯GO语言开发RTSP流媒体服务器-RTSP推流直播、本地保存录像、录像回放、http-flv及hls协议分发

温馨提示:我们分享的文章是给需要的人,不需要的人请绕过,文明浏览,误恶语伤人! 前言 在软件开发中遇到使用流媒体音视频的行业比较多,如安防监控系统、无人机巡逻视频上云处理、直播平台、教育与企业培训…

C++红黑树插入操作的模拟实现

1.红黑树概念 1.1什么是红黑树 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩…

Linux 重启命令全解析:深入理解与应用指南

Linux 重启命令全解析:深入理解与应用指南 在 Linux 系统中,掌握正确的重启命令是确保系统稳定运行和进行必要维护的关键技能。本文将深入解析 Linux 中常见的重启命令,包括功能、用法、适用场景及注意事项。 一、reboot 命令 功能简介 re…

Flutter图片控件(七)

1、加载图片 import package:flutter/material.dart;void main() {runApp(const MaterialApp(home: MyHomePage(),)); }class MyHomePage extends StatelessWidget {const MyHomePage({super.key});overrideWidget build(BuildContext context) {return Scaffold(appBar: AppB…

Python:背景知识及环境安装

一、计算机的基础概念 1.1 什么是计算机? 最早我们有计算器,但是他只能完成算数运算的功能 而计算机能完成的工作有: (1)算术运算 (2)逻辑判断 (3)数据存储 &#xff08…

k8s 二进制部署安装(一)

目录 环境准备 初始化操作系统 部署docker 引擎 部署 etcd 集群 准备签发证书环境 部署 Master01 服务器相关组件 apiserver scheduler controller-manager.sh admin etcd 存储了 Kubernetes 集群的所有配置数据和状态信息,包括资源对象、集群配置、元数据…

基于SSM+小程序的旅游社交登录管理系统(旅游4)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 ​ 本旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理&a…

51单片机完全学习——DS18B20温度传感器

一、DS18B20数据手册解读 首先我们知道DS18B20使用的是单总线传输,默认情况下读出来的温度是12位的,我们这里只讨论外部电源供电这种情况。 有这张图片我们知道,12位温度的最小分辨率是10^-4次方,因此就是0.0625.我们只需要将最后…

论文阅读(二十三):Squeeze-and-Excitation Networks

文章目录 1.介绍2.原理3.代码4.SE模块的应用 论文:Squeeze-and-Excitation Networks   论文链接:Squeeze-and-Excitation Networks   代码链接:Github 1.介绍 卷积算子使网络能够在每一层的局部感受野中融合空间(spatial&…

内容安全与系统构建加速,助力解决生成式AI时代的双重挑战

内容安全与系统构建加速,助力解决生成式AI时代的双重挑战 0. 前言1. PRCV 20241.1 大会简介1.2 生成式 Al 时代的内容安全与系统构建加速 2. 生成式 AI2.1 生成模型2.2 生成模型与判别模型的区别2.3 生成模型的发展 3. GAI 内容安全3.1 GAI 时代内容安全挑战3.2 图像…

Linux 进程间通信_匿名管道

1.程间通信目的 : 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如…

Linux CentOS7下创建SFTP服务器

本文详细介绍了在Linux CentOS上部署安全文件传输协议(SFTP)服务器的全过程。SFTP基于SSH(安全壳层协议)提供文件传输服务,继承了SSH的安全特性,如数据加密、完整性验证和服务器认证等,确保数据…

信号与系统学习:周期信号的频谱

一、概念 1. 什么是频谱? 频谱描述了信号在不同频率上的能量分布对于一个周期信号,其频谱通常是离散的,由一系列离散的频率成分组成 2. 周期信号与傅里叶级数 周期信号可以用傅里叶级数展开,表示为无数个正弦和余弦&#xff0…