1)采集自知乎:
机器学习说简单就简单,说难就难,但如果一个人不够聪明的话,他大概很难知道机器学习哪里难。基本上要学习机器学习,先修课程是algebra, calculus, probability theory, linear regression。这几门科学好了再学Machine learning是事半功倍的。此外近代数学的东西也要懂, functional analysis啥的。其实不懂也行,只是现在文献总是喜欢引用里面的概念,懂一些读起来方便。(我就很讨厌manifold learning这个名字,把许多人都吓跑了)real analysis最好用心学,对序列或函数的收敛性的理解很能帮助你了解这些模型的精髓。Optimization theory (ref. Convex optimization by Boyd)也是重中之重,在前面几门课学好并有一定python基础的时候可以仔细读一读。
其实机器学习需要看的书不多,必读的是elements of statistical learning。这本书涵盖范围很广,且深入浅出,习题也有一定难度,适合自学。你看过这本之后就知道其他什么书可以看什么书不需要看了。
再下来就是练习,这个是重中之重。我觉得做kaggle的比赛最有效。可以仿照别人写写code,也可以自己想想办法,但最主要的是要能够迅速完成编程并给出结果。我见过许多人光讨论就可以几天,但真正动起手来就萎了。
最后就是读source code并自己实现几个model from scratch。这个比较难,但是确是最锻炼人的。具体语言应该是越基础越好,比如C/C++什么的。等你自己写完了一两个model,再去用别人的package就会觉得得心应手许多了。我真心觉得这个比上coursera那些课强多了。上coursera最大的缺点就是容易变得似懂非懂纸上谈兵。我自己program过ensemble trees(C++)和deep learning solver(Python),受益颇多。至于读source code,我觉得libsvm写得很好啊,不过算法对大一大二新生是难了点。此外,基于python的工具包scikit-learn的sourcecode很好读,建议大家多看看。
我看回答中有提到Matlab,我觉的matlab处理字符很麻烦,现在很多dataset都需要处理字符,所以并不是好的选择。
补充一点就是要学会发散思维,学会如何从data中找feature。关于这个的教程很缺,需要大量练习及一些天赋。
说实话machine learning虽然门槛不高,但真心是聪明人的游戏。
总结起来:
(1)先修课程,包括线性代数、微积分、概率论、线性回归,最优化理论……推荐了一本书籍elements of statistical learning
(2)练习,kaggle
(3)读源码,作者觉得好的有libsvm,基于python的工具包scikit-learn
*(4)学会如何从data中找feature(*:已经超出入门的范围了)
2) 如何准备机器学习工程师的面试 ?
机器学习方面的面试主要分成三个部分: 1. 算法和理论基础 2. 工程实现能力与编码水平 3. 业务理解和思考深度
1. 理论方面,我推荐最经典的一本书《统计学习方法》,这书可能不是最全的,但是讲得最精髓,薄薄一本,适合面试前突击准备。 我认为一些要点是: 统计学习的核心步骤:模型、策略、算法,你应当对logistic、SVM、决策树、KNN及各种聚类方法有深刻的理解。能够随手写出这些算法的核心递归步的伪代码以及他们优化的函数表达式和对偶问题形式。 非统计学习我不太懂,做过复杂网络,但是这个比较深,面试可能很难考到。 数学知识方面,你应当深刻理解矩阵的各种变换,尤其是特征值相关的知识。 算法方面:你应当深刻理解常用的优化方法:梯度下降、牛顿法、各种随机搜索算法(基因、蚁群等等),深刻理解的意思是你要知道梯度下降是用平面来逼近局部,牛顿法是用曲面逼近局部等等。
2. 工程实现能力与编码水平 机器学习从工程实现一般来讲都是某种数据结构上的搜索问题。 你应当深刻理解在1中列出的各种算法对应应该采用的数据结构和对应的搜索方法。比如KNN对应的KD树、如何给图结构设计数据结构?如何将算法map-red化等等。 一般来说要么你会写C,而且会用MPI,要么你懂Hadoop,工程上基本都是在这两个平台实现。实在不济你也学个python吧。
3. 非常令人失望地告诉你尽管机器学习主要会考察1和2 但是实际工作中,算法的先进性对真正业务结果的影响,大概不到30%。当然算法必须要足够快,离线算法最好能在4小时内完成,实时算法我没搞过,要求大概更高。 机器学习大多数场景是搜索、广告、垃圾过滤、安全、推荐系统等等。对业务有深刻的理解对你做出来的系统的结果影响超过70%。这里你没做过实际的项目,是完全不可能有任何体会的,我做过一个推荐系统,没有什么算法上的高大上的改进,主要是业务逻辑的创新,直接就提高了很明显的一个CTR(具体数目不太方便透露,总之很明显就是了)。如果你做过实际的项目,一定要主动说出来,主动让面试官知道,这才是最大最大的加分项目。 最后举个例子,阿里内部机器学习挑战赛,无数碾压答主10000倍的大神参赛。最后冠军没有用任何高大上的算法而是基于对数据和业务的深刻理解和极其细致的特征调优利用非常基本的一个算法夺冠。所以啥都不如真正的实操撸几个生产项目啊。
3)常见面试之机器学习算法思想简单梳理
下面是本人在找机器学习岗位工作时,总结的常见机器学习算法(主要是一些常规分类器)大概流程和主要思想,希望对大家找机器学习岗位时有点帮助。实际上在面试过程中,懂这些算法的基本思想和大概流程是远远不够的,那些面试官往往问的都是一些公司内部业务中的课题,往往要求你不仅要懂得这些算法的理论过程,而且要非常熟悉怎样使用它,什么场合用它,算法的优缺点,以及调参经验等等。说白了,就是既要会点理论,也要会点应用,既要有点深度,也要有点广度,否则运气不好的话很容易就被刷掉,因为每个面试官爱好不同。
总结:这是篇介绍各种机器学习算法+优缺点的文章,这里摘录了关于机器学习岗位招聘的一段,我相信对机器学习的学习是有参考意义的。
4)程序员初学机器学习的四种方式
学习机器学习有很多方法,大多数人选择从理论开始。
如果你是个程序员,那么你已经掌握了把问题拆分成相应组成部分及设计小项目原型的能力,这些能力能帮助你学习新的技术、类库和方法。这些对任何一个职业程序员来说都是重要的能力,现在它们也能用在初学机器学习上。
要想有效地学习机器学习你必须学习相关理论,但是你可以利用你的兴趣及对知识的渴望,来激励你从实际例子学起,然后再步入对算法的数学理解。
通过本文你可以学习到程序员初学机器学习的四种方式。这是给技术人员设计的实用方法,并以实验为依据,你需要做调研并且完成实验才能建立自己的感性知识。
这四种方法分别是:
学习一个机器学习工具
学习一个机器学习数据集
学习一个机器学习算法
实现一个机器学习算法
你应该通读一下这些方法的策略,然后选择你觉得最适合自己的一个,并且有选择性地执行。
1. 学习一个机器学习工具
选一个你喜欢的工具或者类库,然后学着用好它。
我推荐你从一个自带数据预处理工具,机器学习算法并且能呈现结果的工作平台开始学习。学习这样一个工作平台能让你更熟悉机器学习从头到尾的整个过程,这比学习一个特定的数据处理技术或者一个机器学习算法更有价值。
或者,也许你感兴趣的是一个特定技术或者一类技术。你可以利用这个机会更深入地学习一个提供这些方法的类库或工具,掌握了提供这些技术的类库能帮助你掌握相应的技术。
一些你可以采取的策略有:
比较一些可选的工具。
总结你选定的那个工具的能力。
阅读并总结这个工具的文档。
完成学习这个工具的文字或视频教程,并且总结每个教程中你重点学到了什么。
制作关于这个工具的功能或者特性的教程。选一些你不太了解的功能,然后写下得到结果的过程,或者把如何使用这个功能的过程录个五分钟的截屏视频。
一些值得考虑的工作平台有:R, Weka, scikit-learn, waffles, 和 orange.
2. 学习一个机器学习数据集
选一个数据集,然后深入地理解它,发掘究竟哪类算法最适合处理它。
我推荐你选择一个中等大小的,内存能放下的,可能被很多人研究过的数据集。现在有很多非常好的包含数据的类库,你可以浏览它们并且从中选择。你的目的是尝试理解这个数据集背后的问题,它的结构,和哪些种类的解决方法最适合这个问题。
用一个机器学习或者统计的工作平台来研究这个数据集。这样你能专心解答关于这个数据集你要研究的问题,而不是分心去学习某个特定的技术或者如何写代码来实现它。
一些可以帮助你学习实验性的机器学习数据集的策略有:
清晰地描述这个数据集所呈现的问题。
用描述性的统计数据来总结数据。
描述你从数据中观察到的结构,并且提出对数据间关系的假设。
简单地在这个数据集上测试一些常用的机器学习算法,然后发掘哪些类别的算法比其他的表现好
调整表现好的算法的参数,然后发掘什么算法及算法参数设置在这个问题上表现得好
你可以从这些包含高质量数据集的库中选择: UCI ML Repository,Kaggle 和 data.gov.
3. 学习一个机器学习算法
选择一个算法,深入理解它,发掘什么样的参数设置在不同数据集上都稳定。
我推荐你从一个中等复杂度的算法开始学起。选一个已经被人充分理解了的,有许多可选的开源实现,并且需要你探索的参数数目较少的算法。你的目的是建立有关这个算法在不同问题和不同参数设定下表现如何的直觉。
使用一个机器学习平台或者类库。这样能让你把这个算法当成一个“系统”,专心研究它的表现,而不是分心研究数学公式描述或者相关论文。
一些学习你选定的机器学习算法时可采取的策略有:
总结系统的参数,及它们对算法可能有什么影响
选一系列适合这个算法,可能导致不同表现的数据库
选择一些你认为能导致不同结果的算法的参数设置,然后列出你认为系统可能的表现
考虑在迭代过程或不同时间段内能被监察到的算法表现
用一个或多个数据集,算法设置和结果衡量方式来设计解决特定问题的小实验,并且汇报结果
你可以学简单点,也可以学复杂点。想多学一点的话,你可以探索所谓的启发式规则或经验法则来使用算法,并且以实验为依据来展示它们好不好用,及如果好用的话在什么条件下他们与成功的结果有关联。
一些你可以考虑学习的算法有:最小平方线性回归,逻辑回归,K最近邻分类算法,感知器算法。
4. 实现一个机器学习算法
选一个算法,然后选一个编程语言来实现它,或者把一个已有的实现移植到你选定的编程语言上。
你应选择一个中等复杂度的算法来实现。我推荐你仔细研究你想要实现的算法,或选择一个你喜欢的已有实现然后把它移植到你选定的编程语言。
从头开始实现一个算法,是学习那些关于把算法描述转换成一个可行的系统的过程中必须要做的无数的小决定的好方法。在不同算法上重复这个过程,很快你就能对读懂论文和书里面算法的数学描述有感觉了。
五个能帮助你从头开始实现机器学习算法的策略有:
从代码移植开始。把开源的算法实现从一种语言移植到另外一种语言能教会你算法是如何实现的,并且你能拥有并掌握它。这是开始学习的最快的途径,非常值得推荐。
从一个算法描述开始,然后采集一些其他的描述来帮助你排除歧义并且理解主要的那个参考材料。
多读该算法的不同实现。学习不同程序员是如何理解算法描述并且如何把它转换成代码的。
不要陷入过炫的方法太深。许多机器学习算法的内核用的都是高级优化算法。不要尝试重新实现这些方法,除非这就是你做这个项目的本意。你应该用一个提供优化算法的类库,或者用一个更容易实现的或者类库里就有的简单点的优化算法(如梯度下降算法)。
小型项目方法论
以上四个策略属于我称为“小型项目”的方法论。你用这个方法可以很快建立在技术领域(比如机器学习)方面的实用技能。大意就是你设计并且亲手完成解决特定问题的小项目。
小型项目在几个方面应该足够小,才能保证你能完成它们并且从中学习,然后好步入到下一个项目中去。下面是一些你应该考虑加在项目上的一些限制:
时间短:一个项目从头到最后能有可展现的结果不应超过5-15小时。这样利用一周中不上班的晚上和周末时间你就能完成一个小项目。
范围小:一个项目应该有意义,但同时应该是你感兴趣的问题的范围最小的版本。举个例子,与其解决广义的“写一个能告诉我微博是否会被转发的程序”,还不如去研究这个问题在一个特定的账号在一个特定的时间段内的表现。
所需资源少:一个项目应该能用你的可联网的台式或者笔记本电脑完成。你不应该需要奇葩的软件,网络架构,或者第三方数据或者服务。你应搜集需要的数据,读入内存,用开源工具来解决你那个小问题。
额外有关项目的小贴士
这些策略的原则是让你利用你的程序员技能开始行动。下面是三条帮助你调整思维模式,有助你开始行动的小贴士:
写下你学到的东西。我推荐你每个步骤都产生一个有形的劳动成果。它可以是本子里的笔记,微博,博客文章或者是开源项目。每个劳动成果都可以作为一个里程碑或锚。
除非项目的目的是写代码,否则不要写。这条不是那么显而易见,但却是最能帮助你加快理解机器学习的速度的建议。
目的是学到东西,而不是产生独一无二的资源。不要管是否有人读你关于一个算法的研究、教程或是笔记。这些都是你的观点,是你的劳动成果,他们证明你现在掌握到了知识。
本文详细介绍了机器学习的学习路径,包括理论基础、实践练习、源码阅读和特征工程。重点推荐了必读书籍《统计学习方法》和实战平台如Kaggle、libsvm与scikit-learn。同时强调了发散思维在数据特征提取中的重要性。文章还提供了机器学习岗位面试准备策略,从算法理论、工程实现到业务理解进行了全面解析。
7万+

被折叠的 条评论
为什么被折叠?



