机器学习小白如何阅读天池获奖方案代码

本人也是小白,阅读他人的代码并不容易,虽然作者会有解释(博客、视频等),但并非人人都能理解。

本文试图通过一个案例来学习他人的方案来达到学习的目的,我也当是写给自己看了,反正没人看当做笔记好了。

注:阅读代码非常消耗时间,但对于学习的提升会很大。


1、找到其中一个竞赛,里面一定要有作者提供源码,不然没法去学习。

竞赛页面: 

https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100067.5678.1.3f1c2163BGVGtT&raceId=231647

这是我从某公众号中看到的,因为附带源码,所以就去看看了。是一个亚军的方案。

作者方案及其讲解:https://github.com/YouChouNoBB/ijcai-18-top2-single-mole-solution


2、不要一上来就阅读源代码,否则会一脸懵逼。先看看了解下竞赛题目及其数据解释


先了解数据非常重要,可以下载数据去理解一下。

注意:打开数据要小心,因为数据可能非常大,用什么软件打开可能会导致失去响应,耗内存,卡死电脑也不奇怪。

我这里用notepad++打开,


有提示,起码不会直接卡死软件,太大的话可以自行用pandas来切分成多个文件。

不想这么麻烦的话,直接看竞赛的数据介绍也行。


因为我们是了解做法,知道作者如何处理数据和为什么要这样处理数据即可。


3、拿到源代码了,要按什么顺序去阅读也是一个很重要的问题。

千万不要被作者的代码量吓到,其实大部分操作并不难,阅读下去会发现没什么,可能有大部分的重复操作。


一般的读程序方式是先看main函数的,然后再逐个看调用函数。

但这里的函数可能很多,分的文件可能也多,从源头找起可能很费劲,而且机器学习其实函数单独看也不算太难。

当然首先要看作者的README.md,但这里面作者是叫你去看他的博客或者视频。

当然这是非常好的方式,但我选择直接看。

我们先看run.sh,一般机器学习的人会选择linux系统,所以最后都会有一个.sh文件用以批处理运行。

没有的话只能从名字来判断顺序了,一般都是先数据后模型,再验证。


我们这里直接按这个文件里的顺序来看,因为这是作者的运行顺序,有助于我们从头(数据处理)开始了解。

当然可能还存在着作者在文件中用来辅助运行的文件,这些要看头文件是否有导入来阅读。


4、首先,当然是数据的处理,这里需要对照着数据的意思去理解作者这样处理数据的原因。

很幸运的是,作者采用的是易懂的英文作为各种名字,这样我们阅读起来更方便快捷。


这里的注释都是我自己加的,帮助自己理解,这个函数是作者在查找相同的类别数。

边阅读边写上自己理解的注释,是阅读他人代码的好方法。

我们需要知道数据代表什么,而且数据的形式是什么?


这些在竞赛页面都会写得很清楚。


5、阅读过程中肯定会遇到自己不懂的api,这个通过上网查询。


只需要了解它的作用即可(不必深究,不然又得学习一个库了)


竞赛算法并不会写得太复杂,这样我们可以去理解作者的做法。

当然查询还得看下调用的头文件,因为可能不同库的函数名一样。


6、通常作者的每个文件都是可以单独运行的,除了最后含main的那个(最主要的那个)。

但不建议运行,因为肯定是能跑的,不然作者拿什么去参赛;

还有你跑的话,可能在本地会发生错误(确实什么本地文件,没有什么库),修改其代码然后跑通并没有必要。

我们要做的是理解其思想,没必要浪费自己的时间,等你下载文件,下载库都已经没什么时间了。


更可况,有些参赛选手是拿几个GPU去跑的,普通电脑根本带不动。


这里作者跑多线程,作者是采用线程分开处理数据的,即不同线程处理不同数据,以免混淆。


7、处理完数据后(字符型数据标签化、填充缺省值等),接下来是特征工程。

所以说要理解数据很重要,不然都无法去实现高效模型。

直接阅读代码可能看不到作者的分析数据过程,可以参考作者博客或视频。

但代码是作者分析数据后的结果操作,所以直接阅读也不是问题。

特征工程的工作量可能会非常大,阅读时知道作者产生的新特征代表什么挺重要。

所幸作者用英文加下划线表达,省去了我大量的阅读。

要避免深究代码,没必要,每个人都有自己的实现方式,又不是什么底层操作。

理解作者函数的作用,输入和返回值即可。

因为特征工程(尤其是参赛的)动则上百行。

特征工程会涉及到大量的pandas的操作,如果你想跟着作者学习分析数据,

可以自己在竞赛页面取少量数据进行操作,包括数据融合,创建新特征,可视化分析等。


8、最后看到,作者大量的代码,大量的文件都投入到了特征工程当中。

最后处理模型只有一个文件,但模型处理看似代码量少,其实各种调整模型参数可是很伤脑筋的。

可想而知,要想参加比赛,除了有能运行的电脑之外,数据的分析能力也是非常重要的。

可能大部分时间都会用在特征工程上,现实情况也的确如此,机器学习也并非学习模型。


通过该文件的导入库情况可知,作者采用了lgb模型来分析。

不懂作者使用的模型也没关系,可以自己慢慢学习。基本上

模型的操作基本上是拟合数据,调参,训练,预测等。

最后是交叉验证。


9、还有一个作者没跑的文件,其实也是处理模型,里面是简单的逻辑回归模型。

这里提出建议,不要一上来就对数据采用各种复杂的模型,先用逻辑回归看看,

然后对比一下模型之间的错误率、准确率等再进行模型的选择。


总算阅读完了,不简单啊,这里膜拜一下这位作者(其实是一个三人团队):请受小弟一拜。

这里阅读的是参赛代码,并非所有代码都这么友好,有注释用英文名等等,

但机器学习算法的途径殊途同归,可以同样地去理解。

现在算法层出不穷,不要强迫自己什么都记住,什么都会,

毕竟人又不是机器人,重要的是手段和学习能力。

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值