×

Python机器学习与量化投资-5-2-交叉验证的上证指数评分(线性)

hqy hqy 发表于2025-05-01 02:32:36 浏览15 评论0百度已收录

抢沙发发表评论

运用线性回归模型对股票数据开展分析与评估。首先,程序读取 data/sh2018.csv 文件中的股票数据,对数据进行排序并处理缺失值。接着,从处理后的数据里筛选出日期大于 2018 的部分,提取开盘价、最高价、最低价和收盘价作为特征,将收盘价的下一个值作为目标变量。之后,创建线性回归模型。最后,使用 2 折交叉验证评估模型性能,输出每次交叉验证的得分以及得分的平均值。

import sys; # 将 topqt/ 路径添加到 Python 解释器的模块搜索路径中,以便后续能导入该路径下的模块 sys.path.append("topqt/") import numpy as np # 导入 numpy 库,用于数值计算 import pandas as pd # 导入 pandas 库,用于数据处理和分析 import plotly as py # 导入 plotly 库,用于数据可视化 import plotly.graph_objs as go # 导入 plotly 绘图对象模块 import plotly.figure_factory as pyff # 导入 plotly 图形工厂模块 import sklearn # 导入 sklearn 库,用于机器学习 from sklearn import datasets, linear_model # 导入 sklearn 数据集和线性模型模块 from sklearn.linear_model import LinearRegression # 导入线性回归模型 from sklearn import metrics # 导入 sklearn 评估指标模块 from sklearn.model_selection import cross_val_predict # 导入交叉验证预测函数 from sklearn.model_selection import train_test_split # 导入数据集划分函数 from sklearn.model_selection import cross_val_score # 导入交叉验证得分函数 import zsys # 导入自定义 zsys 模块 import ztools as zt # 导入自定义 ztools 模块并起别名 zt import ztools_str as zstr # 导入自定义 ztools_str 模块并起别名 zstr import ztools_web as zweb # 导入自定义 ztools_web 模块并起别名 zweb import ztools_data as zdat # 导入自定义 ztools_data 模块并起别名 zdat import ztools_draw as zdr # 导入自定义 ztools_draw 模块并起别名 zdr import ztools_ai as zai # 导入自定义 ztools_ai 模块并起别名 zai import zpd_talib as zta # 导入自定义 zpd_talib 模块并起别名 zta #1 print(#1,rd data) # 提示开始读取数据 fss=data/sh2018.csv # 定义数据文件路径 # 读取 CSV 文件,将第一列作为索引 xdf=pd.read_csv(fss,index_col=0) xdf=xdf.sort_index() # 按索引对数据进行排序 # 调用自定义函数打印数据框的基本信息 zt.prDF(xdf,xdf) #2 print(#2,xed data) # 提示开始处理数据 # 创建新列 y,其值为 close 列向下移动一行 xdf[y]=xdf[close].shift(-1) # 调用自定义函数打印处理后的数据框基本信息 zt.prDF(xdf#2.1,xdf) # 使用前向填充方法填充缺失值,并原地修改数据框 xdf.fillna(method=pad,inplace=True) # 再次调用自定义函数打印处理后的数据框基本信息 zt.prDF(xdf#2.2,xdf) #3 print(#3,cut data) # 提示开始筛选数据 # 筛选出索引大于 2018 的数据 df=xdf[xdf.index>2018] #4 print(#4,准备AI数据) # 提示开始准备人工智能分析的数据 clst=[open,high,low,close] # 定义特征列名列表 # 提取特征列的值作为特征矩阵 x=df[clst].values # 提取 y 列的值作为目标向量 y=df[y].values #5 print(#5,模型设置) # 提示开始设置模型 # 创建线性回归模型对象 mx = linear_model.LinearRegression() #6 print(#6,交叉验证) # 提示开始进行交叉验证 # 进行 2 折交叉验证,返回每次验证的得分 c10 = cross_val_score(mx,x,y, cv=2) print(cross_val_score:,c10) # 打印每次交叉验证的得分 print(mean:,np.mean(c10)) # 打印交叉验证得分的平均值 print(\nok!) # 提示程序运行结束runfile(D:/zwPython/zwrk/5_机器学习与量化/kb502_cross_val_sorce.py, wdir=D:/zwPython/zwrk/5_机器学习与量化) Reloaded modules: zsys, ztools, ztools_str, ztools_web, ztools_data, ztools_tq, zpd_talib, ztools_draw, ztools_ai #1,rd data xdf open high close low volume amount date 1994-01-03 837.70 840.65 833.90 831.66 101005600 1048326000 1994-01-04 835.97 836.97 832.69 829.89 65274300 692748000 1994-01-05 829.30 847.05 846.98 823.10 89412100 975053000 1994-01-06 850.78 869.33 869.33 850.78 184511700 1970032000 1994-01-07 875.18 883.99 879.64 873.01 168688400 1752262000 1994-01-10 891.99 900.30 900.30 889.73 187595100 1896704000 1994-01-11 903.54 907.09 891.79 884.00 136850000 1590901000 1994-01-12 891.83 900.23 888.04 885.88 127429900 1306063000 1994-01-13 889.02 899.14 897.46 888.80 80792100 838602000 1994-01-14 900.13 900.99 849.23 842.62 242925400 2505558000 open high close low volume amount date 2018-05-11 3179.80 3180.76 3163.26 3162.21 13065974900 167364290366 2018-05-14 3167.04 3183.82 3174.03 3163.48 12932735300 172410691054 2018-05-15 3180.42 3192.81 3192.12 3164.52 12454905100 162990790010 2018-05-16 3180.23 3191.95 3169.56 3166.81 13052496800 174590979834 2018-05-17 3170.01 3172.77 3154.28 3148.62 11399556700 150598842185 2018-05-18 3151.08 3193.45 3193.30 3144.78 13651691800 168038057477 2018-05-21 3206.18 3219.74 3213.84 3203.34 16445941300 202663464515 2018-05-22 3211.25 3214.59 3214.35 3192.23 14429268400 185721667752 2018-05-23 3205.44 3205.44 3168.96 3168.96 15780764800 199358101015 2018-05-24 3167.94 3173.53 3154.65 3152.07 12408580000 160658185502 len-DF: 5931 #2,xed data xdf#2.1 open high close low volume amount y date 1994-01-03 837.70 840.65 833.90 831.66 101005600 1048326000 832.69 1994-01-04 835.97 836.97 832.69 829.89 65274300 692748000 846.98 1994-01-05 829.30 847.05 846.98 823.10 89412100 975053000 869.33 1994-01-06 850.78 869.33 869.33 850.78 184511700 1970032000 879.64 1994-01-07 875.18 883.99 879.64 873.01 168688400 1752262000 900.30 1994-01-10 891.99 900.30 900.30 889.73 187595100 1896704000 891.79 1994-01-11 903.54 907.09 891.79 884.00 136850000 1590901000 888.04 1994-01-12 891.83 900.23 888.04 885.88 127429900 1306063000 897.46 1994-01-13 889.02 899.14 897.46 888.80 80792100 838602000 849.23 1994-01-14 900.13 900.99 849.23 842.62 242925400 2505558000 859.28 open high close ... volume amount y date ... 2018-05-11 3179.80 3180.76 3163.26 ... 13065974900 167364290366 3174.03 2018-05-14 3167.04 3183.82 3174.03 ... 12932735300 172410691054 3192.12 2018-05-15 3180.42 3192.81 3192.12 ... 12454905100 162990790010 3169.56 2018-05-16 3180.23 3191.95 3169.56 ... 13052496800 174590979834 3154.28 2018-05-17 3170.01 3172.77 3154.28 ... 11399556700 150598842185 3193.30 2018-05-18 3151.08 3193.45 3193.30 ... 13651691800 168038057477 3213.84 2018-05-21 3206.18 3219.74 3213.84 ... 16445941300 202663464515 3214.35 2018-05-22 3211.25 3214.59 3214.35 ... 14429268400 185721667752 3168.96 2018-05-23 3205.44 3205.44 3168.96 ... 15780764800 199358101015 3154.65 2018-05-24 3167.94 3173.53 3154.65 ... 12408580000 160658185502 NaN [10 rows x 7 columns] len-DF: 5931 xdf#2.2 open high close low volume amount y date 1994-01-03 837.70 840.65 833.90 831.66 101005600 1048326000 832.69 1994-01-04 835.97 836.97 832.69 829.89 65274300 692748000 846.98 1994-01-05 829.30 847.05 846.98 823.10 89412100 975053000 869.33 1994-01-06 850.78 869.33 869.33 850.78 184511700 1970032000 879.64 1994-01-07 875.18 883.99 879.64 873.01 168688400 1752262000 900.30 1994-01-10 891.99 900.30 900.30 889.73 187595100 1896704000 891.79 1994-01-11 903.54 907.09 891.79 884.00 136850000 1590901000 888.04 1994-01-12 891.83 900.23 888.04 885.88 127429900 1306063000 897.46 1994-01-13 889.02 899.14 897.46 888.80 80792100 838602000 849.23 1994-01-14 900.13 900.99 849.23 842.62 242925400 2505558000 859.28 open high close ... volume amount y date ... 2018-05-11 3179.80 3180.76 3163.26 ... 13065974900 167364290366 3174.03 2018-05-14 3167.04 3183.82 3174.03 ... 12932735300 172410691054 3192.12 2018-05-15 3180.42 3192.81 3192.12 ... 12454905100 162990790010 3169.56 2018-05-16 3180.23 3191.95 3169.56 ... 13052496800 174590979834 3154.28 2018-05-17 3170.01 3172.77 3154.28 ... 11399556700 150598842185 3193.30 2018-05-18 3151.08 3193.45 3193.30 ... 13651691800 168038057477 3213.84 2018-05-21 3206.18 3219.74 3213.84 ... 16445941300 202663464515 3214.35 2018-05-22 3211.25 3214.59 3214.35 ... 14429268400 185721667752 3168.96 2018-05-23 3205.44 3205.44 3168.96 ... 15780764800 199358101015 3154.65 2018-05-24 3167.94 3173.53 3154.65 ... 12408580000 160658185502 3154.65 [10 rows x 7 columns] len-DF: 5931 #3,cut data #4,准备AI数据 #5,模型设置 #6,交叉验证 cross_val_score: [0.68804092 0.50176344] mean: 0.5949021788403093 ok!