407. Mechanisms of Action (MoA) Prediction | lish-moa
首先,我要感谢组织者提供有趣的数据和比赛。
我不确定选择对数损失作为主要指标是否有利于追求实践目标,但对于参赛者来说,这对于多标签任务的建模非常方便 ^^
此外,非常感谢用户 @gogo827jz、@tolgadincer 和 @namanj27。非常感谢你们的讨论,NJ7 的 Pytorch 入门代码简直是一块瑰宝。
就我个人而言,这是我在 Kaggle 比赛中的最好成绩,所以我对此感到非常高兴。
解决方案相对简单,基于 4 个模型的平均融合:
1) 浅层 MLP (多层感知器)
https://www.kaggle.com/alturutin/moa-mlp
2) 类似 "Resnet" 的多头神经网络,带有聚类嵌入
https://www.kaggle.com/alturutin/moa-resnet
3) TabNet,超参数与公共笔记本几乎相似
https://www.kaggle.com/alturutin/moa-tabnet
4) 浅层 MLP,在非评分数据上进行预训练,并微调以通过 GELU 激活最大化 CV
https://www.kaggle.com/alturutin/moa-mlp-gelu
*) 集成笔记本:
https://www.kaggle.com/alturutin/moa-inference
*) 可视化、EDA 笔记本:
https://www.kaggle.com/alturutin/moa-t-test-outliers-segmentation-interactions
大部分代码封装在数据集脚本中。
训练 MLP 和 Resnet 使用 OneCycleLR 调度器,TabNet 使用 ReduceLROnplateu。
训练了 2 种类型的模型:一种基于训练数据的 CV,因为组织者写道 Private 数据是随机的;另一种是基于 drug_id 的 CV,以防万一。
预处理与公共笔记本类似:分位数变换 -> 特征选择、PCA、特征统计、聚类。
我想与其他工作的主要区别可能是在 MLP 置换重要性分数上使用了 RFE(递归特征消除)。这对 CV 有很大的提升。
此外,我使用预测偏差作为模型微调的指标:例如,如果训练先验均值 = 0.0037,我会尝试让预测均值 > 0.0037 以避免过拟合,因为模型倾向于过拟合到 0。
这个问题可以使用正则化来解决,例如标签平滑,但我认为估计值不是很简洁,而且有点碰运气 :)
伪标签也起作用了,并提供了小幅提升,使用 lr=1e-5 和 SGD 优化器。
后处理只是将预测值裁剪到区间 [1e-5; 1 - 1e-5]
Pytorch 优于 Tensorflow,因为在相同的超参数下它给出了更好的结果。
最后,为我的英语感到抱歉(这不是我的母语),我在这次比赛中学到了很多。
下面是训练特征的列表。