407. Mechanisms of Action (MoA) Prediction | lish-moa
感谢我的队友 Anna,所有参赛者,Kaggle 管理团队,以及哈佛大学创新科学实验室组织了这场精彩的比赛。我想简要分享我们获得第5名的解决方案。
本次比赛最困难的问题似乎在于测试集中同时包含了“已见过的”和“未见过的”药物。这使得构建可靠的验证集变得非常困难。
在本次比赛中,主要使用了两种类型的验证策略。一种是传统的 MultilabelStratifiedKFold,另一种是感知组的 MultilabelStratifiedGroupKFold(即 Chris 的方法)。观察基于这些方案训练的模型的预测结果,MultilabelStratifiedKFold 似乎对“已见过药物”给出了更自信的预测,而 MultilabelStratifiedGroupKFold 则给出了更平衡且稳健的预测,这被认为更适合“未见过的药物”。我认为两者在不同方面都很有用。
测试集中同时观察到已见和未见过标签的设置,与 Bengali.AI 手写图形分类 比赛类似。因此,我们决定通过度量学习(L2 Softmax -> 余弦相似度)来区分“已见过”和“未见过的”药物,然后根据相似度混合基于每种验证方案训练的模型。如下图所示,这种已见/未见过的分离在某种程度上似乎是可行的。这种方法不需要伪标签或重新训练。简单的前向处理就足够了。
从比赛一开始,我就基于一种几乎等同于 Chris CV 的方法来验证我的模型。为此,我通过启发式方法重构了 drug_id,包括聚类和许多手动调整。官方 drug_id 在比赛后期才公布,但许多参赛者可能已经过拟合了。一旦任何人获得了不错的 Public LB(公开排行榜)分数,就很难怀疑这是过拟合。冲榜的诱惑和快感是如此强烈。
下表显示了同一模型在两种方法下的 CV 结果。我的方法效果几乎和 Chris CV 一样好。我在比赛最后切换到了 Chris CV,因为它的表现稍好一些。我认为 Chris CV 擅长处理具有大量观测值的 drug_id,并且与实际的划分方式相似。
| 方法 | 本地 CV | Private 排行榜 | Public 排行榜 |
|---|---|---|---|
| 重构 drug_id + 我的 CV | 0.017173034 | 0.01613 | 0.01826 |
| 官方 drug_id + Chris CV | 0.016907018 | 0.01612 | 0.01825 |
Public 排行榜: 0.01812 (第14名)
Private 排行榜: 0.01602 (第5名)