顶级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 关 ...
随机推荐
- DNS | named.run文件很大的处理方法
在查看/var/named/data目录中发现named.run文件260G+ 总用量 267G -rw-r--r-- 1 named named 1.3K 9月 2 21:27 named.run ...
- python中的“赋值与深浅拷贝”
Python中,赋值与拷贝(深/浅拷贝)之间是有差异的,这主要源于数据在内存中的存放问题,本文将对此加以探讨. 1 赋值(添加名字) 赋值不会改变内存中数据存放状态,比如在内存中存在一个名为data的 ...
- luogu P3369 【模板】普通平衡树
————————————————版权声明:本文为CSDN博主「ModestCoder_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https:// ...
- urlencode($url):把url转义,当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符串的
1.对url进行编码转义
- 如何在Mac上显示和查看隐藏的文件/文件夹
今天的文章推出的是如何在Mac上显示和查看隐藏的文件/文件夹.出于隐私或安全性考虑,出于多种原因,我们需要在Mac计算机上隐藏某些文件.这些文件或文件夹在默认情况下是为Mac的平稳运行而隐藏的,但是如 ...
- AQS源码分析总结
AQS是并发编程的一个最基本组件,是一个抽象同步器. 网上有很多详细介绍AQS的博文,在这里我就不仔细介绍了,主要写一些重要的内容. AQS中重要的几个属性: //同步队列的头节点 private t ...
- PHP0001:PHP环境搭建
1,本机域名解析 网站域名访问流程 配置阿帕奇服务器 的 路径 阿帕奇中添加 PHP 支持 一个简单的PHP 代码 检测PHP apache 语法 httpd -t apache 的启动 获取网站 ...
- 02-React基础语法(2)
一.条件渲染 语法:使用原生 js 的 if 或者 三元表达式 判断 例子:判断用户是否登录,提示:已登录.未登录 (User组件) <script type="text/babe ...
- 【学习笔记】:一天搞定HTML
PS:许多控制样式的标签在HTML5中都不推荐使用,建议使用CSS,如align,border等. 一.概念 HTML的英文全称:Hypertext Marked Language 超文本标记语言. ...
- Candies POJ - 3159 差分约束
// #include<iostream> #include<cstring> #include<queue> #include<stack> #inc ...