返回列表

[6th private - 3rd public] Summary of our solution

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

开始: 2022-08-15 结束: 2022-11-15 基因组学与生物信息 数据算法赛
[第6名 Private - 第3名 Public] 我们的解决方案总结

[第6名 Private - 第3名 Public] 我们的解决方案总结

作者: minhtu.mt.mt, Duc Nguyen, Minh-Nguyen Vuong-Le
比赛: Open Problems – Multimodal Single-Cell Integration
排名: Private 第6名 / Public 第3名

首先,感谢 Kaggle 团队和主办方提供这个尖端技术数据集并主办这项伟大的挑战赛。我在比赛中学到了很多。非常感谢我的队友 @mathormad@nguyenvlm 这些日子的辛勤付出。这是我们获得 LB 第3名和 Private 第6名的方案总结。

本地交叉验证(适用于 Cite 和 Multiome 任务)

我们使用了 分层5折交叉验证,按 day/donor/celltype 进行分层。我们没有使用 GroupKFold,以避免在 Public 榜上过拟合,而且 Private 数据集的 day 与训练数据集相差较“远”,因此按 day 进行 CV 分割有点冒险(我们尝试过,但 CV 和 LB 都下降了)。我们认为,这是我们在 Public 和 Private 排行榜上排名稳定的关键。我们在 CV 中表现最好的提交在 Public 和 Private 排行榜上也是最好的。

特征工程

  • 特征选择: 删除按元数据分组后全为0的列 --> 删除了约 4,500 个特征。
  • 降维: 我们使用不同的方法来增加最终集成的多样性:240 个成分的 SVD/quantiledPCA 和去噪自编码器(256 个潜在维度)。对于 SVD,增加 n_iter 参数使 CV 略微提高了 2e-4(但运行时间更长,我们设置为 50 次迭代,sklearn 库默认仅为 5 次)。去噪自编码器帮助我们提高了 CV 1e-3(与 SVD/PCA 相比)。
  • 特征重要性:
    • 使用来自此讨论的名称匹配:链接
    • 使用 XGB 特征重要性进行搜索:对于 Cite,我们为每个目标拟合多个 XGB(完整的 22k 特征),然后选择每个目标的前 5 个重要特征。总共为我们的模型获得了约 500 个重要特征。
  • XGB 的 TargetEncoder: 我们对每个目标的 cell_type 应用目标编码(每个 cell_type 将由一个 140 维向量表示)。

特征工程

  • 特征选择: 删除与目标不相关的 chY 特征。我们还删除了按元数据分组后全为0的列 --> 删除了约 500 个特征。
  • 降维: 我们使用 256 个成分的 SVD,拟合 200 次迭代。

训练过程

  • 使用自定义损失函数(加权相关系数和 MSE 损失)。
  • 使用 c-mixup 增加 Tabnet 的多样性。
  • 在训练 MLP、去噪自编码器、Tabnet 和 1D-CNN 时使用 SWA(随机权重平均)。
  • 使用具有高学习率 (1e-2) 的 Adam 优化器。
  • 对于 Multiome,XGB 使用目标的 PCA 作为标签进行训练。

外部数据

对于 Cite 任务,我们将上述整个训练过程应用于原始计数数据集,然后与原始数据集进行集成。这显著提升了 1e-3 的性能。

对于 Multiome 任务,我们没有使用原始计数数据集,因为它缺少某些行,我们无法匹配原始数据和原始计数之间的 OOF,因此没有 CV 分数来验证。我认为这应该可行,但我们没有足够的时间重新匹配 OOF。

堆叠特征 & 伪标签

我们将 1 个模型的预测与当前特征连接起来,作为另一个模型的输入(例如,使用 xgb 的输出作为 MLP 的输入,反之亦然),这将单个模型的性能提高了约 5e-4。

我们也使用了伪标签(提升不大,约 2-3e-4)。

后处理

  • (Cite) 在取平均值之前,对每一折的输出应用标准缩放器(axis 1)。
  • (Multiome) 有些目标
同比赛其他方案