(1)打开Spyder软件,在目录D:\zwPython\zwrk\1_Quant_TensorFlow,新建文件
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 17 15:22:24 2025
循环神经网络预测股票效果评价
@author: Administrator
"""
import sys, os
sys.path.append("topqt/")
import numpy as np
import pandas as pd
import tushare as ts
import plotly as py
import plotly.figure_factory as pyff
import math
import arrow
import ffn
import pypinyin
import pandas_datareader as pdr
import matplotlib.pyplot as plt
import zsys2025 # 20250213
import ztools2025 as zt
import ztools_str as zstr
import ztools_data2025 as zdat
import ztools_draw2025 as zdr
import ztools_tq2025 as ztq # 20250213
import zai_keras2025 as zks
import tensorflow as tf
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Dense, Input, Dropout
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.utils import plot_model
from tensorflow.keras.callbacks import TensorBoard
import tensorlayer as tl
#
#------------------------------------
#1
print('\n#1,set.sys')
pd.set_option('display.width', 450)
pd.set_option('display.float_format', zt.xfloat3)
#2
print('\n#2,读取数据')
#fss='data/df_rnn010.csv'
fss='tmp1/rnn001_48.csv'
df=pd.read_csv(fss)
zt.prx('df',df.tail())
#
#3
print('\n#3 acc准确度分析')
print('\nky0=10')
dacc,dfx,a10=ztq.ai_acc_xed2ext(df.y,df.y_pred,ky0=10,fgDebug=True)
print('\nky0=5')
dacc,dfx,a10=ztq.ai_acc_xed2ext(df.y,df.y_pred,ky0=5,fgDebug=True)
#4
print('\n#4 acc准确度分类分析')
x1,x2=df['y'].value_counts(),df['y_pred'].value_counts()
zt.prx('x1',x1);zt.prx('x2',x2)
#
'''
for xk in range(1,4):
print('\nxk#,',xk)
df2=df[df.y_pred==xk]
dacc,df2x,a10=ztq.ai_acc_xed2ext(df2.y,df2.y_pred,ky0=5,fgDebug=True)
'''
#
for xk in range(1,4):
print('\nxk#,',xk)
df2 = df[df.y_pred==xk]
# 调试代码,检查筛选后的数据
print(f"df2 行数: {len(df2)}")
if len(df2) == 0:
print(f"df2 为空,xk = {xk},跳过此次循环")
continue
dacc,df2x,a10 = ztq.ai_acc_xed2ext(df2.y,df2.y_pred,ky0=5,fgDebug=True)
(2)程序输出结果
runfile('D:/zwPython/zwrk/1_Quant_TensorFlow/49-RecurrentNeuralNetworkStockPredictionAnaEvaluation-2.py', wdir='D:/zwPython/zwrk/1_Quant_TensorFlow')
Reloaded modules: zsys2025, ztools2025, zsys, ztools_str, ztools, ztools_web, ztools_data, ztools_tq, zpd_talib, ztools_data2025, zpd_talib2025, ztools_draw2025, ztools_tq2025, zai_keras2025, zai_tools2025
#1,set.sys
#2,读取数据
df
open high low close ... price_next price_change ktype y_pred
94939 4.390 4.510 4.380 4.510 ... 4.580 102.921 3 1
94940 4.490 4.490 4.420 4.430 ... 4.580 102.691 3 1
94941 4.440 4.530 4.420 4.500 ... 4.580 102.461 3 1
94942 4.490 4.510 4.460 4.480 ... 4.590 102.227 3 1
94943 4.490 4.530 4.490 4.520 ... 4.590 101.774 3 1
[5 rows x 28 columns]
#3 acc准确度分析
ky0=10
ky0=10; n_df9,94944,n_dfk,14653
acc: 15.43%; MSE:2.85, MAE:1.51, RMSE:1.69, r2score:-4.45, @ky0:10.00
ky0=5
ky0=5; n_df9,94944,n_dfk,14653
acc: 15.43%; MSE:2.85, MAE:1.51, RMSE:1.69, r2score:-4.45, @ky0:5.00
#4 acc准确度分类分析
x1
3.000 64961
2.000 16967
1.000 13016
Name: y, dtype: int64
x2
1 92097
3 2847
Name: y_pred, dtype: int64
xk#, 1
df2 行数: 92097
ky0=5; n_df9,92097,n_dfk,12648
acc: 13.73%; MSE:2.91, MAE:1.55, RMSE:1.71, r2score:-4.58, @ky0:5.00
xk#, 2
df2 行数: 0
df2 为空,xk = 2,跳过此次循环
xk#, 3
df2 行数: 2847
ky0=5; n_df9,2847,n_dfk,2005
acc: 70.43%; MSE:0.68, MAE:0.43, RMSE:0.83, r2score:-0.36, @ky0:5.00
(3)程序代码注释
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 17 15:22:24 2025
循环神经网络预测股票效果评价
@author: Administrator
"""
# 导入 sys 和 os 模块
# sys 模块用于与 Python 解释器进行交互,可修改模块搜索路径等
# os 模块用于与操作系统进行交互,如文件和目录操作
import sys, os
# 将 'topqt/' 目录添加到 Python 的模块搜索路径中
# 这样在后续导入自定义模块时,Python 会去该目录下查找
sys.path.append("topqt/")
# 导入 numpy 库,用于高效的数值计算和数组操作
import numpy as np
# 导入 pandas 库,用于数据处理和分析,提供了 DataFrame 等数据结构
import pandas as pd
# 导入 tushare 库,可用于获取金融数据,如股票行情等
import tushare as ts
# 导入 plotly 库,用于创建交互式可视化图表
import plotly as py
# 导入 plotly 的 figure_factory 模块,可用于创建特定类型的图表
import plotly.figure_factory as pyff
# 导入 math 模块,提供基本的数学函数
import math
# 导入 arrow 库,用于处理日期和时间
import arrow
# 导入 ffn 库,用于金融数据分析和绩效评估
import ffn
# 导入 pypinyin 库,用于将中文转换为拼音
import pypinyin
# 导入 pandas_datareader 库,可从多种数据源读取数据
import pandas_datareader as pdr
# 导入 matplotlib.pyplot 模块,用于创建静态可视化图表
import matplotlib.pyplot as plt
# 导入自定义模块 zsys2025,可能包含系统相关的配置信息
import zsys2025 # 20250213
# 导入自定义模块 ztools2025 并别名化为 zt,可能包含通用工具函数
import ztools2025 as zt
# 导入自定义模块 ztools_str,可能包含字符串处理工具函数
import ztools_str as zstr
# 导入自定义模块 ztools_data2025 并别名化为 zdat,可能包含数据处理工具函数
import ztools_data2025 as zdat
# 导入自定义模块 ztools_draw2025 并别名化为 zdr,可能包含绘图工具函数
import ztools_draw2025 as zdr
# 导入自定义模块 ztools_tq2025 并别名化为 ztq,可能包含与 tushare 相关的工具函数
import ztools_tq2025 as ztq # 20250213
# 导入自定义模块 zai_keras2025 并别名化为 zks,可能包含与 Keras 相关的工具函数
import zai_keras2025 as zks
# 导入 tensorflow 库,用于构建和训练深度学习模型
import tensorflow as tf
# 从 tensorflow.keras.models 模块导入 Sequential 和 load_model 函数
# Sequential 用于构建顺序模型,load_model 用于加载已保存的模型
from tensorflow.keras.models import Sequential, load_model
# 从 tensorflow.keras.layers 模块导入 Dense、Input 和 Dropout 层
# Dense 是全连接层,Input 用于定义输入层,Dropout 用于防止过拟合
from tensorflow.keras.layers import Dense, Input, Dropout
# 从 tensorflow.keras.optimizers 模块导入 RMSprop 优化器,用于优化模型参数
from tensorflow.keras.optimizers import RMSprop
# 从 tensorflow.keras.utils 模块导入 plot_model 函数,用于可视化模型结构
from tensorflow.keras.utils import plot_model
# 从 tensorflow.keras.callbacks 模块导入 TensorBoard 回调函数,用于记录训练日志
from tensorflow.keras.callbacks import TensorBoard
# 导入 tensorlayer 库,是一个基于 TensorFlow 的深度学习库
import tensorlayer as tl
#
#------------------------------------
# 1. 设置系统相关参数
print('\n#1,set.sys')
# 设置 pandas 显示数据的宽度为 450 个字符,避免数据显示时因宽度不足而截断
pd.set_option('display.width', 450)
# 设置 pandas 显示浮点数的格式,使用自定义函数 zt.xfloat3 进行格式化
pd.set_option('display.float_format', zt.xfloat3)
# 2. 读取数据
print('\n#2,读取数据')
# 注释掉的文件路径,可能是之前尝试读取的文件
#fss='data/df_rnn010.csv'
# 定义要读取的 CSV 文件路径
fss='tmp1/rnn001_48.csv'
# 使用 pandas 的 read_csv 函数读取 CSV 文件,并将数据存储在 DataFrame 对象 df 中
df=pd.read_csv(fss)
# 调用自定义函数 zt.prx 打印 DataFrame 对象 df 的最后几行信息,方便查看数据情况
zt.prx('df',df.tail())
# 3. 整体准确度分析
print('\n#3 acc准确度分析')
# 输出提示信息,表示下面进行 ky0 = 10 时的准确度分析
print('\nky0=10')
# 调用自定义函数 ztq.ai_acc_xed2ext 进行准确度分析
# df.y 是真实值,df.y_pred 是预测值,ky0 = 10 是一个参数,可能与准确度计算的阈值有关
# fgDebug = True 表示开启调试模式,可能会输出更多详细信息
# 函数返回三个值:dacc(可能是准确度相关的指标)、dfx(可能是处理后的 DataFrame)、a10(可能是一个特定的统计量)
dacc,dfx,a10=ztq.ai_acc_xed2ext(df.y,df.y_pred,ky0=10,fgDebug=True)
# 输出提示信息,表示下面进行 ky0 = 5 时的准确度分析
print('\nky0=5')
# 再次调用自定义函数 ztq.ai_acc_xed2ext 进行准确度分析,将 ky0 参数改为 5
dacc,dfx,a10=ztq.ai_acc_xed2ext(df.y,df.y_pred,ky0=5,fgDebug=True)
# 4. 准确度分类分析
print('\n#4 acc准确度分类分析')
# 对 DataFrame 对象 df 中的 'y' 列和 'y_pred' 列进行值计数
# x1 存储 'y' 列中每个唯一值的出现次数
# x2 存储 'y_pred' 列中每个唯一值的出现次数
x1,x2=df['y'].value_counts(),df['y_pred'].value_counts()
# 调用自定义函数 zt.prx 分别打印 x1 和 x2 的信息,方便查看每个类别出现的频率
zt.prx('x1',x1);zt.prx('x2',x2)
# 以下代码块被注释掉,可能是之前的代码或者测试代码
'''
for xk in range(1,4):
print('\nxk#,',xk)
df2=df[df.y_pred==xk]
dacc,df2x,a10=ztq.ai_acc_xed2ext(df2.y,df2.y_pred,ky0=5,fgDebug=True)
'''
# 遍历 xk 从 1 到 3,对每个类别进行准确度分析
for xk in range(1,4):
# 输出当前处理的类别编号
print('\nxk#,',xk)
# 筛选出 DataFrame 对象 df 中 'y_pred' 列等于当前 xk 值的行,并存储在新的 DataFrame 对象 df2 中
df2 = df[df.y_pred==xk]
# 调试代码,打印筛选后 DataFrame 对象 df2 的行数,方便查看每个类别下的数据量
print(f"df2 行数: {len(df2)}")
# 如果筛选后的数据为空,输出提示信息并跳过本次循环
if len(df2) == 0:
print(f"df2 为空,xk = {xk},跳过此次循环")
continue
# 调用自定义函数 ztq.ai_acc_xed2ext 对筛选后的数据进行准确度分析
# df2.y 是筛选后数据的真实值,df2.y_pred 是筛选后数据的预测值,ky0 = 5 是准确度计算的阈值
# fgDebug = True 表示开启调试模式,可能会输出更多详细信息
dacc,df2x,a10 = ztq.ai_acc_xed2ext(df2.y,df2.y_pred,ky0=5,fgDebug=True)
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/907105
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!