为期100天的比赛终于结束了。一期最终成绩第八,二期最终成绩第七。获得了一个阿里终面的机会。下面谈谈我对阿里移动推荐算法比赛的感受,下一篇谈谈比赛中特征的提取。
当第一次看到这个比赛的宣传时,我不屑一顾的看了一眼,就看了一眼,心想:我们才研一,没那个能力,就不要去丢脸了。过了两天,我和我的小伙伴再一次谈论到了这个比赛,并且有参加的念头。这时我才开始带点认真的去关注了,然后我和我的小伙伴商量了一下,感觉可以先去去试试,积累点经验,明年正式参加。于是我们就这样稀里糊涂的加入到了这个比赛。
比赛初期,虽然我们确定了队员,但是没有马上组起来,因为这样我们一天就有三个提交结果的机会(阿里的评测系统一天只评测一次,以最近提交的结果为准)。一开始我们三个就开始按自己的想法去做,但是效果一直都很差。慢慢的,我们开始在一起讨论,贡献自己的想法,然后再按自己的理解去实现。结果是有点进步,但是进步不大。那个时候,我们去吃饭的路上,去实验室的路上,去上课的路上,总之有时间的时候都在想,想问题出在哪,为什么会提不高。即使这样,我们依旧没有什么进步。虽然我们在top500(一阶段的晋级团队数),但按这个进度下去,我们肯定要跌出top500。我们一度感到了绝望,已经没有了信心。
但在离一期换数据还有两天的时间,我的一个小伙伴搞出了一个9.6%的成绩(当时最好成绩大概是11%)。这让我们看到了希望。也让我们有继续搞下去的信心。但是切换数据之后,用他的模型,结果又掉下去了,很明显这个模型过拟合了。于是我们又一次面临跌出top500的危险,又一次要为top500奋斗了。换完数据之后只有五天的时间,我们就想热锅上的蚂蚁,心急如焚。但即使只有五天的时间,我们还是没有放弃,还是一起商量,然后按自己的理解进行代码实现。奇迹终于出现了,在我们的讨论下,我按自己的理解,设计出了一个算法,结果令人可喜,第一次的提交结果直接进了top50。第二天到了24名。第三天也就是最后一次提交我们到了第八名。一期的最终排名,我们组就定格在了这个位置。也正是因为我的一期表现,我顺利当选为这次比赛的队长,哈哈。最终,我们以第八名的好成绩强势晋级二期的比赛。我们老师知道我们的成绩,还想帮我们申请上学校新闻呢,不过还是不了了之。至于原因,我们也不清楚)。
进入二期之后,我们的目标定在了top50,争取一个免笔试的机会。(在进入二期之前,我想谈一下我们的成员。上面我只谈到了我的其中一个小伙伴,还有一个我并没有提到(三人组),这是因为在一期这个小伙伴确实参加了我们的一些讨论,但是到了二期直接就放弃了,二期就我跟另一个小伙伴了。由于我的这个小伙伴以前搞过ACM,大家都叫他ACM大神,所以下文就用ACM大神这个称呼,最终我跟ACM一期奋斗到比赛的结束。
二期的比赛是在阿里的云平台上做,而当时我们对云平台一无所知。我和ACM大神都是从零基础开始学习的。一开始我们还纠结是用Map-Reduce呢还是UDF(user define function)。最后经过我们的摸索,我们发现Map-Reduce用起来比较顺手,于是我们决定用Map-Reduce来提取特征。
我们一期的成绩是第八名,二期我们肯定是实现这个算法啊。只不过数据量变大了。当我们花了差不多10天实现了特征提取方法的时候(由于我们还有课,还有实验室的项目,所以花的时间有点多)。但是结果令我们大跌眼镜。显然,一期的那个算法也过拟合了。我们只能从头开始:想新的特征。由于要上课,考试和实验室的项目的缘故,我们做的很慢,时不时的停下来。虽然做的很慢,但我们还是会经常讨论,我坚信:虽然讨论时讨论不出什么好的结果,但是也许在以后想问题的时候就能有启发。事实证明确实是这样,至少对我来说是这样的。
同样我们还是按照我们原先的思路,自己按照对讨论的一些理解,实现自己的特征(二期模型已经给出了,所以主要是特征的提取)。ACM大神在我们的讨论的基础上加上他自己独特的想法,又一次让我们看到了希望。出来的结果直接进top100(二期一阶段取top200)。
由于ACM大神的这个结果比我们的结果好很多,于是我们就决定在他的基础上进行改进、提升。有了这个基础结果,我们做起来也有劲了。我们试各种特征。有用的留下来,没啥用的就直接放弃。功夫不负有心人,我们最终轻松进入二期二阶段。在二期二阶段,更多的注重的是模型的融合。但是我们的模型融合结果一直不好或者说我们都没怎么试模型融合。在最后一天提交的晚上19:00多,我们想到了一个感觉比较好的模型融合方法。但是时间不赶趟的了,所以就马虎的融合一下了就把结果提交了,结果效果不是很理想。但我一直感觉按这个模型融合效果会更好,不过我们已经没有时间去认真的融合了。这也算是我们在这个比赛中留下的一个遗憾吧。至于具体是怎么融合的,还有我们都提取了哪些特征,后面一篇博客会详细谈到。敬请关注。
最终我们的排名定格在了第七名。顺利拿到了阿里终面的资格。回想起一开始的打打酱油,到一期结束后定下的top50的目标,我们自己都不敢相信我们能取得这个成绩。
个人感觉,参加这样团队比赛,需要具备以下几点品质:
1. 团队合作精神。如果团队内部不和谐,很容易出现单干的情况。也就不会进行讨论了。
2. 善于讨论。多讨论,总能碰撞出思想的火花。
3. 能坚持到最后。人生长跑中,很多时候看到的不是希望,而是绝望,这个时候很容易放弃。一定要相信,风雨之后必见彩虹。
好了,扯了这么多,不想废话了。个人感想就到这,下一篇博客谈谈特征的提取。