399. Cornell Birdcall Identification | birdsong-recognition
首先,我要真诚地感谢 @stefankahl、@tomdenton、@holgerklinck 以及 Kaggle 团队成员主办这次比赛。我在解决一些具有挑战性的机器学习问题并思考数据的生成过程时获得了很多乐趣。还要非常感谢 @hengck23 积极分享了许多深刻的见解。这对我构思一些好的想法帮助很大,也让我确信我走在正确的方向上。
继最近的两个比赛:PANDA 挑战赛和 GWD 挑战赛之后,这次比赛也主要关于域迁移和噪声标签。
这两个挑战性话题的结合使得这次比赛极其困难,我们在如何制定稳定的验证方案上遇到了很多麻烦。老实说,与 @cpmpml 的预期相反,由于训练数据集的标签包含大量噪声,我找不到任何好的本地验证方案。相信 LB 也不是一个很好的策略,因为公共 LB 只占 27%,而且我们不知道测试集是如何划分的。相反,我采取了 PANDA 竞赛选手的策略——忽略 CV,关注公共 LB,并相信方法论。
虽然作为数据科学竞赛这次比赛很难,但它实际上非常接近现实环境,充满了我们在将数据科学应用于现实世界问题时经常面临的问题。特别是域迁移和噪声标签的组合(我认为)经常发生在我们使用来自用户生成内容(UGC)网络服务(如 Xeno Canto、YouTube、Twitter)的数据来训练机器学习算法时。因此,我认为我的解决方案不仅对这次比赛有用,而且对那些与 UGC 数据相关的数据科学任务也有用,因为它主要关注处理噪声标签和域迁移。
代码可在此处获取:koukyo1994/kaggle-birdcall-6th-place。
注意:我已经从原始仓库重新实现了代码,因为原来的代码很乱。但是,我还没有检查整个流程是否有效;如果您发现代码有问题,请告诉我 :)
很明显,训练数据集和测试数据集之间存在巨大差距:主办方描述了这一点,也可以通过提交结果看出。然而,它们如何不同并不明显。因此,我做的第一件事就是通过观察来了解训练和测试数据集之间存在什么样的域迁移。
域迁移是一个统称,包含几类问题。最著名的是协变量迁移,即 \( P_{train}(X)\neq P_{test}(X) \) 且 \( P_{train}(Y|X)=P_{test}(Y|X) \)。这类问题研究得很好,提出了几种算法来处理这种情况,但不是这次比赛的域迁移类型。另一类问题是先验概率迁移或目标迁移,即 \( P_{train}(Y)\neq P_{test}(Y) \) 且 \( P_{train