407. Mechanisms of Action (MoA) Prediction | lish-moa
感谢 LISH 竞赛组织者、Kaggle 团队以及所有分享 Notebook 并参与讨论的人。
太长不看版 (TL;DR): 我们最终的提交结果是基于 MLP、TabNet 和 ResNet 模型的简单加权平均。
我们决定在完整的测试集上进行降维。这意味着当私有测试集可用时,我们必须重新训练模型,因此我们无法进行仅推理的提交。根据模型的不同,我们混合使用了 PCA、SVD 和 ICA。
我们所有的模型都针对每个目标使用了早停。其思路是分别记录每个目标的最佳 epoch。例如,下图显示了部分目标的对数损失。
如果我们对所有目标都使用同一个 epoch 的权重,我们就会导致某些目标过拟合,而另一些目标欠拟合。
我们尝试了很多交叉验证 (CV) 的变体,但最终我们选择了 MultilabelStratifiedKFold,并且没有使用 train_drug.csv。我们的 CV 与公开榜单 的对齐仍然不太稳定,很明显存在一个临界点,超过该点后 CV 的进一步提升反而会导致 LB 分数下降。@Chris Deotte 巧妙的 CV 方案 很有前景,但这并没有完全解决我们的问题。使用该智能 CV 方案得到的 LB 分数比使用 MultilabelStratifiedKFold 稍差一些,这与其他团队注意到的情况相似。
我们的最终提交是 0.5*mlp + 0.3*tabnet + 0.2*resnet 的简单加权平均。我们没有使用公开 LB 来调整这些权重,这可能有助于防止过拟合。
| 模型 | 公开榜 | 私有榜 | 运行时间 |
|---|---|---|---|
| Blend (融合) | 0.01817 | 0.01603 | 5883.6s |
| MLP | 0.01825 | 0.01613 | 816.6s |
| TabNet | 0.01828 | 0.01614 | 1619.9s |
| ResNet | 0.01859 | 0.01628 | 2562.4s |
我们的 MLP 与公开 Notebook 中的非常相似。我们发现 PReLU 激活函数的效果优于 ReLU 或 LeakyReLU。
我们使用了 @Optimo 出色的 TabNet Multitask Classifier 库 中的代码。我们只使用了该库的模型代码,而没有使用辅助函数,以便在学习率调度器、损失函数等方面拥有更大的灵活性。
我们的模型基于 @Demetry Pascal 巧妙的 2heads+deep resnets+pipeline+smoothing+transfer notebook,并将其移植到了 PyTorch。