返回列表

14th place solution multitask LSTM - Team "no pressure"

462. Google Brain - Ventilator Pressure Prediction | ventilator-pressure-prediction

开始: 2021-09-22 结束: 2021-11-03 临床决策支持 数据算法赛
第14名方案:多任务LSTM - Team "no pressure"

第14名方案:多任务LSTM - Team "no pressure"

作者: taksai (Grandmaster) | 团队成员: tomotomo5, tommy1028, sunchine

队友 @tomotomo5 @tommy1028 @sunchine
我们的解决方案没有使用魔法,仅使用了LSTM
我们参加这次比赛时抱着“没有压力”的心态,但老实说,当最后一周由于令人难以置信的高分导致我们的排行榜排名一个个下降时,情况发生了变化。
最后几天我们为了赢得金牌承受了巨大的压力。现在我很自豪,我的团队一步步提高分数的顽强努力终于得到了回报,赢得了金牌!

无论如何,以下是我和队友们在这次比赛中所做的工作,包括许多失败的尝试。希望这能有所帮助。

预处理 (Preprocess)

  • 特征基于公共Notebook。(例如 @ZHANGXIN)
  • Robust Scaler 分位数范围=(10,90)
    我们尝试了各种缩放器,但发现 Robust Scaler 对我们的模型效果最好,就像大多数流行的Notebook中那样。然而,我们也确定,在使用默认 quantile_range (25,75) 进行缩放后,我们的一些特征范围仍在 -200 ~ +200 之间。因此,我们扩大了缩放器的 quantile_range 范围,发现 (10,90) 对我们来说效果最好。这将我们其中一位成员的模型提高了大约 0.010
  • 对 u_in 取对数
    • 我们模型的最佳分数是在预处理前使用 np.log1p(u_in) 获得的
    • 我们在每个模型中同时使用了原始 u_in 特征和对数 u_in 特征

目标 (Target)

  • 原始压力值 和 压力差
    • 这使我们的模型提高了大约 0.010
    • train['pressure_diff']=train.groupby(['breath_id'])['pressure'].diff().fillna(0)
    • train['pressure_diff2']=train.groupby(['breath_id'])['pressure_diff'].shift(-1).fillna(0)
  • 损失函数:MAE
    • huber loss, CE 以及其他损失函数对我们不起作用..

Keras

  • 更改激活函数
    • 我们在最后一层激活函数中使用了 linear 而不是 selu。
    • selu 的取值范围是 -1.75~。 -1.75 的最小值不适合用于预测压力差。
  • 其他
    • 大折数(10~16fold),4层双向LSTM。
    • 添加 CNN、transformer 没有起作用。
    • Keras 得分:CV 0.134 / Public 0.1157

Pytorch

  • 更改初始化
  • 调度器:CosineAnnealingWarmupRestarts
  • 将任务更改为预测多任务目标比 Keras 提升了更多分数。
  • 其他
    • 5层双向LSTM。
    • Pytorch 得分:CV 0.135 / Public 0.1153

后处理 (Postprocess)

  • 中值 和 取整,按需使用。

集成

  • 15个模型输出的中值:CV 0.1117 / Public 0.1103 / Private 0.1107
  • 15个模型输出的堆叠,以及8个堆叠中值:CV 0.1134 / Public 0.1100 / Private 0.1111*

效果不佳的尝试