这是一篇笔记,课程来自Coursera上的
How to Win a Data Science Competition: Learn from Top Kagglers
python本篇能够算是顶级Kaggler大佬们,通过上百场比赛总结的心得和技巧。对准备开始参加数据挖掘竞赛的新人们极其有用,能够为你节省很多时间。git
大部份内容我已经经过意会翻译成中文了,限于小编个人视野,可能会出现些误解,有问题望指正。github
若是以为排版不适,能够下载notebook文件阅读。
https://github.com/wmpscc/DataMiningNotesAndPractice数组
经验之谈,这将节省你大量时间。服务器
当咱们想参加比赛时,先肯定你的目标和试着估计你的参与能够获得什么。网络
这些目标中的每个都将影响您选择参加的竞赛。
若是您想了解更多有趣的问题,您可能但愿在论坛上进行普遍讨论。例如,若是您对数据科学,医学应用感兴趣, 您能够尝试在2017年数据科学碗中预测肺癌。
若是您想熟悉新的软件工具,您可能但愿比赛有必要的教程。 例如,若是您想学习神经网络库。您能够选择任何具备天然保护特征,有监督学习的图像比赛。
若是你想尝试获得奖牌,您可能想要检查参与者有多少次提交机会。 若是人们有超过一百个提交的点数,这多是明显的问题或验证困难的明显标志。若是排在前列的人不多,这一般意味这应该有一个非平凡的方法来参加这场比赛,或者只有少数人发现了它。除此以外,你还须要关注一下排在前列团队的规模,若是他是一我的,那么你要是汇集一支优秀的团队,胜算会大一些。数据结构
一旦熟悉了数据,开始写下你之后想要尝试的方法。什么东西能够在这里工做?你可能采起什么方法。
完成后,去论坛阅读帖子和话题高相关度的内容。强烈建议你参与论坛上的讨论,您能够在论坛上得到大量信息并结识新朋友。app
在初始管道准备好以后,你提出了一些想法,你可能想要开始改进你的解决方案
您可能但愿将想法排序,将最重要和最有但愿的首先实施。或者能够将它们归类到各自主题中,例如特征生成、验证、度量优化等。
框架
如今选择一个想法并实施它,尝试在途中得到一些简介。特别是,试着理解为何某些东西有效或无效。从某种意义上讲,分析工做的能力和在你尝试本身的想法时得出的结论将使您走上正确的轨道,去揭示隐藏的数据模式和泄露。ide
我喜欢按照这些原则对全部参数进行排序:
注意:改变一个参数可能影响整个管道
一开始就对资源作一些优化,将节省大量时间和计算资源。
我一般从基本数据预处理开始,如标签,编码,标签恢复,使用额外的数据。而后,我将结果数据转储为HDF5或npy格式。
HDF5是Pandas的数据帧,npy存储非bit数组。运行试验一般须要大量重启内核,这将致使从新加载全部数据,加载csv文件可能须要几分钟,从HDF5或npy格式加载数据只需几秒钟便可完成。
默认状况下,Pandas以64位阵列存储数据,这在大多数状况下是没必要要的。将全部内容向下转换为32位将节省两倍的内存
Pandas支持即时的数据从新连接。所以,大多数数据集能够在没有大量内存的状况下处理。例如您能够简单的对训练集进行拆分来验证你的模型,而不是使用完整数据来作交叉验证。
并不老是须要进行普遍的验证
从最快的模型开始-LightGBM
我一般从LightGBM开始,找到一些至关不错的参数,并评估个人特征的性能。
不要从SVM、随机森林、神经网络开始,你会浪费太多时间等待它们的训练。只有当我对特征工程感到满意时,才会转向去调整模型、采样和stacking。
在某些方面,我将个人方法描述为“fast and dirty”,老是更好。
关注真正重要的事——数据。作数据探索,尝试不一样的特征。谷歌特定领域的知识。您的代码是次要的。建立没必要要的类和我的框架可能只会让事情更难以改变,这会致使浪费你的时间,因此要保持简单合理。
不要跟踪每一个小变化
最后,若是您对给定的计算资源感到很是不舒服,不要挣扎数周,只需租一台更大的服务器。
从简单甚至原始的解决方案开始
用完整的管道调试
这种解决方案的主要目的不是创建一个好的模型,而是从数据的最开始到咱们将提交文件写成肯定的格式,创建完整的调试管道。我建议你从构建初始管道开始,一般你能够在kernel中找到组织者提供的baseline解决方案。我建议你仔细阅读并本身写。
另外,我建议你在其余方面遵循从简单到复杂的方法。例如我更喜欢随机森林而不是GBDT,至少随机森林工做得很是快,几乎不须要调整混合参数。
不管你多么聪明,若是你的变量名起的很差,你确定会对它感到困惑,这是早晚会发生的。
将代码存储在版本控制系统下,例如git。
不少时候,你须要回退你的模型到两星期前作模型集成。
复用代码
在训练和测试阶段使用相同的代码很是重要。例如,为了保证它们以一致的方式训练,应该使用相同的代码准备和转换特征。这地方通常很难察觉到,因此最好当心点。我建议将可重用代码移动到单独的函数中,甚至是单独的模块。
There are always discussions happening!
To check if validation is stable
I evaluate many features at once(not "add one and evaluate")
And then try to trim model
Keep important code clean
Long execution history leads to mistakes
s = qq.sum(1) ss = s[:,3]/qq.var() sss = ss[0]
注意代码质量
One notebook per submission(and use git)
Use "Restart and run all" button