返回列表

#1 LB Solution

484. Tabular Playground Series - Apr 2022 | tabular-playground-series-apr-2022

开始: 2022-04-01 结束: 2022-04-30 基因组学与生物信息 数据算法赛
#1 LB 解决方案

#1 LB 解决方案

作者:Dave E
发布时间:2022-05-01

感谢 Kaggle 持续举办这些比赛,提供资源以及向其他 Kaggle 用户学习好主意的机会。我从大家在 Tabular 系列比赛中分享的内容中学到了很多。

思路

该解决方案的主要思想(去噪自动编码器)都包含在前 3 场 Playground 比赛的以下讨论主题中。

以下内容也很相关(来自非 Playground 比赛):

我不打算重新描述这个概念,因为 @springmanndaniel 在上面提到的 1 月比赛的帖子及其链接的笔记本中提供了关于去噪自动编码器(DAE)概念的精彩笔记和可视化。如果你想要 Pytorch 中“噪声”代码的实际示例,可以查看 @ryanzhang 在 2 月比赛中的 Github 链接帖子,我也有一个将代码迁移到 3 月比赛的“入门”笔记本。

这里的数据有点不同,因为每个样本是具有多个传感器的序列,因此模型结构和噪声代码需要调整,但这与训练自动编码器以识别输入中何处添加了“交换噪声”(使用训练和测试数据)是相同的概念,以便模型学习输入数据中的关系。该模型各层的输出随后可用作特征,输入第二个神经网络以预测实际比赛目标。

DAE 设计 / 训练

由于这一切都在 Kaggle GPU 的时间配额内,探索自动编码器不同设置的时间有限。以下是一些对我似乎有效的方法,但根据具体的模型和训练设计等,其他人可能会发现不同且更好的结果。

  • 2 层 LSTM 似乎工作良好 - 我没有测试更多 LSTM 层。
  • 噪声“交换”是在样本之间(例如 Seq1-Sensor00-Step02 和 Seq2-Sensor00-Step02)或同一样本和传感器的不同时间步之间(例如将 Seq1-Sensor00-Step00 与 Seq1-Sensor00-Step50 交换)。
  • 相当高的交换噪声水平(例如 50%)似乎效果不佳,至少在我测试的 epoch 数量内是这样。最佳结果是在 <30% 的噪声下获得的。
  • 自动编码器中只有某些层似乎有助于预测目标的第二步。有些层似乎使结果变差。
  • 自动编码器似乎没有通过任何额外的特征工程得到改进 - 我只使用了原始传感器数据(缩放后)。我确实尝试添加主题“计数”和主题嵌入,但是基于我有时间运行的 2 个单独实验,这些都没有带来改进。
  • 增加 DAE LSTM 的大小改善了结果,但在训练时间方面成本很高,所以我只能达到一定程度。
  • 我基于 DAE 的不同检查点测试了预测模型的 CV(1 折),以估计合理的 DAE epoch 数。更多的 epoch 可能仍然会带来小的增量收益,但必须在增量大小与训练时间以及探索其他改进的可能性之间取得平衡。
  • 如果第二个模型(预测比赛目标)同时提供原始(缩放后的)传感器数据以及 DAE 特征,性能会更好。

模型融合

最终的融合是各种模型和运行结果的组合,虽然使用 ElasticNet 获得模型权重进行最终预测,但许多输入被赋予 0 权重,主要贡献者是 DAE 运行、一些 TPU 运行和 LGBM 模型。

  • 4 次主要 DAE 运行(Pytorch / GPU)
  • Tensorflow (TPU) 使用基础数据 + 特征工程(平移 + 滚动平均)
  • Tensorflow (
同比赛其他方案