本文主要是介绍kaggle竞赛宝典 | 量化竞赛第一名的网络模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文来源公众号“kaggle竞赛宝典”,仅用于学术分享,侵权删,干货满满。
原文链接:量化竞赛第一名的网络模型
1 简介
今天我们重温Jane Street 大赛第一名的网络模型。该次赛事数据集包含了一组匿名的特征,feature_{0...129},代表真实的股市数据。数据集中的每一行代表一个交易机会,你需要预测一个动作值:1表示进行交易,0表示放弃。每笔交易都有一个相关的权重和响应,它们一起代表交易的回报。日期列是一个整数,表示交易的日期,而ts_id表示时间顺序。
该赛事的第一名选手采用的是AutoEncoder+MLP的网络模型。一起回顾学习一下。
2 模型
2.1 模型结构
模型主要由三个模块组成:
-
加入高斯噪音的Autoencoder模块;
-
Decoder之后数据的原始Loss;
-
原始数据+Encoder数据的原始问题的Loss;
2.2 相关细节
-
使用自编码器创建新特征,并与原始特征连接,作为下游MLP模型的输入
-
在每个交叉验证分割中一起训练自编码器和MLP,以防止数据泄漏
-
向自编码器添加目标信息(监督学习),迫使其生成更相关的特征,并为梯度的反向传播创建捷径
-
在编码器前添加高斯噪声层,以进行数据增强并防止过拟合
-
使用Swish激活函数代替ReLU,以防止“死亡神经元”并平滑梯度
-
MLP使用批归一化和Dropout
-
使用3个不同的随机种子训练模型,并取平均值以减少预测方差
-
仅使用在最后两个交叉验证分割中训练的模型(具有不同种子),因为它们已经看到更多的数据
-
仅监控MLP的二元交叉熵损失,而不是整体损失,以便早停
-
使用Hyperopt找到最佳超参数集
3 核心代码
def create_ae_mlp(num_columns, num_labels, hidden_units, dropout_rates, ls = 1e-2, lr = 1e-3):inp = tf.keras.layers.Input(shape = (num_columns, ))x0 = tf.keras.layers.BatchNormalization()(inp)encoder = tf.keras.layers.GaussianNoise(dropout_rates[0])(x0)encoder = tf.keras.layers.Dense(hidden_units[0])(encoder)encoder = tf.keras.layers.BatchNormalization()(encoder)encoder = tf.keras.layers.Activation('swish')(encoder)decoder = tf.keras.layers.Dropout(dropout_rates[1])(encoder)decoder = tf.keras.layers.Dense(num_columns, name = 'decoder')(decoder)x_ae = tf.keras.layers.Dense(hidden_units[1])(decoder)x_ae = tf.keras.layers.BatchNormalization()(x_ae)x_ae = tf.keras.layers.Activation('swish')(x_ae)x_ae = tf.keras.layers.Dropout(dropout_rates[2])(x_ae)out_ae = tf.keras.layers.Dense(num_labels, activation = 'sigmoid', name = 'ae_action')(x_ae)x = tf.keras.layers.Concatenate()([x0, encoder])x = tf.keras.layers.BatchNormalization()(x)x = tf.keras.layers.Dropout(dropout_rates[3])(x)for i in range(2, len(hidden_units)):x = tf.keras.layers.Dense(hidden_units[i])(x)x = tf.keras.layers.BatchNormalization()(x)x = tf.keras.layers.Activation('swish')(x)x = tf.keras.layers.Dropout(dropout_rates[i + 2])(x)out = tf.keras.layers.Dense(num_labels, activation = 'sigmoid', name = 'action')(x)model = tf.keras.models.Model(inputs = inp, outputs = [decoder, out_ae, out])model.compile(optimizer = tf.keras.optimizers.Adam(learning_rate = lr),loss = {'decoder': tf.keras.losses.MeanSquaredError(), 'ae_action': tf.keras.losses.BinaryCrossentropy(label_smoothing = ls),'action': tf.keras.losses.BinaryCrossentropy(label_smoothing = ls), },metrics = {'decoder': tf.keras.metrics.MeanAbsoluteError(name = 'MAE'), 'ae_action': tf.keras.metrics.AUC(name = 'AUC'), 'action': tf.keras.metrics.AUC(name = 'AUC'), }, )return model
4 参考文献
-
https://www.kaggle.com/competitions/jane-street-market-prediction/discussion/224348
-
https://www.kaggle.com/code/gogo827jz/jane-street-supervised-autoencoder-mlp
THE END !
文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。
这篇关于kaggle竞赛宝典 | 量化竞赛第一名的网络模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!