算法工程师学习流程

1.完成机器学习基础的学习
机器学习方面的知识是算法工程师区别于普通程序员的核心。这部分知识要重点掌握。
1)学习资料:以林轩田的《机器学习基石》、《机器学习技巧》为主,以周志华的《机器学习》、李航的《统计学习方法》为辅。
2)学习目标:掌握机器学习相关的基础知识,并可以纸上推导LR/SVM/GBDT等模型。
2.练习
刷完《剑指Offer》,大概50题,最后可以手写代码,并进行一些基本的逻辑训练。
1)学习资料:以《剑指Offer》、《大话数据结构》这两本书为主
2)学习目标:最终能刷完《剑指Offer》上的50题,并能在白纸上写出重要的题目。
3.完成基础语言的学习
精通python
4.计算机基础学习
1)学习资料:《不周山之计算机系统导论》
5.对于经典算法的学习,大体上分成几个阶段:
1)第一阶段:对于某一具体的算法,首先要搞清楚这个算法解决的问题是什么,可能是实现一个具体的功能,也可能是在某些方面,比如时间复杂度或者空间复杂度方面很卓越,总之搞清楚这个算法被研究出来的目的是什么。
2)第二阶段:然后就要弄清楚这个算法的生存环境了,也就是看看你此时研究的东西是不是对别的知识有依赖,应该把底层依赖的知识理解并掌握。这些问题都解决之后,就进入到算法本身的学习,理解一个算法是一件非常辛苦的事情,刚开始看必然会产生很多的困惑,比如经常会怀疑作者讲述的内容的重要性?这些内容和这个算法有什么联系呢?经常会有这种摸不着头脑的感觉,其实作者做的铺垫都是为了建立起描述算法主要内容的基础,只有接受和理解这些基础,才能逐渐触碰到算法的精髓,所以耐心是很重要的。
3)第三阶段:算法的主要过程看完之后,往往还是会赶到困惑,主要是不知道这个过程好在哪里,就进入了下一个阶段,理解作者对这个过程在功能性或者效率卓越这件事上的理解和证明。这才真正触碰到算法最精髓的部分,也就是深度的理解算法的主要过程所带来的好处,这才是最锻炼人理解能力的地方。
4)第四阶段:上面几点是算法学习阶段的过程了,接下来就是研究算法的代码实现,自己设计测试用例亲自跑一下代码,以及从代码运行时间的角度分析这个算法的优势,也就是加深对算法的理解的过程。
5)第五阶段:最后是配合相应的题目练习,让自己通过题目练习的方式,会用、善用学习到的算法,并对这个算法产生一定的敏感程度,具体是指看到某些题目时,能够根据题目的特点,产生与该算法的对应,也就是具备举一反三的能力。
6.知识网络
1)机器学习理论
1.1. 基础理论
a. bias-variance tradeoff
b. vc dimension
c. 信息论
d. 正则化
e. 最优化理论
1.2. 有监督学习
a. knn
b. naive bayes
c. LR
d. Decision Tree
e. Boosting & gbdt
f. bagging & Random forest
g. 神经网络
h. Factorization Machine
1.3. 无监督学习
a. kmeans
b. Hierarchical Cluster Algorithm
c. DBSCAN
d. Gaussian Mixed Model
e. LSA & LDA
f. PCA
g. SVD & NMF
h. Word2Vec
2)概率和统计基础
a. 大数定律与中心极限定理
b. 常用概率分布
c. 假设检验理论
d. 最大似然理论
e. 最大后验理论
f. EM算法
g. 贝叶斯理论
h. 最小错误率贝叶斯分类
3)基础结构与算法
a. 树与相关算法
b. 图与相关算法
c. 哈希表与相关算法
d. 矩阵与相关算法
4)开发语言
a. python
5)特征处理&工程
a. 特征选择方法
b. 特征规范化
c. 特征离散化
d. 特征交叉&综合
6)基础开发能力
a. 单元测试
b. 逻辑复用
c. 稳定性、性能、健壮性
d. 代码整洁度、可读性和可维护性
7)单机开发工具
a. numpy
b. sklearn
c. pandas
d. matplotlib
e. libsvm
f. xgboost
8)大数据开发工具
a. hadoop
b. spark
c. storm
9)架构设计
a. 数据仓库&数据流架构
b. 机器学习相关服务架构
7.技能
1)基础开发能力
所谓算法工程师,首先需要是一名工程师,那么就要掌握所有开发工程师都需要掌握的一些能力。在大多数企业的大多数职位中,算法工程师需要负责从算法设计到算法实现再到算法上线这一个全流程的工作。
2)概率和统计基础
概率和统计可以说是机器学习领域的基石之一,从某个角度来看,机器学习可以看做是建立在概率思维之上的一种对不确定世界的系统性思考和认知方式。学会用概率的视角看待问题,用概率的语言描述问题,是深入理解和熟练运用机器学习技术的最重要基础之一。
在统计方面,一些常用的参数估计方法也需要掌握,典型的如最大似然估计、最大后验估计、EM 算法等。这些理论和最优化理论一样,都是可以应用于所有模型的理论,是基础中的基础。这些分布贯穿着机器学习的各种模型之中,也存在于互联网和真实世界的各种数据之中,理解了数据的分布,才能知道该对它们做什么样的处理。
3)开发语言和开发工具
近年来 Python 可以说是数据科学和算法领域最火的语言,主要原因是它使用门槛低,上手容易,同时具有着完备的工具生态圈,同时各种平台对其支持也比较好。但是在模型训练方面,有一些更加专注的工具可以给出更好的训练精度和性能,典型的如 LibSVM、Liblinear、XGBoost 等。大数据工具方面,目前离线计算的主流工具仍然是Hadoop和Spark,实时计算方面 Spark Streaming 和 Storm 也是比较主流的选择。
4)机器学习理论(最重要)
虽然现在开箱即用的开源工具包越来越多,但并不意味着算法工程师就可以忽略机器学习基础理论的学习和掌握。这样做主要有两方面的意义:
a.掌握理论才能对各种工具、技巧灵活应用,而不是只会照搬套用。只有在这个基础上才能够真正具备搭建一套机器学习系统的能力,并对其进行持续优化。否则只能算是机器学习搬砖工人,算不得合格的工程师。出了问题也不会解决,更谈不上对系统做优化。
b.学习机器学习的基础理论的目的不仅仅是学会如何构建机器学习系统,更重要的是,这些基础理论里面体现的是一套思想和思维模式,其内涵包括概率性思维、矩阵化思维、最优化思维等多个子领域,这一套思维模式对于在当今这个大数据时代做数据的处理、分析和建模是非常有帮助的。如果你脑子里没有这套思维,面对大数据环境还在用老一套非概率的、标量式的思维去思考问题,那么思考的效率和深度都会非常受限。
8.机器学习算法工程师学习资源推荐
1)统计学习,基础理论方面,如VC维、正则化、bias-variance tradeoff、最优化方法、信息论等。推荐李航老师的《统计学习方法》,入门必读。
2)有监督学习,如线性回归、logistic、决策树、knn、SVM、神经网络、朴素贝叶斯等。推荐周志华老师的西瓜书《机器学习》和《机器学习实战》,经典中的经典。
3)无监督学习,如EM算法、聚类、竞争学习等,可以参考《机器学习》的部分章节
4)深度学习,如CNN、RNN、LSTM等,推荐Goodfellow的《深度学习》,DL的圣经。
5)强化学习,近年来比较火,AlphaGo的核心算法,推荐Richard Sutton的《强化学习》
6)读书最好和视频教程结合着看。其中重点给大家推荐4个:
6.1. Stanford Machine Learning by Andrew Ng:
经典中的经典(http://cs229.stanford.edu/)
6.2. NG在网易云课堂的深度学习课程:https://mooc.study.163.com/smartSpec/detail/1001319001.htm
6.3. Neural Network for Machine Learning by Geoffrey Hinton:Hinton老先生开的唯一一门课,这门课程绝对是有纪念意义的:http://www.cs.toronto.edu/~tijmen/csc321/
6.4. Coursera上的各种课程,包括微积分、线性代数、编程语言等等。

猜你喜欢

转载自blog.csdn.net/zhaocen_1230/article/details/80392592