有一个半月没有写博客了,一来是因为实习的工作量一下变多了,第二是因为在打Tencent的比赛,虽然接触比赛很久,但是这个比赛应该算是我第一个用心从头到尾打的一个比赛。就大致记录一下感悟吧。
特征工程
首先这一点是任何数据挖掘比赛少不了的,而在这一点上我的能力是非常欠缺的,特征显然是很重要的,但是这次比赛我们欠缺的不单单是这一点,还有更多欠缺的东西需要学习和弥补。
问题
- 抽样
这个比赛的复赛阶段数据量很大,一直没有采用抽样的方法去测试运行,导致浪费大量的时间在等待和调试上面。之所以没有采用抽样的方式,是因为特征抽取的需要针对天数,那么随机抽样会导致比较大的问题,甚至本来可以运行的代码结果不能运行,这一点就让我一直没想起来去抽样。在比赛后两天特征都形成固定的了,就采用抽样的方式来测试模型的运行。 - 存取文件
在比赛的后一周,才听说有pandas可以存取h5这种格式的文件,据说是很快,当然我还没有试过。另外一点,就是我的特征文件之前一直是分开的,用的时候以merge的形式合并的,这就导致了速度上很差的表现,后面采取的是,特征存成以concat形式连接的单独文件,这样速度就快了很多。 - 整体感
整个比赛下来发现其实是没有节奏感的,后面连stacking都没能来得及去做,而且还是有很多想法都没能实现的。这一点我觉得头脑风暴是非常必要的,讨论完一定要确定好具体的任务并进行分工,才能充分发挥分工合作的作用。 - 知识储备和代码实现能力
模型原理了解比较少,理论认识还是不够深入。这一点从一定角度上讲会影响自己的理解新模型的能力,比如这次比赛的ffm算法就没能很好的理解,以至于到最后都没能成功优化成绩,完全仰仗于他人的开源代码是不行的,借助开源的前提是自己有编写能力,能够阅读并修改开源代码的错误,不然开源就是灾难。
解决方案
- 陷入瓶颈多讨论、讨论完毕多思考、思考结束多动手
- 大一点的事情都需要有规划,把能做的先做好,才能放心大胆的去做更多的尝试
- 多刷论文多写代码、尽量把机器学习的那些基本算法都实现一遍吧、并用开源数据做实验。
- 了解并多去尝试一些提高代码效率的方法。