顶级Kagglers的心得和技巧

这是一篇笔记,课程来自Coursera上的How to Win a Data Science Competition: Learn from Top Kagglerspython

本篇能够算是顶级Kaggler大佬们,通过上百场比赛总结的心得和技巧。对准备开始参加数据挖掘竞赛的新人们极其有用,能够为你节省很多时间。git

大部份内容我已经经过意会翻译成中文了,限于小编个人视野,可能会出现些误解,有问题望指正。github

Tips and tricks

若是以为排版不适,能够下载notebook文件阅读。
https://github.com/wmpscc/DataMiningNotesAndPractice数组

Practical guide

经验之谈,这将节省你大量时间。服务器

Before you enter a competition

当咱们想参加比赛时,先肯定你的目标和试着估计你的参与能够获得什么。网络

  • 你可能想了解有关这个问题的更多信息
  • 你可能但愿熟悉新的软件工具包
  • 你可能想要尝试去获取奖牌

这些目标中的每个都将影响您选择参加的竞赛。

若是您想了解更多有趣的问题,您可能但愿在论坛上进行普遍讨论。例如,若是您对数据科学,医学应用感兴趣, 您能够尝试在2017年数据科学碗中预测肺癌。

若是您想熟悉新的软件工具,您可能但愿比赛有必要的教程。 例如,若是您想学习神经网络库。您能够选择任何具备天然保护特征,有监督学习的图像比赛。

若是你想尝试获得奖牌,您可能想要检查参与者有多少次提交机会。 若是人们有超过一百个提交的点数,这多是明显的问题或验证困难的明显标志。若是排在前列的人不多,这一般意味这应该有一个非平凡的方法来参加这场比赛,或者只有少数人发现了它。除此以外,你还须要关注一下排在前列团队的规模,若是他是一我的,那么你要是汇集一支优秀的团队,胜算会大一些。数据结构

After you enter a competition:

  • 1.组织你的想法

一旦熟悉了数据,开始写下你之后想要尝试的方法。什么东西能够在这里工做?你可能采起什么方法。

完成后,去论坛阅读帖子和话题高相关度的内容。强烈建议你参与论坛上的讨论,您能够在论坛上得到大量信息并结识新朋友。app

  • 2.挑选一些重要的、有前途的想法

在初始管道准备好以后,你提出了一些想法,你可能想要开始改进你的解决方案

您可能但愿将想法排序,将最重要和最有但愿的首先实施。或者能够将它们归类到各自主题中,例如特征生成、验证、度量优化等。
框架

  • 3.尝试去理解为何它会或不会工做

如今选择一个想法并实施它,尝试在途中得到一些简介。特别是,试着理解为何某些东西有效或无效。从某种意义上讲,分析工做的能力和在你尝试本身的想法时得出的结论将使您走上正确的轨道,去揭示隐藏的数据模式和泄露。ide

After you enter a competition:Everything is a hyperparameter

我喜欢按照这些原则对全部参数进行排序:

  • 1.重要性
    将参数从重要到不重要排序,这些可能取决于数据结构、目标、度量等等
  • 2.可行性
    例如Rate参数很容易调整,但这可能永远须要调整
  • 3.理解
    评价参数,我知道它在作什么或不知道。这里重要的是要了解每一个参数在整个管道中的变化。

注意:改变一个参数可能影响整个管道

Data loading

一开始就对资源作一些优化,将节省大量时间和计算资源。

  • 从经典的处理方法开始而后将csv/txt文件转为hdf5/npy文件以更快的加载

我一般从基本数据预处理开始,如标签,编码,标签恢复,使用额外的数据。而后,我将结果数据转储为HDF5或npy格式。
HDF5是Pandas的数据帧,npy存储非bit数组。运行试验一般须要大量重启内核,这将致使从新加载全部数据,加载csv文件可能须要几分钟,从HDF5或npy格式加载数据只需几秒钟便可完成。

  • 将64位阵列转为32位,节省两倍内存

默认状况下,Pandas以64位阵列存储数据,这在大多数状况下是没必要要的。将全部内容向下转换为32位将节省两倍的内存

  • 大数据集能够被分块处理

Pandas支持即时的数据从新连接。所以,大多数数据集能够在没有大量内存的状况下处理。例如您能够简单的对训练集进行拆分来验证你的模型,而不是使用完整数据来作交叉验证。

Performance evaluation

  • 并不老是须要进行普遍的验证

  • 从最快的模型开始-LightGBM

我一般从LightGBM开始,找到一些至关不错的参数,并评估个人特征的性能。
不要从SVM、随机森林、神经网络开始,你会浪费太多时间等待它们的训练。只有当我对特征工程感到满意时,才会转向去调整模型、采样和stacking。
pe.png

Fast and dirty always better

在某些方面,我将个人方法描述为“fast and dirty”,老是更好。

  • 不要过于关注代码质量

关注真正重要的事——数据。作数据探索,尝试不一样的特征。谷歌特定领域的知识。您的代码是次要的。建立没必要要的类和我的框架可能只会让事情更难以改变,这会致使浪费你的时间,因此要保持简单合理。

  • 把事情简单化:只保留重要的东西

不要跟踪每一个小变化

  • 若是你对计算资源感到不爽-那就去租一台服务器

最后,若是您对给定的计算资源感到很是不舒服,不要挣扎数周,只需租一台更大的服务器。

Initial pipeline

  • 从简单甚至原始的解决方案开始

  • 用完整的管道调试

这种解决方案的主要目的不是创建一个好的模型,而是从数据的最开始到咱们将提交文件写成肯定的格式,创建完整的调试管道。我建议你从构建初始管道开始,一般你能够在kernel中找到组织者提供的baseline解决方案。我建议你仔细阅读并本身写。

  • “从见到到复杂”

另外,我建议你在其余方面遵循从简单到复杂的方法。例如我更喜欢随机森林而不是GBDT,至少随机森林工做得很是快,几乎不须要调整混合参数。

Best Practices from Software Development

  • 使用好的变量名

不管你多么聪明,若是你的变量名起的很差,你确定会对它感到困惑,这是早晚会发生的。

  • 让你的研究可重复
  • 固定全部随机种子
  • 准确记下功能的生成方式
  • 将代码存储在版本控制系统下,例如git。
    不少时候,你须要回退你的模型到两星期前作模型集成。

  • 复用代码

在训练和测试阶段使用相同的代码很是重要。例如,为了保证它们以一致的方式训练,应该使用相同的代码准备和转换特征。这地方通常很难察觉到,因此最好当心点。我建议将可重用代码移动到单独的函数中,甚至是单独的模块。

Read papers

  • 这能够获取到ML相关的电子
  • 例如,如何去优化AUC
  • 便于熟悉相关领域问题
  • 尤为对特征生成有用

My pipeline

  • Read forums and examine kernels first
  • There are always discussions happening!

  • Start with EDA and a baseline
  • To make sure the data is loaded correctly
  • To check if validation is stable

  • I ad features in bulks
  • At start I create all the features I can make up
  • I evaluate many features at once(not "add one and evaluate")

  • Hyperparameters optimization
  • First find the parameters to overfit train dataset
  • And then try to trim model

Code organization:keeping it clean

  • Very important to have reproducible results!
  • Keep important code clean

  • Long execution history leads to mistakes

  • Your notebooks can become a total mess
s = qq.sum(1)
ss = s[:,3]/qq.var()
sss = ss[0]

注意代码质量

  • One notebook per submission(and use git)
    notebook.png

  • Before creating a submission restart the kernel
  • Use "Restart and run all" button

wechat.jpg

相关文章
相关标签/搜索