时至2018年8月,笔者从纯数学专业转行到机器学习方向已经有整整三年了。在这三年内得到了不少同事和前辈的关照,在此感谢大家。按照之前的惯例,每半年笔者都会总结一下自己这半年的转行情况究竟如何。于是近期提笔写下此文,回顾一下这三年所学到的机器学习相关知识。之前在4月份的时候,笔者已经发表过一篇文章《如何从零到一的开始机器学习》,当时这篇文章被不少公众号和平台转载。不过现在写的这篇文章还是按照以前的习惯,在之前的《转行数据挖掘和机器学习》系列文章上添砖加瓦。最近一年笔者都把精力集中在时间序列上,因此本篇文章所增加的主要内容就是关于时间序列的研究。
1
编程语言
目前工业界的机器学习编程语言很多,基于个人的一些浅显的工作经验,发现目前比较常用的编程语言是Python和SQL。
通常来说,SQL 是为了从数据库中提取数据,然后进行必要的数据过滤,数据分析,数据提取。对于 SQL,需要掌握的内容有以下几点:聚合函数,数学函数,字符串函数,表格的连接函数,条件语句等。SQL 的经典教材有两本,分别是:
《HIVE编程指南》,作者 Edward Capriolo
《SQL基础教程》,作者 Mick
至于开发环境的话,一般来说公司都会使用Linux,有一本书可以提供给大家做参考:《Linux命令行与Shell脚本编程大全》,作者 Richard Blum/ Christine Bresnahan
既然是处理大数据,那么就需要了解MapReduce,Hadoop,Spark 等内容。参考文章:
《一文看懂大数据的生态技术圈,Hadoop,Hive,Spark都有了》
。
2
机器学习
既然是做数据挖掘和机器学习的工作,那么每一个转行的人都需要了解这方面的内容。在这里笔者推荐教材《机器学习实战》,作者是 Peter Harrington。阅读这本书需要读者掌握 Python 语言,加上 Numpy,Scipy,matplotlib 函数库的一些基础内容。源代码的话可以在网上找到,然后根据书本的章节逐步学习即可。
除了《机器学习实战》之外,周志华老师所写的《机器学习》西瓜书也是不错的选择。建议初学者结合这两本书一起学习,周志华老师的《机器学习》介绍了多种机器学习算法,并有简单的例子和数学原理进行描述。
既然提到了机器学习,那就简单地总结一下里面的一些算法吧。
如果是做推荐业务的团队,那么使用地最多的还是逻辑回归算法(Logistic Regression),ItemCF 和 UserCF,物质扩散和热传导算法(Heat Spreading) 算法。由于 LR 是使用线性的方法来处理非线性的问题,并且实际的环境中会有物品的特征和用户的特征,因此会导致特征工程比较复杂,交叉项多(二维或者三维的交叉)。因此,在实际的工作中,特征工程的作用就显得十分重要。工程师和业务人员要根据物品和用户进行必要的特征构造,形成物品特征,用户特征,交叉特征等。之前也写过一篇文章《特征工程简介》,供大家参考。
除此之外,如果是推荐系统涉及到在线优化的问题,Google 在几年前提出了一个 FTRL 算法。论文是 Ad Click Prediction a View from the Trenches,里面会涉及 SGD 算法,Truncated Gradient 算法,RDA 算法,FOBOS 算法,以及最终的 FTRL 算法等。这部分内容已经整理好,《FOLLOW THE REGULARIZED LEADER 算法总结》。
比逻辑回归算法还要简单的那就是线性回归算法了,目的都是针对连续型的数据进行预测,结果都十分容易解释。除了直接的线性回归之外,还有局部加权线性回归,岭回归,Lasso 和前向逐步线性回归等算法。这些细节可以参考文章《线性回归》。除了线性回归之外,多项式的回归也是一个重要的知识点,无论是拉格朗日插值多项式还是Weierstrauss多项式逼近定理,在工业界都有着相应的应用场景,可以参见《多项式的插值算法与回归算法》。
如果是针对转行的同学的话,那么大家肯定关心的是如何把之前的技能平滑地切入到新的领域中。如果学过数理统计的话,那么《最大似然估计》就是一个不错的切入点。
除了上面所说的算法,支持向量机算法(Support Vector Machine),GBDT 算法,随机森林算法,XgBoost 算法都是在工业界比较常见的算法。目前个人还没有对这类算法进行过总结,不过还是强烈建议大家去学习一下。2018年笔者应该会对这些算法进行一些个人的总结。
关联分析,也就是所谓的“啤酒与尿布”的故事。Apriori 和 FpGrowth 算法都有自己的优点和缺点,在智能运维里面经常会涉及到关联性的分析。无论是事件与事件的关联,时间序列与时间序列的关联,时间序列与事件的关联,都需要进行分析。之前微软也研究过《时序数据与事件的关联分析》,在这里分享给大家。
目前深度学习已经成为了机器学习的热门研究方向,无论是卷积神经网络 CNN 还是循环神经网络 RNN,都是研究的主流。之前在学习反向传播算法的时候,写过一篇如何基于 BP 算法训练 RNN 网络的文章《循环神经网络-Reccurent Neural Networks》。
通常来说,循环神经网络是可以用来处理一些文本内容的,然后在这里也写过一篇文章来介绍文本里面的基本概念:《TF-IDF简介》。
在现实社会中,社交网络已经成为了大家不可或缺的一部分,无论是在工业界还是学术界都有人对社交网络进行研究。之前也研究过 Google 的排序算法 PageRank 和其余的一些图算法,在这里也列举出来供大家参考《Graph Analysis and Its Application》。
除此之外,很多现实中的函数都是所谓的黑盒函数,也就是只知道参数的输入和结果的输出。而有的时候我们也希望通过这个函数的输入和输出逐步调整参数,然后获得这个函数的最大值或者最小值,从而使目标得到进一步地优化。于是,诸多启发式优化算法,包括粒子群算法,遗传退火算法等算法就被很多学者尝试过。《黑盒函数的探索》这篇文章将会简单地介绍几种优化算法。知乎链接:https://zhuanlan.zhihu.com/p/36230460
3
数理统计
在机器学习领域,数理统计方面的一些基础知识有着举足轻重的地位。例如一些有监督学习算法的效果评估指标,例如准确率,召回率,ROC 曲线,AUC,交叉验证等。
除了数理统计的各种知识点之外,时间序列则是数理统计里面的一个重要方向,无论是在学术界的人士还是工业界的人员,都或多或少会接触到时间序列。在智能运维领域,时间序列的异常检测一直是一个基础的问题。无论是对网络流量的异常检测,还是对 CPU 使用率的检测,还是对在线用户数的实时统计,都离不开对时间序列的研究。
要想做好时间序列的异常检测,正如上面提到的,离不开时间序列的特征构造,那么如何理解时间序列就成为了一个关键的问题。如何在现有的时间序列情况下,构造出适合的特征来反映时间序列的整体状况和局部状况就非常有技巧。除了大家都能够想到的时间序列的统计特征,例如均值,方差,标准差,偏度,峰度等,时间序列还有很多可以构造出来的特征集合。虽然看上去略显麻烦,但是如果接触过推荐系统中的特征工程,这些特征构造的技巧其实都可以一一化解。可以参见文章《如何理解时间序列-从Riemann 积分和 Lebesgue 积分谈起》。
除了时间序列异常检测之外,时间序列的研究方向还包括聚类,分类,相似度算法等方向。而这些方向基本上都基于特征工程的构造和相似度函数的研究。关于时间序列的相似性可以参见《时间序列的相似性》与《时间序列的搜索》这两篇文章,关于时间序列的特征工程可以参见《时间序列的表示和信息提取》。知乎链接如下:
《时间序列的相似性》:https://zhuanlan.zhihu.com/p/38130622
《时间序列的搜索》:https://zhuanlan.zhihu.com/p/39450321
《时间序列的表示和信息提取》:https://zhuanlan.zhihu.com/p/39105270
4
业务
在实际的工作中,最重要的一个因素就是理解业务,只有理解了业务的需求,才能够更好的完成领导所布置的任务。在做事情的时候,一定要形成闭环。那就是:了解业务需求 ->调研业界方案 -> 查看是否适用 -> 上线效果。通过最终的效果和我们要做成的目标,来反推当前需要做的事情。一些学生时代的思维方式需要逐渐抛弃,参考文章:《开公众号之后的一些感想》。
除了从学生时代到工作的时候需要转变一些想法之外,无论是在学术界还是工业界都需要选择好自己的领域(《如何选择自己的研究领域》)。并且需要明确自己的长板与短板(《短板与长板理论》),才能够在工作上取得更大的成绩。
领取专属 10元无门槛券
私享最新 技术干货