Python 股指期货高频数据机器学习预测( 四 )


注:MN=20的同样模型RMSE最好达到0.00148 。
参数调整
我没有进行大规模的网格搜索以确定最好的超参数 , 我主要调整了网络的规模 。基本想法是先选择一个较大的网络 , 训练至过拟合 , 判断其有足够拟合数据的能力 , 然后减小网络规模或进行正则化 , 消除过拟合以保留足够的泛化能力 。
大网络(units = 256):

Python  股指期货高频数据机器学习预测

文章插图
中网络(units = 128):
小网络(units = 64):
在实验中发现 , 三个网络均会产生过拟合的问题 。但是很明显小网络的拟合能力不足(在更大的RSME开始出现过拟合) , 而大网络的拟合能力极其严重 。于是我选择了中网络规模的网络——大网络+50% 。
卷积神经网络
采取这个模型的主要原因是卷积神经网络模型可以通过共享(1,)卷积核减少参数 , 并将一组中每条数据进行同样地处理 。
卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成 , 同时也包括关联权重和池化层( layer) 。这一结构使得卷积神经网络能够利用输入数据的二维结构 。与其他深度学习结构相比 , 卷积神经网络在图像和语音识别方面能够给出更好的结果 。这一模型也可以使用反向传播算法进行训练 。相比较其他深度、前馈神经网络 , 卷积神经网络需要考量的参数更少 , 使之成为一种颇具吸引力的深度学习结构 。
模型实现
利用Keras框架 , 实现卷积神经网络模型 。具体结构为两层卷积网络和三层Dense层网络 。其中两层卷积网络分别为1 ? 7卷积核和10 ? 1卷积核 。
model = Sequential()model.add(Conv2D(input_shape=(10,7,1),filters = 256, kernel_size = (1,7), strides=(1, 1), padding='valid',activation='relu'))model.add(Dropout(0.5))model.add(Conv2D(filters = 256, kernel_size = (10,1), strides=(1, 1), padding='valid',activation='relu'))model.add(Dropout(0.5))model.add(Flatten())model.add(Dense(512,kernel_initializer="glorot_normal",activation='relu'))model.add(Dropout(0.5))model.add(Dense(256,kernel_initializer="glorot_normal",activation='relu'))model.add(Dropout(0.5))model.add(Dense(1,kernel_initializer="uniform",activation='linear'))model.compile(loss='mean_squared_error', optimizer='Adam')
全链接的神经网络模型
神经网络模型的主要优点是具有极强的近似能力:模型可以以任意精度拟合一切连续函数 。同时 , 进行这个模型的尝试 , 也可以判断卷积神经网络是否比朴素的全链接神经网络模型更好 。
人工神经网络(英语: , ANN) , 简称神经网络(  , NN)或类神经网络 , 在机器学习和认知科学领域 , 是一种模仿生物神经网络(动物的中枢神经系统 , 特别是大脑)的结构和功能的数学模型或计算模型 , 用于对函数进行估计或近似 。神经网络由大量的人工神经元联结进行计算 。大多数情况下人工神经网络能在外界信息的基础上改变内部结构 , 是一种自适应系统 , 通俗的讲就是具备学习功能 。现代神经网络是一种非线性统计性数据建模工具 。
模型实现
model = Sequential()model.add(Flatten(input_shape=(10,7,1)))model.add(Dense(1024,kernel_initializer="glorot_normal",activation='relu'))model.add(Dropout(0.5))model.add(Dense(512,kernel_initializer="glorot_normal",activation='relu'))model.add(Dropout(0.5))model.add(Dense(256,kernel_initializer="glorot_normal",activation='relu'))model.add(Dropout(0.5))model.add(Dense(1,kernel_initializer="uniform",activation='linear'))model.compile(loss='mean_squared_error', optimizer='Adam')