从零学习量化交易51循环神经网络股票预测2结果评估4

(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
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2分钟前
下一篇 1分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注