返回列表

29th Place Solution and Initial Solution

586. Child Mind Institute - Detect Sleep States | child-mind-institute-detect-sleep-states

开始: 2023-09-05 结束: 2023-12-05 健康管理与公共卫生 数据算法赛
第29名解决方案与初始方案

第29名解决方案与初始方案

比赛排名: 第29名
作者: Maruichi01 (Kaggle Master)
发布时间: 2023年12月7日

最终解决方案概述

模型架构(来自tubo的GitHub仓库):

  • 2DCNN特征提取器 → Unet → Unet解码器
  • LSTM特征提取器 → 1DCNN → LSTM解码器

输入特征:

  • enmo、anglez、anglez_diff、小时、工作日和一个噪声标志
    • 如果在同一series_id内,5分钟时间范围内出现相同的(enmo + anglez)值,则标记为噪声
    • EDA分析表明,节假日前一天通常表现出更晚的入睡时间,因此加入了工作日特征和节假日特征
  • 使用了5760和11520步的输入长度,基于集成模型和输入步长对的四种模型

目标尺寸:

  • 目标尺寸与输入尺寸相同

训练目标:

  • 使用高斯软标签的事件(2个通道)
  • 睡眠标志(1个通道)

推理过程:

  • 通过滑动input_step/4的方式创建数据块
    • 例如,在5760模型中,数据块从0、1440、2880等步长开始
  • 预测所有数据块并按步长进行平均
  • 在基于CNN的模型中,边缘预测会被裁剪掉12.5%

后处理:

  • 仅使用事件预测(不使用睡眠标志)
  • 使用SciPy信号的find_peaks函数,并根据预测分数对检测到的信号附近步长进行加权平均
    • 例如,如果候选步长为5000,则计算步长4998-5002的加权平均值

最终方案只是对tubo方法的微小修改,因此让我分享一下我的初始方案。(我在这方法上花费了大部分比赛时间……)

初始方案 (LB 0.677):

基于两阶段模型:

  • 第一阶段:通过二元分类进行块检测
    • 将数据集分割成1小时的数据块,使用弱标签来识别有用的片段。如果数据块内发生事件,则添加标签1
  • 第二阶段:L1回归
    • 精确定位第一阶段候选块内的事件位置,然后进行后处理

挑战与学习要点:

作为神经网络的新手,我的方法缺少某些元素:

  • 随机数据加载器:不知道如何实现随机块数据加载器。每个epoch都从相同位置开始,导致过拟合并缺乏鲁棒性
  • 模型探索:我使用了一个非常基础的模型(单个MLP、注意力层、LSTM和头部)。探索更复杂的模型(如图腾的工作所示)将会更有帮助

总结:

这次比赛是一次非常棒的学习经历。感谢Kaggle提供这个机会,也感谢所有参与者们的贡献和分享的见解。

同比赛其他方案