三四月份打了个华为编程大赛的酱油,有一些心得和想法,长了一些经验教训,也学到了不少的东西。一直没抽出空来记一下,学习就是不断总结不断进步的过程,不然做了就丢了,不总结,恐怕永远也不会进步。
总体来说,从研一上期参加的天池大数据竞赛,到这次的编程大赛,还是有不少收获的。但是问题也很显然:一直没有正儿八经地去用到机器学习的算法去做,而是用简单的一些模型,这个方面还需要大大改进。天池的数据比赛,完了我才知道日期还可以反演,数据分析师真的是很聪明的存在,比如我逛天池发现,本来官方只给出了每个品牌每天的上牌量,以及当天的Weekday,这也正是我之后放弃继续攻题的原因,只给两个特征,要预测一年的数据,玩毛?我就想看看他们怎么玩,然而让我开眼界的是:这些大神们通过日期反演,竟然凭空添加了20多个特征:比如当天是否是节假日,是一个月的第几天,一周的第几天,一年的第几周,一个月的第几周,是否是节假日,是节假日的第几天,是离放假还有几天,收假之后的第几天,甚至是农历的什么日子等等。我真是开眼了。然后有大神用的模型,比如xgboost,lgb,这些都是很常用的。以及将模型进行集成,然后进行预测。所以今后的工作重点是:
应用机器学习经典算法到实际的项目中,要经常去论坛等地方参考别人的方法,不要坐井观天,闭门造车,多去做,多看,多学。
然后华为的比赛中,由于编程大赛不允许调用第三方库,这就十分痛苦了,那么要是要用机器学习的算法,难道还要自己写吗,那难度确实有点大了,可能还是能力不足,最后华为查代码查出好多同志的重复代码,也不知道是怎么解决的。最开始的时候都搞不清楚华为这个比赛是怎么提交答案的,华为的Dev-Cloud也不知道怎么用,先按自己的想法去把训练数据骚操作处理了一通,然后发现好像没有起到什么作用,关键就是有想法,但是要实现起来真的有点难,而且numpy,pandas之类的也不能用,事实证明还是要好好学习numpy,pandas之类的库,因为要处理大量数据,你还要去码底层代码,真的是十分痛苦啊。。。总之还是用python练了一下手,熟悉了一下用到的python的一些基本操作。
首先一个sys模块是很重要的,因为要输入参数,这个模块可以读取在控制台输入的参数,用sys.argv可以读取参数,注意sys.argv[0]是程序名,然后才依次是参数。sys还可以查看当前平台,可以用path查看第三方扩展模块。详细可以看https://www.cnblogs.com/vman/p/5555559.html
然后是python可以通过Linux中直接终端运行,通过python 文件名的方式,python运行方式很多,一般可以在交互式解释器,后台运行python脚本,或者集成式开发环境运行。
然后是必要的,python肯定要用到函数,类,所以这个应该要很熟悉才行。
详细的看廖雪峰的教程就行。
还有必须要对算法了解,比如比赛中用到的01背包算法,这是属于动态规划的一个算法,一直说把算法导论读了也没有读完,所以人啊,还是要有执行力。。
要学的很多,数据结构要看看,然后排序算法等等一些经典的算法,不看是不行的,你看华为历年的机试题目,都和这些基本的密不可分。
所以接下来的任务也很显然:要做实际的比赛项目练习,要把算法类基本的东西吃透。加油吧!一年。