(1)打开Spyder软件,在目录D:\zwPython\zwrk\1_Quant_TensorFlow,新建文件
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 17 19:54:17 2025
循环神经网络预测股票2效果评价
@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_rnn020.csv'
#fss='tmp1/rnn001_48.csv'
fss='tmp1/rnn002_50.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)
print('\nky0=2')
dacc,dfx,a10=ztq.ai_acc_xed2ext(df.y,df.y_pred,ky0=0.01,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)
(2)程序输出结果
runfile('D:/zwPython/zwrk/1_Quant_TensorFlow/51-RecurrentNeuralNetworkStockPrediction2AnaEvaluation-2.py.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 3
94940 4.490 4.490 4.420 4.430 ... 4.580 102.691 3 3
94941 4.440 4.530 4.420 4.500 ... 4.580 102.461 3 3
94942 4.490 4.510 4.460 4.480 ... 4.590 102.227 3 3
94943 4.490 4.530 4.490 4.520 ... 4.590 101.774 3 3
[5 rows x 28 columns]
#3 acc准确度分析
ky0=10
ky0=10; n_df9,94944,n_dfk,62859
acc: 66.21%; MSE:0.80, MAE:0.49, RMSE:0.89, r2score:-0.52, @ky0:10.00
ky0=5
ky0=5; n_df9,94944,n_dfk,62859
acc: 66.21%; MSE:0.80, MAE:0.49, RMSE:0.89, r2score:-0.52, @ky0:5.00
ky0=2
ky0=0.01; n_df9,94944,n_dfk,62859
acc: 66.21%; MSE:0.80, MAE:0.49, RMSE:0.89, r2score:-0.52, @ky0:0.01
#4 acc准确度分类分析
x1
3.000 64961
2.000 16967
1.000 13016
Name: y, dtype: int64
x2
3 90955
1 3109
2 880
Name: y_pred, dtype: int64
xk#, 1
ky0=5; n_df9,3109,n_dfk,472
acc: 15.18%; MSE:2.86, MAE:1.52, RMSE:1.69, r2score:-4.17, @ky0:5.00
xk#, 2
ky0=5; n_df9,880,n_dfk,127
acc: 14.43%; MSE:0.86, MAE:0.86, RMSE:0.93, r2score:-0.52, @ky0:5.00
xk#, 3
ky0=5; n_df9,90955,n_dfk,62260
acc: 68.45%; MSE:0.72, MAE:0.45, RMSE:0.85, r2score:-0.39, @ky0:5.00
(3)程序代码注释
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 17 19:54:17 2025
循环神经网络预测股票效果评价
@author: Administrator
"""
# 导入 sys 模块,用于操作 Python 解释器的系统相关功能
import sys
# 导入 os 模块,提供与操作系统进行交互的功能,如文件和目录操作
import os
# 将 "topqt/" 目录添加到 Python 的模块搜索路径中
# 这样后续可以导入该目录下的自定义模块
sys.path.append("topqt/")
# 导入 numpy 库,用于高效的数值计算和数组操作
import numpy as np
# 导入 pandas 库,用于数据处理和分析,处理表格数据非常方便
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
import ztools_data2025 as zdat
# 导入自定义绘图工具模块 ztools_draw2025
import ztools_draw2025 as zdr
# 导入自定义 tushare 相关工具模块 ztools_tq2025
import ztools_tq2025 as ztq # 20250213
# 导入自定义 keras 相关工具模块 zai_keras2025
import zai_keras2025 as zks
# 导入 TensorFlow 库,用于构建和训练深度学习模型
import tensorflow as tf
# 从 tensorflow.keras 中导入 Sequential 模型,用于构建顺序模型
from tensorflow.keras.models import Sequential, load_model
# 从 tensorflow.keras 中导入 Dense 层(全连接层)、Input 层(输入层)和 Dropout 层(防止过拟合)
from tensorflow.keras.layers import Dense, Input, Dropout
# 从 tensorflow.keras 中导入 RMSprop 优化器,用于优化模型参数
from tensorflow.keras.optimizers import RMSprop
# 从 tensorflow.keras 中导入 plot_model 函数,用于可视化模型结构
from tensorflow.keras.utils import plot_model
# 从 tensorflow.keras 中导入 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_rnn020.csv'
#fss='tmp1/rnn001_48.csv'
# 定义要读取的 CSV 文件路径
fss = 'tmp1/rnn002_50.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准确度分析')
print('\nky0=10')
# 调用自定义 tushare 工具模块 ztq 的 ai_acc_xed2ext 函数计算准确率并进行详细分析
# 参数 df.y 是真实标签列
# 参数 df.y_pred 是预测标签列
# 参数 ky0=10 是一个阈值参数,具体含义取决于 ai_acc_xed2ext 函数的实现
# 参数 fgDebug=True 表示开启调试模式
dacc, dfx, a10 = ztq.ai_acc_xed2ext(df.y, df.y_pred, ky0=10, fgDebug=True)
print('\nky0=5')
# 再次调用 ai_acc_xed2ext 函数,将阈值参数 ky0 改为 5
dacc, dfx, a10 = ztq.ai_acc_xed2ext(df.y, df.y_pred, ky0=5, fgDebug=True)
print('\nky0=2')
# 再次调用 ai_acc_xed2ext 函数,将阈值参数 ky0 改为 0.01
dacc, dfx, a10 = ztq.ai_acc_xed2ext(df.y, df.y_pred, ky0=0.01, fgDebug=True)
#4
print('\n#4 acc准确度分类分析')
# 分别统计真实标签列和预测标签列中每个唯一值的出现次数
x1, x2 = df['y'].value_counts(), df['y_pred'].value_counts()
# 调用自定义工具模块 zt 的 prx 函数,分别打印真实标签和预测标签的统计信息
zt.prx('x1', x1); zt.prx('x2', x2)
#
# 遍历 1 到 3 的整数
for xk in range(1, 4):
print('\nxk#,', xk)
# 筛选出预测标签等于 xk 的数据,存储在新的 DataFrame 对象 df2 中
df2 = df[df.y_pred == xk]
# 调用 ai_acc_xed2ext 函数,计算筛选后数据的准确率,阈值参数 ky0 为 5,开启调试模式
dacc, df2x, a10 = ztq.ai_acc_xed2ext(df2.y, df2.y_pred, ky0=5, fgDebug=True)
'''
# 以下是一段被注释掉的代码
# 遍历 1 到 3 的整数
for xk in range(1, 4):
print('\nxk#,', xk)
# 筛选出预测标签等于 xk 的数据,存储在新的 DataFrame 对象 df2 中
df2 = df[df.y_pred == xk]
# 调试代码,打印筛选后数据的行数
print(f"df2 行数: {len(df2)}")
# 如果筛选后的数据为空,打印提示信息并跳过本次循环
if len(df2) == 0:
print(f"df2 为空,xk = {xk},跳过此次循环")
continue
# 调用 ai_acc_xed2ext 函数,计算筛选后数据的准确率,阈值参数 ky0 为 5,开启调试模式
dacc, df2x, a10 = ztq.ai_acc_xed2ext(df2.y, df2.y_pred, ky0=5, fgDebug=True)
'''
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/907104
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!