kaggle竞赛宝典 | 量化竞赛第一名的网络模型

news2024/9/20 20:35:15

本文来源公众号“kaggle竞赛宝典”,仅用于学术分享,侵权删,干货满满。

原文链接:量化竞赛第一名的网络模型

1 简介

今天我们重温Jane Street 大赛第一名的网络模型。该次赛事数据集包含了一组匿名的特征,feature_{0...129},代表真实的股市数据。数据集中的每一行代表一个交易机会,你需要预测一个动作值:1表示进行交易,0表示放弃。每笔交易都有一个相关的权重和响应,它们一起代表交易的回报。日期列是一个整数,表示交易的日期,而ts_id表示时间顺序。

该赛事的第一名选手采用的是AutoEncoder+MLP的网络模型。一起回顾学习一下。

2 模型

2.1 模型结构

模型主要由三个模块组成:

  1. 加入高斯噪音的Autoencoder模块;

  2. Decoder之后数据的原始Loss;

  3. 原始数据+Encoder数据的原始问题的Loss;

2.2 相关细节

  1. 使用自编码器创建新特征,并与原始特征连接,作为下游MLP模型的输入

  2. 在每个交叉验证分割中一起训练自编码器和MLP,以防止数据泄漏

  3. 向自编码器添加目标信息(监督学习),迫使其生成更相关的特征,并为梯度的反向传播创建捷径

  4. 在编码器前添加高斯噪声层,以进行数据增强并防止过拟合

  5. 使用Swish激活函数代替ReLU,以防止“死亡神经元”并平滑梯度

  6. MLP使用批归一化和Dropout

  7. 使用3个不同的随机种子训练模型,并取平均值以减少预测方差

  8. 仅使用在最后两个交叉验证分割中训练的模型(具有不同种子),因为它们已经看到更多的数据

  9. 仅监控MLP的二元交叉熵损失,而不是整体损失,以便早停

  10. 使用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 参考文献

  1. https://www.kaggle.com/competitions/jane-street-market-prediction/discussion/224348

  2. https://www.kaggle.com/code/gogo827jz/jane-street-supervised-autoencoder-mlp

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2014年4月-2023年上市公司秩鼎ESG评级数据

2014年4月-2023年上市公司秩鼎ESG评级数据 1、时间:2014年4月-2023年11月 2、来源:秩鼎数据 3、指标:证券代码、SC、评级日期、ESG评级、ESG等级、ESG得分、E评级、E等级、E得分、S评级、S等级、S得分、G评级、G等级、G得分、总市值(亿元)、流通市值(…

企业微信聊天记录可以保存多久?员工聊天记录查看指南!合规存档,助力企业规避风险!

在数字化办公的浪潮中,企业微信已成为企业沟通协作的重要工具。然而,聊天记录的保存时长与合规性管理,成为企业不可忽视的问题。 企业微信聊天记录云端最长可保存90天,但企业可根据需求自定义设置。本文将为您详细解析企业微信聊…

Linux TCP多线程服务器

一、多线程开发 线程和进程 程序写好存储在硬盘介质里,CPU读取程序到内存 ,这个在内存中的可执行程序实例就叫进程。一个程序如果多次读取到内存中,那他们就是各自独立的进程 内存中的任何位置都有相应的地址方便访问,而在内存中…

8.23-docker基础命令学习

docker 1.docker容器 [rootdocker ~]# systemctl start docker[rootdocker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos latest 5d0da3dc9764 2 years ago 231MB​# 容器执行完就退出了​[rootdocker ~]# docker run -it …

C++20中的简写函数模板(abbreviated function template)

简写函数模板(abbreviated function template):当占位符类型(auto或concept auto)出现在函数声明或函数模板声明的参数列表中时,该声明将声明一个函数模板,并且每个占位符的一个虚构模板参数(one invented template parameter)将附加到模板参数列表。如下…

【412】【K 次乘运算后的最终数组 I】

第一次打周赛,难绷 后两题都差200个样例。 这题很简单,看题就可以 class Solution:def getFinalState(self, nums: List[int], k: int, multiplier: int) -> List[int]:nlen(nums)for i in range(k):mnmin(nums)for j in range(n):if nums[j]mn:nums…

自定义类加载器使用geotools读取高程报 ImageRead: No OperationDescriptor is registered 问题

背景 项目中使用了 自定义classLoader ,&#xff0c;然后使用下面简化后的代码读取高程数据 public class Test{public static void main(String[] args) throwS Exception{CustomClassLoader cl new CustomClassLoader();Class<?> clazz cl.loadClass(“Test”);Te…

后端代码练习5--验证码案例

我们日常生活中&#xff0c;在进行应用程序注册或者登录的时候&#xff0c;出于安全性的考虑&#xff0c;我们都会被进行一项验证的操作&#xff0c;即通过网页给我们的图片进行一些列的操作&#xff0c;最终完成对我们身份的验证并给我们这些用户返回验证码&#xff0c;让我们…

C语言-有两个磁盘文件A和B,各存放一行字母,今要求把这两个文件的信息合并(按字母顺序排列),输出到一个新文件C中去-深度代码解析

1、题目要求 有两个磁盘文件A和B&#xff0c;各存放一行字母&#xff0c;今要求把这两个文件的信息合并&#xff08;按字母顺序排列&#xff09;&#xff0c;输出到一个新文件C中去 2、准备工作 问题1&#xff1a;为什么不需要手动创建C.txt文件&#xff1f; 答&#xff1a;根…

技术分享-商城篇-订单模块-取消/收货功能(十六)

前言 再上一篇文章技术分享-商城篇-用户订单管理&#xff08;十五) 中&#xff0c;订单模块用户操作含有&#xff1a;取消订单、去支付、确认收货、删除订单、查看详情、去退款、查看物流、再次购买等业务操作&#xff0c;以上的每一个操作&#xff0c;都是对应不同的业务和状…

AudioNotes -将音频内容转 markdown

文章目录 一、关于 AudioNotes效果展示音视频识别和整理与音视频内容对话 二、使用方法1、安装 Ollama2、拉取模型3、部署服务3.1 Docker部署&#xff08;推荐&#xff09;&#x1f433;3.2 本地部署 &#x1f4e6; 一、关于 AudioNotes AudioNotes 能够快速提取音视频的内容&…

贪心处理任务(华为od机考题)

一、题目 1.原题 在某个项目中有多个任务&#xff08;用 tasks 数组表示&#xff09;需要您进行处理&#xff0c; 其中 tasks[i] [si, ei]&#xff0c; 你可以在 si < day < ei 中的任意一天处理该任务。 请返回你可以处理的最大任务数。 注&#xff1a;一天可以完成一…

硬件面试经典 100 题(81~90)题

81、请问下图电路中二极管 D1、D2 有什么作用&#xff1f; 在 Vi 输入电压接近于零时&#xff0c;D1、D2 给三极管 T1、T2 提供偏置电压&#xff0c;使 T1、T2 维持导通&#xff0c;以消除交越失真。 陈氏解释 这道题参见&#xff1a;硬件面试经典 100 题&#xff08;51~70 题…

【学习笔记】STM32F407探索者HAL库开发(三)IO分配

【学习笔记】STM32F407探索者HAL库开发&#xff08;三&#xff09;IO分配 1 STM32F407 IO资源分配表2 STM32F407ZGT6 引脚定义3 IO分配的重要性3.1 硬件设计优化3.2 软件编程3.3 系统性能提升 4 F1/F7/H7芯片的IO分配差异4.1 引脚数量和分组4.2 功能模式4.2.1 输入模式4.2.2 输…

Kubernetes 外部 etcd 集群的快速 Docker Compose 部署指南

一、背景 在高可用 Kubernetes 部署中&#xff0c;需要单独部署外部 etcd 集群&#xff0c;而不是使用 kubeadm 默认在 master 节点上部署的 etcd。以下是关于这一配置场景的详细记录。 二、etcd简介 etcd 是一个高可用的分布式键值存储系统&#xff0c;主要用于存储和管理配…

使用Qt+Visual Stuidio写一个简单的音乐播放器(1)

1.使用QMediaPlayer播放音乐 第三步:在代码头部加上: #include <QtMultimedia/QMediaPlayer> // VS向.pro文件添加代码的方式 #pragma execution_character_set("utf-8") // qt支持显示中文 QMediaPlayer类是一个高级媒体播放类。它可以用来播放歌曲、电…

leetcode 893. Groups of Special-Equivalent Strings

原题链接 You are given an array of strings of the same length words. In one move, you can swap any two even indexed characters or any two odd indexed characters of a string words[i]. Two strings words[i] and words[j] are special-equivalent if after any …

力扣: 设计链表

文章目录 需求代码结尾 需求 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则还需要属性 p…

Java 的数组详解

数组的定义 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据&#xff0c;按照一定的先后次序排列组合而成 其中&#xff0c;每一个数据称作一个数组元素&#xff0c;每个数组元素可以通过一个下标(编号、标记)来访问它&#xff0c;下标是从 0 开始的&#xf…

100套动画PPT模版分享

100套动画PPT模板 目录下载链接 目录 下载链接 「动画模板」链接&#xff1a;https://pan.quark.cn/s/73ea2523f198 点击下载