返回列表

7th Place Solution Summary

517. Open Problems - Multimodal Single-Cell Integration | open-problems-multimodal

开始: 2022-08-15 结束: 2022-11-15 基因组学与生物信息 数据算法赛
第7名方案总结

第7名方案总结

作者: kss (l0glikelihood), NocturneBflat, museas
比赛排名: 第7名

首先,我们要感谢主办方提供了如此有趣的挑战,同时也感谢让我们有机会使用 Saturn cloud。

交叉验证(CV)方案

由于主办方最初提供了公开榜单和私有榜单划分方式的信息,我们决定利用这些信息,设计尽可能接近私有榜单测试集的本地验证方案。因此,可以说我们对公开榜单的排名并不太关注。

验证方案如下图所示(针对 citeseq 任务部分)。由于训练数据集中有三天,分割数为6;multiome 任务的方案相同,但由于天数较多,分割数为9(在最后阶段我们稍微修改了方案,使得验证集总是只包含最近的一天)。

CV Scheme

如何提交

由于训练数据集中最后一个可用日期总是包含在验证折叠中,我们无法使用这种验证方案进行传统的折叠融合。因此,当我们想要提交时,我们使用了带有打乱功能的常规 KFold 验证。

具体方法如下:所有的假设和实验,包括超参数调整,都在“真实 CV”上进行测试,之后这些模型在 KFold 上重新训练。

特征工程与降维

我们在两个任务中都使用了 PCA 进行降维。我们也尝试了自编码器,但效果略逊于 PCA。

对于 citeseq 任务,我们还以原始形式使用了“重要”特征。

此外,我们基于元数据对“重要”列进行聚合,创建了一些额外特征(例如 "mean_feature_1_by_donor")。这些特征在本地 CV 上为 GBDT 模型带来了 +0.0003 的提升。

模型(集成)

  • Citeseq 任务: 3个多层感知机 (MLP),1个 Conv1D,1个 pyBoost(最佳单模型)。
  • Multiome 任务: 1个多层感知机 (MLP),1个 TabNet,1个 pyBoost(最佳单模型)。

pyBoost 似乎是多输出任务的新 SOTA(至少在 GBDT 模型中)。它仅使用 GPU,训练速度极快,且非常易于定制。

关于模型的一些说明

  • Multiome 任务: 所有神经网络都有 23418 个输出神经元。对于 pyBoost,我们使用 PCA 将目标维度减少到 64 个分量。
  • pyBoost 在 citeseq 数据的“真实 CV”和 KFold 验证中都是最佳单模型。
  • 对于 multiome 任务,根据“真实 CV”它是最佳模型,但在 KFold 中表现最差。
  • 我们注意到,将目标分组并为每组构建单独的 pyBoost 模型大大提高了我们的本地 CV 分数。默认情况下,pyBoost 可以随机将目标分组,我们尝试基于聚类进行分组,但最终效果与随机分组几乎相同。

训练数据使用

  • Citeseq 任务: 所有可用数据。
  • Multiome 任务: 仅使用第7天的数据。

在解决 multiome 任务时,我们注意到第7天的性能显著下降(在“真实 CV”上)。我们推测原因可能是时间上的数据漂移,因此我们尝试不使用所有可用天数,而仅使用最后一个可用天数来训练模型。在本地,这使我们的分数提高了 +0.02。

然而,问题在于公开榜单中没有未见过的天数,因此仅在最后一个可用天数上训练模型严重拉低了我们的公开分数(从 0.814 降至 0.808)。尽管如此,我们决定遵循“相信你的 CV”这一信条,结果这一特定提交成为了我们在私有榜单上的最佳成绩。

我们还进行了一项关于天数相似性的研究,发现在可用的训练天数中,第3天与私有榜单的第10天最相似(第7天是第二相似的)。尽管如此,由于对于其他天数来说,最相似的天数总是时间上最接近的那一天,我们最终决定在第7天的数据上训练模型。

同比赛其他方案