第一天:
因为有必修课考试,所以完成内容并不多,只是简单地再捋清了一下算法流程,考虑到之前提出的问题,即将当天之前的所有数据作为训练模型的训练集,再利用他们为测试集,这样得出的RMSE、MSE、MAE能不能很好地表示模型的准确性呢。所以我决定后面再做一个由部分数据训练,另一部分测试的这么一个程序。
第二天、第三天、第四天:
对于已有的程序增添功能,即在利用全部数据进行模型训练的同时,测试时对测试集和原先模型训练的训练集进行测试。若测试集也是全部数据时,就是对两个全部数据集进行训练,这样得到的结果是差异几近于无;若测试集只是抽取部分数据的话,效果时好时坏。
为了更好地探究这个问题,并实现昨天的想法:新建了一个py文件:seq2seq.py,而原先文件改名为:predict seq2seq.py。
在seq2seq中:将输入数据集按照9:1自动分为两部分
在结果绘图部分:只对close这个量进行绘制,将原始数据与模型测试的训练集和模型测试的测试集绘制在一起进行对比。
但是依旧按照原先程序中seed参数为3,epoch为10的模型进行训练得到的效果很差,所以我决定进一步调参试试看,经过不断尝试,最后选择seed参数为5,epoch为100时效果最好。(用塔塔集团数据NSE.csv进行调参测试)这样得到的数据还是要比一开始的全数据集训练,全数据集测试的效果差:
9:1训练测试:
RMSE for train-Open:1.6171016946779122
RMSE for train-High:1.1054509030037114
RMSE for train-Low:2.378579103121165
RMSE for train-Close:0.9361579826372819
RMSE for test-Open:3.0647515564334302
RMSE for test-High:2.167989754789856
RMSE for test-Low:4.714485515142172
RMSE for test-Close:2.4963169624925
全数据训练测试:
RMSE for open:2.1430452
RMSE for high:2.2565684
RMSE for low:2.4736254
RMSE for close:2.922443
****
MSE for open:4.592643
MSE for high:5.092101
MSE for low:6.1188226
MSE for close:8.540672
****
MAE for open:1.4988122
MAE for high:1.5093741
MAE for low:1.6232928
MAE for close:1.9780211
尝试成功后,利用tushare对国内数据进行测试,得到的效果如图(以浦发银行 600000.SH,2016-01-01到2021-07-07为例)
RMSE for train-open
0.044415223862185195
RMSE for train-high
0.05199306035903353
RMSE for train-low
0.051165848297021435
RMSE for train-close
0.036748884078988145
RMSE for test-open
0.03627006617415068
RMSE for test-high
0.04108826131934978
RMSE for test-low
0.05341111292596395
RMSE for test-close
0.02455024526894121
蓝色为原始数据,橙色是训练集数据,绿色为测试集数据