378. University of Liverpool - Ion Switching | liverpool-ion-switching
大家好,感谢 Kaggle 团队、组织者、Kaggle 社区的贡献,以及我才华横溢的队友 Giba、Ahmet、Skgone 和 Alex 的努力。与他们合作真的很愉快。
之前我分享了一篇关于我们在本次比赛中历程的帖子,包含了一些技术细节;
https://www.kaggle.com/c/liverpool-ion-switching/discussion/153688
这一次,我将简要总结我们的最终流程并分享每个步骤的代码。
这是我们进步中最重要的一步。在 Giba 亲自去除漂移和其他类型的噪声之前,我们无法使用 Chris 的数据获得可靠的 CV(交叉验证)。其他团队可能在 Chris 的数据集上建立了可靠的 CV,但在某个阶段这对我们不起作用。(感谢 Chris 在本次比赛中的慷慨分享)。在合成和嘈杂的数据集上防止过拟合有点困难,尤其是当你使用多个 OOF 进行堆叠时。Giba 分享了他的完美工作及所有解释,请查看他的笔记本了解更多详情;
https://www.kaggle.com/titericz/remove-trends-giba-explained
我们发现通过将第 5 批和第 8 批数据相加来增强生成一个新的 10 通道批次很有用,因为 10 通道批次本质上是两个 5 通道批次的和。具体来说,它是 2 个不同的(5 HMM Bs + 粉红噪声 + 白噪声)的总和。
train['group'] = np.arange(train.shape[0])//500_000
aug_df = train[train["group"] == 5].copy()
aug_df["group"] = 10
for col in ["signal", "open_channels"]:
aug_df[col] += train[train["group"] == 8][col].values
train = train.append(aug_df, sort=False).reset_index(drop=True)
我们对所有模型使用相同的验证方案,包括用于 OOF 创建的模型,即在 4k 序列上进行 Group-5Fold。这个验证方案在 Giba 的清洗数据集上运行良好。在我们不信任这个验证方案之前,我们使用 2 折 CV 来测试基于这些批次类型平均划分的不同事物;
groups = [[0, 2, 3, 4, 5], [1, 6, 7, 8, 9]]
我们尝试了 3 个 LGB、1 个 RFC、1 个 MLP、1 个 BiGRU、1 个 KNN、1 个 SVM 进行堆叠。我们使用相同的验证方案并应用上述相同的数据增强来创建 OOF。只有 3 个模型的 OOF 被添加到了 wavenet 中(点击模型名称可查看其笔记本);