407. Mechanisms of Action (MoA) Prediction | lish-moa
恭喜获胜者们!
以下是我的方法:
作为任何 Kaggle 比赛最重要的部分,即寻找一个好的交叉验证框架,在这次比赛中简直是一场噩梦。我最初使用了 10 折交叉验证,但它对公开排行榜的泛化能力很差,于是我切换到了 多标签分层 10 折交叉验证。由于对 LB 的泛化能力依然较弱,我决定只保留那些能同时改善我的 CV 和 LB 分数的改动。我认为这是本次比赛的关键。我也尝试过 Chris Deotte 的 CV 策略,但发现它并不比我原来的 CV 泛化得更好,所以我坚持使用了多标签分层 10 折交叉验证。
以下是我最终集成中使用的模型:
n_shared = 1 和 n_independent = 1。同时切换到 OneCycleLR 调度器并减少权重衰减也很重要。有几个要素至关重要。我在所有模型中都使用了这些超参数:
没有什么花哨的,只是加权平均。
最佳权重:
0.5 * MLPs + 0.1 * ResNet + 0.4 * TabNet
CV (不包括使用新 CV 框架训练的 MLP):0.01556 // LB:0.01821
我们知道有些药物同时出现在训练集和测试集中。此外,在给定 drug_id 后,我们发现按频率计算有 8 种药物占主导地位。所以我想我们可以做一些聚类,找到接近这 8 种药物形成的聚类的测试药物。我首先训练了一个 t-SNE 模型,将这 8 种药物 + 公开测试集的基因+细胞特征空间降维到 2 维。然后,在绘图时,我注意到这 8 种药物中有 5 种具有清晰、分离的聚类。因此,对于接近这 5 种药物聚类中心(在 2 维空间中,使用 L2 距离)的测试数据点,我将我集成模型当前的预测与这 5 种药物的标签进行了混合。令人惊讶的是,这帮助我的公开 LB 从 0.01821 提升到了 0.01819,这在私有 LB 上分别对应 0.01611 和 0.01609。我甚至没有检查这对 CV 有多少帮助。为了保险起见,我只在两个最终提交中的一个使用了这种聚类方法。