如何在算法比赛中获得出色的表现 :改善模型的5个重要技巧

如果你最近才开始使用Kaggle , 或者你是这个平台的老用户 , 你可能想知道如何轻松地提高你的模型的性能 。 以下是我在Kaggle之旅中积累的一些实用技巧 。 建立自己的模型或只是从一个基线公共内核,并尝试实施这些建议!
如何在算法比赛中获得出色的表现 :改善模型的5个重要技巧文章插图
回顾过去的比赛虽然Kaggle的政策是永远不会出现两次相同的比赛 , 但经常会有非常相似的问题的重新制作 。 例如 , 一些举办方每年都会针对同一主题提出定期的挑战(NFL's Big Data Bowl ) , 只有很小的变化 , 或者在某些领域(比如医学成像)会有很多比赛 , 目标不同 , 但思路非常相似 。
【如何在算法比赛中获得出色的表现 :改善模型的5个重要技巧】因此 , 回顾获胜者的解决方案(多亏了不可思议的Kaggle社区 , 他们总是在比赛结束后公开)是一个很好的加分项 , 因为它给了你开始的想法 , 以及一个获胜的策略 。 如果你有时间去回顾它们 , 你很快就会发现 , 即使在非常不同的比赛中 , 一些流行的基线模型似乎总是做得足够好:
1. 卷积神经网络或更复杂的ResNet或EfficientNet在计算机视觉挑战中 ,
1. 在音频处理挑战中的WaveNet(也可以通过图像识别模型很好地处理 , 如果你只是使用Mel谱图) ,
1. BERT及其衍生物(RoBERTa等)在自然语言处理挑战 ,
1. 对表格数据LGB(或其他梯度增强树策略)…
你可以直接在Kaggle平台上寻找类似的比赛 。
回顾过去的比赛还可以帮助您获得关于下面解释的所有其他步骤的提示 。 例如,提示和技巧对预处理类似的问题,人们如何选择hyperparameters,什么额外的工具中实现他们的模型让他们赢得比赛,或者如果他们只专注于装袋的类似版本最好的模型或者将所有可用的公共内核进行堆叠 。
数据准备上时间是永远不够的这还远远不是这份工作中最令人兴奋的部分 。 然而 , 这一步骤的重要性怎么强调也不过分 。
清理数据:永远不要认为举办方致力于为您提供最干净的数据 。 大多数时候 , 它是错的 。 填补nan,消除异常值,把数据分割成类别的齐次观察……做一些简单的探索性数据分析 , 以获得您正在进行的工作的概述(这将帮助您获得见解和想法) 。 这是这个阶段最重要的一步 。 如果不了解数据是如何构建的、您拥有哪些信息、针对目标可能具有哪些单独或集体的一般行为特征 , 那么您将会失去对如何构建模型的直觉 。 绘制图表 , 直方图 , 相关矩阵 。 增加数据:这可能是提高性能的最好方法之一 。 但是 , 要注意不要把它弄得太大 , 以至于您的模型无法再处理它 。 你可以在互联网上找到一些额外的数据集(版权问题需要特别注意),或在Kaggle平台上(在过去类似的比赛!),或者只是在你提供的数据:翻转和作物图像叠加录音,back-translate或同义词替换文本…
预处理也是您必须仔细考虑将要使用的交叉验证方法的步骤 。Kaggle的座右铭基本上是:信任您的CV 。处理数据将帮助您知道如何分割数据:对目标值或样本类别进行分层? 您的数据不平衡吗? 如果您有一个聪明的CV策略 , 并且仅依靠它而不是靠排行榜得分(尽管这可能很诱人) , 那么您很可能会在私人最终得分上获得惊喜 。
尝试hyperparameter搜索超参数搜索可帮助您找到模型应具有的最佳参数(学习率 , softmax的温度等) , 以获得最佳的性能 , 而无需手动进行数千次无聊的实验 。
最常见的超参数搜索策略包括:
网格搜索(请永远不要这样做):就我而言 , 这是性能最差的方法 , 因为对于某些值 , 您可能会完全错过某个模式或性能的局部峰值 , 它包含或测试按您可能的值间隔平均分布的超参数值定义;
随机搜索(及其蒙特卡洛衍生物):您尝试参数的随机值 。 它的主要问题在于 , 它是一种并行方法 , 并且随着所测试的参数的增加 , 很快会变得非常昂贵 。 但是 , 它的优点是可以让您在测试中包括先验知识:如果您想在1e-4和1e-1之间找到最佳学习率 , 但是您假设它必须在1e-3附近 , 则可以绘制样本来自以1e-3为中心的对数正态分布 。


推荐阅读