返回列表

30th place solution

407. Mechanisms of Action (MoA) Prediction | lish-moa

开始: 2020-09-03 结束: 2020-11-30 药物研发 数据算法赛
第30名解决方案

第30名解决方案

作者: Sasha Turutin | 排名: 30 | 发布时间: 2020-12-01

首先,我要感谢组织者提供有趣的数据和比赛。
我不确定选择对数损失作为主要指标是否有利于追求实践目标,但对于参赛者来说,这对于多标签任务的建模非常方便 ^^
此外,非常感谢用户 @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,因为在相同的超参数下它给出了更好的结果。

最后,为我的英语感到抱歉(这不是我的母语),我在这次比赛中学到了很多。

下面是训练特征的列表。

有效的技巧:

  • 10 折交叉验证 (OOF mkf,多标签分层)
  • 对种子和分割进行装袋
  • 标签平滑
  • 预测裁剪
  • PCA
  • 伪标签
  • 分位数变换预处理
  • 带有分类嵌入的 Resnet
  • TabNet
  • 平均融合
  • 统计特征工程
  • RFE 特征选择
  • 堆叠顶部标签
  • 非评分数据预训练
  • 来自 Kmeans、GMM 和异常值检测方法的聚类

无效的技巧:

  • 在完整数据(训练 + 测试)上进行无监督拟合 -> 过拟合
  • GBM(训练时间太长)
  • Kmeans 距离
  • DBSCAN -> SVM 聚类