总结——从小白到机器学习入门

        2017年是进步比较快的一年,学到了很多东西,找到了自己喜欢的方向,朝着方向不断努力;第一次接触到人工智能,机器学习领域,有导师带着做项目,参赛,实习,继续自我提升。

        第一次接触到人工智能领域是在3月份,选了人工智能这门课,算是半个科班生吧,教材比较枯燥,老师讲得也比较单调,上到后面基本上就只有几个人在听了。但是内容涉及比较全面,包含了离散数学的逻辑推理(断言,子句),搜索算法(A*算法),粗糙集(上界,下界),遗传算法,感知机等等的。也不可能面面俱到讲得很详细,大部分都是相当于科普一样讲解一下公式,有的部分会讲解推一推导数学公式,但是也很难记得住,毕竟老师是数学专业的,我们不是。

        转折点应该是在一个月后,老师鼓励我们都去参加比赛,参赛可以当作实验课作业提交,于是我也懵懵懂懂地报了名。刚开始的时候简直崩溃,机器学习的算法全都没接触过,看不懂原理,看不懂公式,无从下手。于是自己从校门口的二手书店买了本《机器学习实战》,用了半个月时间撸完了,撸完之后才算是有点明白机器学习是什么东东。于是就开始直接上手比赛项目了,边干边学,用的也是广为人知的python+sklearn,直接调用api,套数据,出结果。

        刚刚开始什么都不懂,不懂得做特征工程,不懂得最优化,只是直接套用算法,结果不好就直接换另一种,也没有去分析为什么效果不好原因是什么。所以就是导致了只停留在应用的层次,甚至连应用都算不上,因为压根就没有对模型进行优化,模型还没有拟合就直接被舍弃了。于是就开始慢慢的增加学习的深度,继续钻研算法的原理。上网看博客,奔走于图书馆和宿舍之间,看了很多资料,总算是把几个基本模型的算法逻辑弄清楚了,特别熟悉的是树结构的模型(ID3,C4.5,GBDT,随机森林)。因为决策树的(拓展)模型参数比较少,一般不需要调参,于是对于当时初学的我来说比较钟爱。况且现在回想起来,当时项目的特征也是真的少。

        算法熟悉了点之后,就开始全身心投入到项目中。机票代理市场的分析预测,预测未来的机票销售量。说到回归,应该说应用场景是非常广泛的,在机器学习当中也占据了不少的分量,但是回归想要做好,也是不容易的。不过有所进步的是懂得了剖析数据,根据数据的特点设计特征,效果也算是有所好转,具体的均方误差已经记不得了,但是对于小白来说已经是一大进步了。

        特征工程是机器学习方面一个非常重要的步骤,数据排第一,特征工程就排第二,算法模型是没办法有太大提升的,所以最后才选模型。正因为这一步骤重要,所耗费的时间也很多,于是我花费了大概一个多月的时间去造特征,找数据规律,实验,调参拟合,到最后连做梦都梦见了自己在造特征,已经到了这种醉生梦死的地步了。到最后因为实验说明了一切,因为自己还不具备数学推导分析的能力,只能迷信于实验的结果,就选了大概20来个特征,大概思路就是平均销量‘’昨日的销量、周同日销量、图的出度和入度等等的特征。放在今天来理解的话,可以视为时间序列的预测,使用马尔可夫链或是RNN都是可以解决的。

        除了特征工程,另外比较重要的就是要回归到原始数据当中,数据往往具有大量的噪声、缺失值,于是就开始了清洗数据的阶段,于是又过了半个月。折腾来折腾去还是决定直接丢掉缺失的数据,用其他方法补齐都是性价比不高的做法。然后就到了选模型调参数了,后面也没做太大改动,效果差不多就提交作品了,顺利进了决赛。决赛由于时间冲突所以没去现场答辩,只得了三等奖。这整个过程还得感谢导师的悉心指导,明确的指引让我少走了很多弯路。

        这前前后后经过了四五个月的时间,学到了很多进步了很多,但其实还没算入门,因为到现在为止我还只是会调用api而已,大部分算法也讲不清楚,为什么这个模型出来结果好也没办法分析清楚。可能这就是速成带来的危害之一。于是我开始自己深入钻研原理,通过资料和博客。没有项目只通过看资料自学是比较零散的,知识点很多,学一下东边,学一下西边,到头来什么都没学会。

        这时候准备秋招了,我也跟风投了大厂,也有自己一边在找实习。后来就找到了家实习,大数据初创公司,在里面做爬虫,每天就是爬不同的网站,做不同网站的接口,偶尔网站html结构变了还要改接口。刚开始还很有热情,越到后来就越感到无趣无聊。也正是这个时候,公司来了位CTO,有机器学习背景,开始改变公司的发展规划,要安排人做数据挖掘的应用,他刚好看了我的简历,就把我安排过去做文本数据的分析和挖掘了。

        先后负责了公司的几个小项目,要素提取,文本相似度,文本分类。有项目边做边学是进步特别快的,比自己盲目的学要好多了,因为多了一个目标,你只有朝着目标不断前进,才能找到项目优化的方法,同时CTO直接一对一指导工作,让我事半功倍。现在回想一下,还多亏了他我才能走到今天,否则我可能已经放弃了机器学习了,感谢命运的安排。

        从项目中应用的技术领域来看,我开始步入了NLP方向,是机器学习的下一级应用方向,同时也往深度学习慢慢拓展。不过我本人的数学基础不算特别好,有很多公式还没理解透彻,所以在深度学习方向学得比较慢,反而在传统机器学习和NLP上面有了一定的造诣。在这里主要讲一下NLP的学习过程,第一件事无疑是中文分词。从刚刚接到任务开始,什么都不懂,开始找资料,看博客,一点一点的开始学,对于中文分词可谓是又爱又恨。作为半个科班生,也不全是科班生,不知道有什么现成的工具可以用,于是一开始就精读了每一篇中文分词的文章,基于词典的,基于概率的分词方法都看透了一遍了,还准备要撸起袖子自己写的,结果才找到了一系列NLP工具(ansj,jieba等等)。但是也有好处,基础就先筑好了,上面盖的楼层也稳固了。

        然后开始提关键词,造特征,算相似度,推荐,分类。这一个过程一走就是半年的时间,由于是初创公司,只有我一个人在做研发,一把辛酸泪。CTO由于要管整个大部门,业务比较繁重,后来也很少参与进来,加上我进步比较快,很多基础知识点都掌握了,也放手让我自己干了。TF-IDF,LDA这些掌握了之后就开始了漫长的实验过程,就是要回归数据的阶段了,数据有什么特点,设计什么特征才能让效果变好,正是这个过程让我不断突破,不断创新,对机器学习有了自己的认识,也增长了自己项目经验。历时半年,两个项目,一个人完成,也算是给自己有了一个交代。今天,我终于可以对自己说,算是入门机器学习了。具备了独立思考的能力,掌握了基础算法原理,基础公式,能从结果分析出原因,找到解决方案,熟悉工具,能看懂中文paper并且自己实现出来,还能对比不同paper之间的优劣。

        从去年3月份开始,到现在,将近一年的时间,我自认为这个成绩可以有所交代了,毕竟还没有正式毕业,还没拿到毕业证,还是个实习生的身份,还有很长的路要走。在接下来的工作和学习当中还是要严格要求自己,多点探索原因,才能够更快的进步。

你可能感兴趣的:(总结——从小白到机器学习入门)