2018华为软件精英挑战赛

    今天12点,历时一个多月的2018华为软件精英挑战赛训练赛结束了,最后分数215.597(总分300),很遗憾,前64都没能进,不过还算尽力坚持到最后。

    3月初,华为软赛开始一周后,看到师兄他们在弄,才临时决定参加的。比较匆忙的找了本科的两个同学。一个研究深度学习的,一个是软件学院的。其实从队伍来看,挺好的,而且还有点小好。但是由于深度学习的哥们忙着发论文,加上老师管得比较严,所以时间比较少,只能从大体上商量一下算法框架等;软院的同学由于他们不用呆在实验室,这段时间刚好面临找实习,所以时间也相对比较少。本来也就抱着试试的心态,不过我自我感觉还算尽力,全程代码基本我实现的,用了不太熟悉的Python,算是对Python更加了解了。

    此次比赛题目是关于利用虚拟机历史申请使用记录来预测未来一周虚拟机的申请情况,并对预测的虚拟机合理分配到服务器上,具体内容可参考:http://codecraft.devcloud.huaweicloud.com/home/detail

    下面就不废话,直接干货,以下仅自己对赛题的理解,不好之处请指教交流,算是学习吧。

    这是一道与时间有关的预测题,而且时间越往后,预测时所占比重越大。之前也没接触过,算是从《机器学习实践》这本书来开始看入手的。最先来一个很简单的线性回归,可想而知,效果不咋样的,只是把它跑通。然后看了局部加权,但是开始遇到的问题是其中的矩阵不能求逆(昨天才知道实验室师兄就是主要用这个做的,240多点,应该能进64强,后悔当时没好好看),然后一看又是书中这章比较靠前的,感觉效果应该一般吧。后面看到一个叫弹性网络的算法,将岭回归和lasso的惩罚函数结合起来,然后感觉应该效果不错,就前前后后看得比较详细,也算是对这个算法比较熟悉了。这个算法中的弹性网选出的变量个数介于lasso回归和岭回归之间,既达到了很好的变量选择的效果,又保留了原有数据的群组效应,即某些相关性很强且有价值的变量的系数均不为0,而某些相关性很强但不是很有价值的变量的系数均为0(这个感觉好像还挺好的,不过不知道是自己思路编程啥的问题,最后得分挺低的)。由于编程语言的不熟悉和编程能力比较差,加上比赛不能用第三方库,包括各种矩阵数学运算和一个人码代码,此时已经过去半个月了,已经进入4月几号了,成绩才71。然后想着先看看数据预处理,通过数据可视化,发现存在异常点值,虽然看了好几个数据预处理的算法,但是想着训练数据异常点不多,就按自己的方法处理的:将每种flavor历史数据中比有值的数据平局值大的数据处理成平均值,想着应该会提升好几分吧,结果,竟然差不多。然后问师兄他们,虽然他们用的比较复杂的点处理,但是也没提升,眼看时间不多,想着再弄几个算法。

    然后了解到随机森林,SVM,还有我和师兄们都觉得效果应该最好的时间预测的ARMA模型。SVM师兄试了,不好,ARMA好不容易他们也弄出来了,也不好(见了鬼了,也不知道是不是编程哪里有问题)。当然,整个比赛过程中,还要或多或少王完成实验室的项目任务。后面又看到非线性的多元回归,感觉这个简单点,而且数据眼看也是非线性回归的,就花了一两天编,效果不好。此时已经过了10号了,最后,想着把随机森林算法弄出来,看了两三天,有点小难(原谅题主比较菜)。还没完全实现,这时虚拟机分配算法还用的最简单的first fit算法+自己的简单优化,得知知乎有大神,将模拟退火算法开源了,效果不错,看了一下模拟退火算法,想着在正式比赛前尽量将这个弄出来。遗憾的是,两天时间感觉弄出来了,但是上传上去报错啊,耐心被消磨得快没了。一个人奋斗真的痛苦加无助啊,没人讨论,师兄也不能问得太多,毕竟是竞争选手。

    一直坚持,调试到今天上午时间结束,然后按之前的弹性网络+first fit+自己小优化,止于215.597。有些遗憾吧,但是本来就是抱着学习的心态参加的,也算不亏。最后,也感谢我两个队友和师兄,没队友,我可能都不会组队了,没师兄,,我可能早就放弃了。期待明年能赛出自己的水平。

    下面附上比赛过程中查到的厉害博主的好资源,同时感谢他们的分享,这里有一篇关于弹性网络的详细点的论文,如有需要,评论得之:

Python 矩阵类自己实现:http://www.jb51.net/article/121804.htm

弹性网络:https://blog.csdn.net/previous_moon/article/details/71376726

                http://www.cnblogs.com/jianxinzhou/p/4083921.html

预测模型总结:https://blog.csdn.net/yijiantao/article/details/51142953

                    https://blog.csdn.net/zc02051126/article/details/54709096

常见回归总结:https://www.jianshu.com/p/15dd20f8d02c

数据清洗:https://www.cnblogs.com/charlotte77/p/5606926.html

随机森林:https://www.oschina.net/translate/random-forests-in-python?cmp

 

你可能感兴趣的:(比赛)