顶级Kagglers的心得和技巧
这是一篇笔记,课程来自Coursera上的
How to Win a Data Science Competition: Learn from Top Kagglers本篇可以算是顶级Kaggler大佬们,经过上百场比赛总结的心得和技巧。对准备开始参加数据挖掘竞赛的新人们极其有用,可以为你节省不少时间。
大部分内容我已经通过意会翻译成中文了,限于小编我的视野,可能会出现些误解,有问题望指正。
Tips and tricks
如果觉得排版不适,可以下载notebook文件阅读。
https://github.com/wmpscc/DataMiningNotesAndPractice
Practical guide
经验之谈,这将节省你大量时间。
Before you enter a competition
当我们想参加比赛时,先确定你的目标和试着估计你的参与可以得到什么。
- 你可能想了解有关这个问题的更多信息
- 你可能希望熟悉新的软件工具包
- 你可能想要尝试去获取奖牌
这些目标中的每一个都将影响您选择参加的竞赛。
如果您想了解更多有趣的问题,您可能希望在论坛上进行广泛讨论。例如,如果您对数据科学,医学应用感兴趣, 您可以尝试在2017年数据科学碗中预测肺癌。
如果您想熟悉新的软件工具,您可能希望比赛有必要的教程。 例如,如果您想学习神经网络库。您可以选择任何具有自然保护特征,有监督学习的图像比赛。
如果你想尝试得到奖牌,您可能想要检查参与者有多少次提交机会。 如果人们有超过一百个提交的点数,这可能是明显的问题或验证困难的明显标志。如果排在前列的人很少,这通常意味这应该有一个非平凡的方法来参加这场比赛,或者只有少数人发现了它。除此之外,你还需要关注一下排在前列团队的规模,如果他是一个人,那么你要是聚集一支优秀的团队,胜算会大一些。
After you enter a competition:
- 1.组织你的想法
一旦熟悉了数据,开始写下你以后想要尝试的方法。什么东西可以在这里工作?你可能采取什么方法。
完成后,去论坛阅读帖子和话题高相关度的内容。强烈建议你参与论坛上的讨论,您可以在论坛上获得大量信息并结识新朋友。
- 2.挑选一些重要的、有前途的想法
在初始管道准备好之后,你提出了一些想法,你可能想要开始改进你的解决方案
您可能希望将想法排序,将最重要和最有希望的首先实施。或者可以将它们归类到各自主题中,例如特征生成、验证、度量优化等。
- 3.尝试去理解为什么它会或不会工作
现在选择一个想法并实施它,尝试在途中获得一些简介。特别是,试着理解为什么某些东西有效或无效。从某种意义上讲,分析工作的能力和在你尝试自己的想法时得出的结论将使您走上正确的轨道,去揭示隐藏的数据模式和泄露。
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。

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)

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

顶级Kagglers的心得和技巧的更多相关文章
- 关于jQuery UI 使用心得及技巧
1 jQuery UI 有时你仅仅是为了实现一个渐变的动画效果而不得不把javascrip 重新学习一遍然后书写大量代码.直到jQuery的出现,让开发人员从一大堆繁琐的js代码中解脱,取而代之几行j ...
- ATOM使用的一点心得与技巧——在一个窗口打开多个项目
atom作为一个后起之秀,我个人是觉得越用越好用.虽然sublimet也很棒,但是在ubuntu里不能使用中文很是恼火.网上关于修复这个bug的办法实在太多了.果断选择省事的atom.虽然比起subl ...
- Eclipse使用心得与技巧
一. 常用快捷键(熟练使用快捷键可以充分提高编程效率,吐血整理...) 1,Alt + ↑上方向键:向上移动选中的代码,你可以把一行或者一段代码直接上移几行 2,Alt + ↓下方向键:向下移动选中的 ...
- Creator4.2建模心得与技巧1——树的建立与跟随摄像机旋转
Creator建模: 树一般在虚拟现实程序中都用面来实现,一种方法是通过两个面相互垂直成90度叠放在一起,另一种方法是让树面正对着视角一起旋转.这里主要说一下第二种方法. 主要思路:把树面一直正对着摄 ...
- FreeMarker的基础语法使用 && 心得和技巧
FreeMarker语言 FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker被设计用来生成HTML Web ...
- 工欲善其事,必先利其器 之 WPF篇: 随着开发轨迹来看高效WPF开发的工具和技巧
之前一篇<工欲善其事,必先利其器.VS2013全攻略(安装,技巧,快捷键,插件)!> 看到很多朋友回复和支持,非常感谢,尤其是一些拍砖的喷油,感谢你们的批评,受益良多. 我第一份工作便是W ...
- 【转】Visual Studio 非常实用的调试技巧
下面有从浅入深的6个问题,您可以尝试回答一下 一个如下的语句for (int i = 0; i < 10; i++){if (i == 5)j = 5;},什么都写在一行,你怎么在j=5前面插入 ...
- VS2008调试技巧收集备用
VS2005调试技巧集合 http://blog.csdn.net/rainylin/archive/2007/09/06/1775125.aspx 下面有从浅入深的6个问题,您可以尝试回答一下 一个 ...
- T-SQL 编程技巧
Ø T-SQL 编程是大多数程序员都会接触的,也是数据库编程必须掌握的技术.下面,是本人在工作或学习中积累的一些心得和技巧.主要包含以下内容: 1. waitfor延时执行 2. NOT 关 ...
随机推荐
- Programming on C 学习笔记
目录 include不同的声明方式有什么不同? if defined 与 #ifdef 有什么区别? undef 是怎么工作的? 如何利用 typedef 来定义数组? 枚举中,如果有个元素被赋予值, ...
- python3-cookbook笔记:第六章 数据编码和处理
python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...
- JavaSE学习笔记(12)---线程
JavaSE学习笔记(12)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...
- intellji IDEA 2019版激活码(亲测可用 2019年10月14日08:53:54)
MNQ043JMTU-eyJsaWNlbnNlSWQiOiJNTlEwNDNKTVRVIiwibGljZW5zZWVOYW1lIjoiR1VPIEJJTiIsImFzc2lnbmVlTmFtZSI6I ...
- 使用expect实现自动交互,shell命令行自动输入
背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...
- Linux systemctl系统工具常用总结(详)
systemctl是一个系统自带的服务管理工具,可以管理系统的服务的,启动.停止.重启.自启.监视.也可以对脚本程序后台运行管理. 文章以nginx.service举例 基础命令: systemctl ...
- go cap和len的区别
首先要搞清楚容量和长度的区别: 容量是指底层数组的大小,长度指可以使用的大小 容量的用处在哪?在与当你用 appen d扩展长度时,如果新的长度小于容量,不会更换底层数组,否则,go 会新申请 ...
- Java教程-修炼
在2020这个特殊的时期,在家就是为国家做贡献!一切都会好起来的,加油中国!! Java 第一章 Java概述 1.1 Java历史 1.2 Java语言最主要的特点 1.3 Java环境搭建 1.3 ...
- ASP.NET MVC自定义Numberic属性的验证信息
最近在使用MVC4时碰到一个Model验证的问题:整型属性输入非整型字符串时,错误信息总是“字段 XXX 必须是一个数字”,我总觉得这句话读起来很别扭,所以就萌生了要改变这个默认错误提示信息的念头,但 ...
- JS: javascript 点击事件执行两次js问题 ,解决jquery绑定click事件出现点击一次执行两次问题
javascript 点击事件执行两次js问题 在JQuery中存在unbind()方法,先解绑再添加点击事件,解决方案为: $(".m-layout-setting").unbi ...