社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

转行数据挖掘和机器学习(五)

数学人生 • 6 年前 • 778 次点击  

时至2018年8月,笔者从纯数学专业转行到机器学习方向已经有整整三年了。在这三年内得到了不少同事和前辈的关照,在此感谢大家。按照之前的惯例,每半年笔者都会总结一下自己这半年的转行情况究竟如何。于是近期提笔写下此文,回顾一下这三年所学到的机器学习相关知识。之前在4月份的时候,笔者已经发表过一篇文章《如何从零到一的开始机器学习》,当时这篇文章被不少公众号和平台转载。不过现在写的这篇文章还是按照以前的习惯,在之前的《转行数据挖掘和机器学习》系列文章上添砖加瓦。最近一年笔者都把精力集中在时间序列上,因此本篇文章所增加的主要内容就是关于时间序列的研究。


1

编程语言


目前工业界的机器学习编程语言很多,基于个人的一些浅显的工作经验,发现目前比较常用的编程语言是 Python 和 SQL


通常来说,SQL 是为了从数据库中提取数据,然后进行必要的数据过滤,数据分析,数据提取。对于 SQL,需要掌握的内容有以下几点:聚合函数,数学函数,字符串函数,表格的连接函数,条件语句等。SQL 的经典教材有两本,分别是:

《HIVE编程指南》,作者 Edward Capriolo

《SQL基础教程》,作者 Mick

PS:个人特别喜欢《SQL基础教程》,极易上手,易学易通。之前写过一篇文章总结 HIVE 的使用细节,提供给大家做参考:《HIVE基础介绍》


对于编程语言 Python 来说,目前深度学习的框架 Tensorflow 等,都可以使用 Python 进行编程。除此之外,Python 还有各种各样的数值计算库和机器学习库等着大家去使用,例如 Numpy,Scipy,ScikitLearn,matplotlib 等。其中,Scikitlearn 的文档是非常详细的,特别适合初学者入门学习。至于 Python 教材的话,其实有很多,例如:《Python基础教程》 ,作者是 Magnus Lie Hetland,这本书特别适合初学者看。如果是网络教材的话,推荐参考廖雪峰的官方网站,地址是:http://www.liaoxuefeng.com/


至于开发环境的话,一般来说公司都会使用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多项式逼近定理,在工业界都有着相应的应用场景,可以参见多项式的插值算法与回归算法


决策树 ID3,C4.5,CART 都是一些非常经典的算法,但是在工业界里面的使用场景不是很多。不过随着时间的推移和笔者对业务的理解,发现决策树在智能运维领域的根因分析上面有着独特的优势,正如这两篇文章所写的:《智能运维系统(一)》《根因分析的探索》


如果是针对转行的同学的话,那么大家肯定关心的是如何把之前的技能平滑地切入到新的领域中。如果学过数理统计的话,那么《最大似然估计》就是一个不错的切入点。


除了上面所说的算法,支持向量机算法(Support Vector Machine),GBDT 算法,随机森林算法,XgBoost 算法都是在工业界比较常见的算法。目前个人还没有对这类算法进行过总结,不过还是强烈建议大家去学习一下。2018年笔者应该会对这些算法进行一些个人的总结。


无监督学习算法也是整个机器学习领域的一大方向。提到无监督学习算法,就不得不提到聚类算法,其中最经典的还是 Kmeans 算法。这个可以参见文章《聚类算法(一)》《聚类算法(二)》。聚类算法的反面就是异常点检测算法,之前在异常点检测算法上面研究过一阵,也写过不少的文章。例如:《异常点检测算法(一)》《异常点检测算法(二)》《异常点检测算法(三)》《异常点检测算法综述》


关联分析,也就是所谓的“啤酒与尿布”的故事。Apriori 和 FpGrowth 算法都有自己的优点和缺点,在智能运维里面经常会涉及到关联性的分析。无论是事件与事件的关联,时间序列与时间序列的关联,时间序列与事件的关联,都需要进行分析。之前微软也研究过《时序数据与事件的关联分析》,在这里分享给大家。


除此之外,强化学习也是机器学习的一个研究方向。随着 DeepMind 公司的 AlphaGo 打败围棋顶尖选手,能够自动玩游戏的智能 AI,强化学习已经成为了一个比较热门的研究方向。之前写过三篇关于强化学习的小文章《当强化学习遇见泛函分析》《用强化学习玩文本游戏》《深度学习与强化学习》供大家参考。


目前深度学习已经成为了机器学习的热门研究方向,无论是卷积神经网络 CNN 还是循环神经网络 RNN,都是研究的主流。之前在学习反向传播算法的时候,写过一篇如何基于 BP 算法训练 RNN 网络的文章《循环神经网络-Reccurent Neural Networks》


通常来说,循环神经网络是可以用来处理一些文本内容的,然后在这里也写过一篇文章来介绍文本里面的基本概念:《TF-IDF简介》


在现实社会中,社交网络已经成为了大家不可或缺的一部分,无论是在工业界还是学术界都有人对社交网络进行研究。之前也研究过 Google 的排序算法 PageRank 和其余的一些图算法,在这里也列举出来供大家参考《Graph Analysis and Its Application》


除此之外,很多现实中的函数都是所谓的黑盒函数,也就是只知道参数的输入和结果的输出。而有的时候我们也希望通过这个函数的输入和输出逐步调整参数,然后获得这个函数的最大值或者最小值,从而使目标得到进一步地优化。于是,诸多启发式优化算法,包括粒子群算法,遗传退火算法等算法就被很多学者尝试过。《黑盒函数的探索》这篇文章将会简单地介绍几种优化算法。知乎链接:https://zhuanlan.zhihu.com/p/36230460


近些年,Google 等一些大公司也在大力发展量子计算,也有人进行量子计算与机器学习的研究,之前写过两篇科普性质的文章来介绍量子计算:《量子计算(一)》《量子计算(二)》


3

数理统计


在机器学习领域,数理统计方面的一些基础知识有着举足轻重的地位。例如一些有监督学习算法的效果评估指标,例如准确率,召回率,ROC 曲线,AUC,交叉验证等。


除了数理统计的各种知识点之外,时间序列则是数理统计里面的一个重要方向,无论是在学术界的人士还是工业界的人员,都或多或少会接触到时间序列。在智能运维领域,时间序列的异常检测一直是一个基础的问题。无论是对网络流量的异常检测,还是对 CPU 使用率的检测,还是对在线用户数的实时统计,都离不开对时间序列的研究。


在学术界,统计学家大多数还是从控制图(Control Chart Theory)和自回归模型(ARIMA)等方向来研究时间序列,包括时间序列的稳定性和异常与否。参见文章时间序列的自回归模型—从线性代数的角度来看。除此之外,也有学者通过动力系统的思想来研究时间序列,例如时间序列模型之相空间重构模型》。但是在工业界,就有学者提出可以使用机器学习中的有监督学习方法来进行时间序列的异常检测,将时间序列的异常检测问题转换成机器学习中的二分类问题。于是,就可以使用机器学习中最经典的特征工程和各种各样的有监督算法来进行模型的离线训练和实时预测。具体细节可以参见《智能运维系统(二)》时间序列简介(一)


要想做好时间序列的异常检测,正如上面提到的,离不开时间序列的特征构造,那么如何理解时间序列就成为了一个关键的问题。如何在现有的时间序列情况下,构造出适合的特征来反映时间序列的整体状况和局部状况就非常有技巧。除了大家都能够想到的时间序列的统计特征,例如均值,方差,标准差,偏度,峰度等,时间序列还有很多可以构造出来的特征集合。虽然看上去略显麻烦,但是如果接触过推荐系统中的特征工程,这些特征构造的技巧其实都可以一一化解。可以参见文章如何理解时间序列-从Riemann 积分和 Lebesgue 积分谈起


除了时间序列异常检测之外,时间序列的研究方向还包括聚类,分类,相似度算法等方向。而这些方向基本上都基于特征工程的构造和相似度函数的研究。关于时间序列的相似性可以参见《时间序列的相似性》《时间序列的搜索》 这两篇文章,关于时间序列的特征工程可以参见《时间序列的表示和信息提取》。知乎链接如下:


《时间序列的相似性》:https://zhuanlan.zhihu.com/p/38130622

《时间序列的搜索》:https://zhuanlan.zhihu.com/p/39450321

《时间序列的表示和信息提取》:https://zhuanlan.zhihu.com/p/39105270


4

业务


在实际的工作中,最重要的一个因素就是理解业务,只有理解了业务的需求,才能够更好的完成领导所布置的任务。在做事情的时候,一定要形成闭环。那就是:了解业务需求 ->调研业界方案 -> 查看是否适用 -> 上线效果。通过最终的效果和我们要做成的目标,来反推当前需要做的事情。一些学生时代的思维方式需要逐渐抛弃,参考文章:《开公众号之后的一些感想》


除了从学生时代到工作的时候需要转变一些想法之外,无论是在学术界还是工业界都需要选择好自己的领域(如何选择自己的研究领域。并且需要明确自己的长板与短板(《短板与长板理论》),才能够在工作上取得更大的成绩。



相关文章推荐:

1. 转行数据挖掘和机器学习

2. 转行数据挖掘和机器学习(二)

3. 转行数据挖掘和机器学习(三)

4. 转行数据挖掘和机器学习(四)


欢迎大家关注公众账号数学人生

(长按图片,识别二维码即可添加关注)


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/a5u6JZiOQh
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/22352
 
778 次点击