本文由 伯乐在线 – zhibinzeng 翻译自 Machine Learning Mastery。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。
事实上有许多的途径可以了解机器学习,也有许多的资源例如书籍、公开课等可为所用,一些相关的比赛和工具也是你了解这个领域的好帮手。本文我将围绕这个话题,给出一些总结性的认识,并为你由程序员到机器学习高手的蜕变旅程中提供一些学习指引。
机器学习的四个层次
根据能力可以将学习过程分成四个阶段。这也是一个有助于我们将所有学习资源进行分类的好方法。
- 初学阶段
- 新手阶段
- 中级阶段
- 高级阶段
我之所以把初学阶段和新手阶段区分开来,是因为我想让那些完全初学者(对这个领域感兴趣的程序员)在初学阶段对机器学习有一个大致的认识,以便决定是否继续深入。
我们将分别探讨这四个阶段,并推荐一些能够帮助我们更好地理解机器学习和提高相关技能的资源。对学习阶段进行这样的分类只是我个人的建议,也许每个分类的前后阶段中也有一些适合当前阶段的资源。
我认为对机器学习有一个整体性的认识是非常有帮助的,我也希望能听听你们的想法,通过在下面评论告诉我吧!
初学阶段
初学者是指那些对机器学习感兴趣的程序员。他们或许已经接触过一些相关的书籍、wiki网页,或者是已经上过几节机器学习课程,但是他们并没有真正地了解机器学习。他们在学习过程感到沮丧是因为他们得到的建议往往是针对中级或高级阶段的。
初学者需要的是一个感性的认识而不是纯粹的代码、教科书、课程。他们首先需要对机器学习有一个是什么、为什么、怎么做的认识以此为接下来的阶段学习奠定基础。
- 入门书籍:阅读一些为程序员而写的数据挖掘与机器学习的入门书籍,例如《机器学习:实用案例解析 》、《集体智慧编程》、《数据挖掘:实用机器学习工具和技术》,这些都是很好的入门书籍,推荐一篇进一步讨论这个话题的文章:《机器学习的最佳入门学习资源》
- 相关概述视频:也可以看一些科普性质的机器学习演讲。例如: 《采访Tom Mitchel》、《Peter Norvig 在Facebook的大数据演讲》
- 与人交谈:与机器学习领域的老手交流,问问他们是如何入门的,有什么资源值得推荐,是什么让他们对机器学习如此狂热。
- 机器学习课程101:我总结了一些关于入门的观点,《为初学者准备的机器学习课程101》,如果你喜欢可以看一看。
新手阶段
新手是指那些已经对机器学习有一定了解的人,他们已经阅读过一些专业书籍或者是接受过完整地课程学习,并且对这个东西有很大的兴趣想做更深入的了解,想通过进一步学习去解决他们所面临的问题。
下面是给新手的一些资料或者建议:
- 完成一门课程:完整地学习一门机器学习的课程,例如斯坦福大学的机器学习课程。多做课程笔记,尽可能地完成课程作业,多问问题。
- 阅读一些书籍:这里指的不是教科书,而是为上面所列举的为程序员初学者所准备的书籍。
- 掌握一门工具:学会使用一门分析工具或者类库,例如python的机器学习包Scikit-Learn、java的机器学习包WEKA、R语言或者其他类似的。具体地说,学习如何使用你在课程或书本上学来的算法,看看它们处理问题的实际效果。
- 写一写代码:动手实现一些简单的算法,例如感知机、K近邻、线性回归。试图写一些小程序去阐述你对这些算法的理解。
- 学习相关教程:完整地跟一门教程,为你所完成的小项目建立一个文件夹,其中包含数据集、脚本代码等,以便你可以随时回顾并有所收获。
中级阶段
在新手阶段已经阅读过一些专业书籍并完成了一些专业课程,这些人已经懂得如何使用机器学习相关的工具,并且也已经为实现机器学习算法和完成一些教程 写过不少的代码了。中级阶段其实是一个自我突破的过程,可以通过建立自己的项目去探索新的技巧并在社区的交流互动中获取更多的知识。
中级阶段的目标是学习如何实现并使用准确、合适、健壮机器学习算法。同样,他们也在数据预处理、数据清洗、归纳总结上花了不少时间,并思考这些数据能解决什么问题。
下面是给中级学习者的一些资料或者建议:
- 建立自己的小项目:自己设计小型的编程项目或者是应用机器学习算法解决问题的小实验。这就像是为探索你自己所感兴趣的技术而设计一些教程。你可以自己实现一个算法或者是提供一些实现这些算法类库的链接。
- 数据分析:习惯于从数据集中探索并总结。知道什么时候该用什么工具,获取用于探索、学习相关技术的数据。
- 阅读教科书:阅读并消化机器学习相关的教科书。这可能对理解用数学方式描述相关技术的能力有一定的要求,并且需要了解用公式的方式去对描述问题和算法。
- 编写你自己的工具:为开源的机器学习平台或类库编写插件和相关的程序包。这是学习如何实现健壮的、能用于生产环境下的算法的一个很好的锻炼机会。 将你的程序包运用到项目中,将代码提交给社区进行代码审核,如果可能的话,努力将你的程序发布到开源的平台上,从大家的反馈中进一步学习。
- 竞赛:参加与机器学习有关的比赛,比如与机器学习会议有关的,或者是提供像Kaggle这样的平台的比赛。参与讨论、提问题,学习其他参赛者是如何解决问题的。将这些项目、方法和代码添加到你的项目库中。
高级阶段
机器学习的高级玩家是那些已经整理过大量机器学习算法或者是自己独立实现算法的人。他们或许参加过机器学习的竞赛又或许写过机器学习的程序包。他们已经阅读过许多书籍、学习过许多相关课程,对这一领域有较充分的认识,同时对自己研究的几个关键技术有很深入的了解。
这些高级使用者平时负责生产环境下的机器学习系统的建立、部署和维护。他们能时刻紧跟这个行业的最新动态,通过自己或他人的一线开发经验发现并了解每一种机器学习技术的细微差距。
下面是给高级阶段学习者的一些资料:
- 定制开发算法:根据业务需求定制开发算法,实现会议、期刊论文中关于某个相似问题的算法。
- 自己设计算法:设计全新的算法去解决工作中 遇到的问题,这样做的目的更多的是为工作中所面临的困难找到最佳的解决方案,而不是进行该领域的前沿研究。
- 案例学习:阅读甚至是重新设计机器学习竞赛或者是其他参赛者所提供的实际案例。这些一直在谈“我是如何做到”的论文或文章中总是塞满了关于数据准备、工程实践以及使用技术的微妙技巧。
- 方法论:总结处理问题的过程并系统化,可以正式地分享出来也可以仅仅是作为个人总结。他们总有一套自己解决问题的思路并且不断地提炼和改进处理过程,试图用更好的技术来或得最佳实践。
- 学术研究:参加学术会议,阅读研究论文和学术专著,与机器学习领域的专家交流学习。他们会记录工作中所积累的经验发布到相关的期刊或者自己博客上,然后回到工作岗位继续研究。
知识在不断地收获,但学习永无止境。在机器学习的征途中遇到问题时你可以随时停住脚步自己钻研问题自行解决,或者绕道而行查阅资料借用群体智慧,事实上,我希望绕道而行成为一种常态。
这样的学习阶段划分是以程序员的角度来规划的,这可以作为技术人员实现从入门到精通的一条线性学习路线。我很乐意收到对于这篇文章的批评建议,这样可以使文章变得更好。在特定的学习阶段你可以得到更多的学习资源,因为针对每个阶段所推荐的学习资源也仅仅是我个人的建议。
好了,现在想想你在哪个学习阶段呢?接下来你该怎么做?
原文链接: Machine Learning Mastery 翻译: 伯乐在线 – zhibinzeng
译文链接: http://blog.jobbole.com/58937/
————————————————————————————————————————————————-
机器学习的最佳入门学习资源
这是一篇很难写的文章,因为我希望这篇文章能对学习者有所启发。我在空白页前坐下,并且问自己了一个很难的问题:什么样的库、课程、论文和书籍对于机器学习的初学者来说是最好的。
文章里到底写什么、不写什么,这个问题真的让我很烦恼。我必须把自己当做一个程序员和一个机器学习的初学者,站在这个角度去考虑最合适的资源。
我找出了每个类型中最适合的资源。如果你是一个真正的初学者,并且乐意于开始了解机器学习领域的相关知识,我希望,你可以在我的文章中找到有用的资 料。我的建议是,从中挑出一件来,一本书或者是一个库,反复阅读或者认真学习所有的相关教程。挑出一个并且坚持学习,直到你完全掌握,再重新选择一个,重 复这个学习过程。现在就让我们开始吧!
Programming Libraries 编程库资源
我是一个“学习要敢于冒险和尝试”观念的倡导者。这是我学习编程的方式,我相信很多人也是这样学习程序设计的。先了解你的能力极限,然后去拓展你的 能力。如果你了解如何编程,可以将编程经验很快借鉴到深入学习机器学习上。在你实现一个实际的产品系统之前,你必须遵循一些规则、学习相关数学知识。
找到一个库并且仔细阅读相关文档,根据教程,开始尝试实现一些东西。下面列出的是开源的机器学习库中最好的几种。我认为,并不是他们中的每一种都适合用在你的系统中,但是他们是你学习、探索和实验的好材料。
你可以从一个由你熟悉的语言编写的库开始学习,然后再去学习其他功能强大的库。如果你是一个优秀的程序员,你会知道怎样从一种语言,简单合理地迁移到另一种语言。语言的逻辑都是相同的,只是语法和API稍有不同。
- R Project for Statistical Computing: 这是一个开发环境,采用一种近似于Lisp的脚本语言。在这个库中,所有你想要的与统计相关的功能都通过R语言提供,包括一些复杂的图标。CRAN(你可 以认为是机器学弟的第三方包)中的机器学习目录下的代码,是由统计技术方法和其他相关领域中的领军人物编写的。如果你想做实验,或是快速拓展知识,R语言 都是必须学习的。但它可能不是你学习的第一站。
- WEKA:这是一个数据挖掘工作平台,为用户提供数一系列据挖掘全过程的API、命令行和图形化用户接口。你可以准备数据、可视化、建立分类、进行回归分析、建立聚类模型,同时可以通过第三方插件执行其他算法。除了WEKA之外, Mahout是Hadoop中为机器学习提供的一个很好的JAVA框架,你可以自行学习。如果你是机器学习和大数据学习的新手,那么坚持学习WEKA,并且全心全意地学习一个库。
- Scikit Learn:这是用Python编写的,基于NumPy和SciPy的机器学习库。如果你是一个Python或者Ruby语言程序员,这是适合你用的。这个库很用户接口友好,功能强大,并且配有详细的文档说明。如果你想试试别的库,你可以选择Orange。
- Octave:如果你很熟悉MatLab,或者你是寻求改变的NumPy程序员,你可以考虑 Octave。这是一个数值计算环境,与MatLab像是,借助Octave你可以很方便地解决线性和非线性问题,比如机器学习算法底层涉及的问题。如果你有工程背景,那么你可以由此入手。
- BigML:可能你并不想进行编程工作。你完全可以不通过代码,来使用 WEKA那样的工具。你通过使用BigMLS的服务来进行更加深入的工作。BigML通过Web页面,提供了机器学习的接口,因此你可以通过浏览器来建立模型。
挑选出一个平台,并且在你实际学习机器学习的时候使用它。不要纸上谈兵,要去实践!
Video Courses视频课程
很多人都是通过视频资源开始接触机器学习的。我在YouTube和VideoLectures上看了很多于机器学习相关的视频资源。这样做的问题 是,你可能只是观看视频而并不实际去做。我的建议是,你在观看视频的时候,应该多记笔记,及时后来你会抛弃你的笔记。同时,我建议你将学到的东西付诸实 践。
坦白讲,我没有看见特别合适初学者的视频资源。视频资源都需要你掌握一定的线性代数、概率论等知识。Andrew Ng在斯坦福的讲解可能是最适合初学者的,下面是我推荐的一些视频资源。
- Stanford Machine Learning斯坦福的机器学习课程:可以在Coursera上观看,这门课是由 Andrew Ng讲解的。只要注册,你可以随时观看所有的课程视频,从Stanford CS229 course下载讲义和笔记。这门课包括了家庭作业和小测试,课程主要讲解了线性代数的知识,使用Octave库。
- Caltech Learning from Data加 利福尼亚理工学院的数据分析课程:你可以在edX上学习这门课程,课程是由Yaser Abu-Mostafa讲解的。所有的课程视频和资料都在加利福尼亚理工学院的网站上。与斯坦福的课程类似,你可以根据自己的情况安排学习进度,完成家庭 作业和小论文。它与斯坦福的课程主题相似,关注更多的细节和数学知识。对于初学者来说,家庭作业可能稍有难度。
- Machine Learning Category on VideoLectures.Net网 站中的机器学习目录:这是个很容易令人眼花缭乱的资源库。你可以找出比较感兴趣的资源,并且深入学习。不要纠结于不适合你的视频,或者对于感兴趣的内容你 可以做笔记。我自己会一直重复深入学习一些问题,同时发现新的话题进行学习。此外,在这个网站上你可以发现是这个领域的大师是什么样的。
- “Getting In Shape For The Sport Of Data Science” – 由Jeremy Howard讲授:这是与机器学习竞赛者的对话,他们是一些实践中的R语言用户。这是非常珍贵的资源,因为很少有人会讨论研究一个问题的完整过程和究竟怎样做。我曾经幻想过在网上找到一个TV秀,记录机器学习竞赛的全过程。这就是我开始学习机器学习的经历!
Overview Papers综述论文
如果你并不习惯阅读科研论文,你会发现论文的语言非常晦涩难懂。一篇论文就像是一本教科书的片段,但是论文会介绍一个实验或者是领域中其他的前沿知识。然而,如果你准备从阅读论文开始学习机器学习的话,你还是可以找到一些很有意思的文章的。
- The Discipline of Machine Learning机器学习中的规则:这是由Tom Mitchell编著的白皮书,其中定义了机器学习的规则。Mitchell在说服CMU总裁为一个百年内都存在的问题建立一个独立的机器学习部门时,也用到了这本书中的观点。
- A Few Useful Things to Know about Machine Learning:这是一篇很好的论文,因为它以详细的算法为基础,又提出了一些很重要的问题,比如:选择特征的一般化,模型简化等。
我只是列出了两篇重要的论文,因为阅读论文会让你陷入困境。
Beginner Machine Learning Books给机器学习初学者的书
关于机器学习的书有很多,但是几乎没有为初学者量身定做的。什么样的人才是初学者呢?最有可能的情况是,你从另外一个完全不同的领域比如:计算机科学、程序设计或者是统计学,来到机器学习领域。那么,大部分的书籍要求你有一定的线性代数和概率论的基础。
但是,还有一些书通过讲解最少的算法来鼓励程序员学习机器学习,书中会介绍一些可以使用工具、编程函数库来让程序员尝试。其中最有代表性的书是: 《Programming Collective Intelligence》,《Machine Learning for Hackers》,《Hackersand Data Mining: Practical Machine Learning Tools and Techniques》(Python版, R版, 以及Java版)。如果感到迷惑的话,你可以选择其中一本开始学习。

- Programming Collective Intelligence: Building Smart Web 2.0 Applications:这本书是为程序员写的。书中简略介绍相关理论,重点以程序为例,介绍web中的实际问题和解决办法。你可以买来这本书,阅读,并且做一些练习。
- Machine Learning for Hackers (中文版:机器学习:实用案例解析 ):我建议你在阅读了《Programming Collective Intelligence》一书之后,再阅读这本书。这本书中也提供了很多实践练习,但是涉及更多的数据分析,并且使用R语言。我个人很喜欢这本书!
- Machine Learning: An Algorithmic Perspective:这本书是《Programming Collective Intelligence》的高级版本。它们目的相同(让程序员开始了解机器学习),但是这本书包括一些数学知识,参考样例和phython程序片段。如果你有兴趣的话,我建议你在看完《Programming Collective Intelligence》之后来阅读这本书。
- 数据挖掘:实用机器学习工具与技术(英文版·第3版) : 我自己是从这本书开始了解机器学习的,那时是2000年这本书还是第一版。我那时是Java程序员,这本书和WEKA库为我的学习和实践提供了一个很好的 环境。我通过这样的平台和一些插件,实现我的算法,并且真正开始实践机器学习和数据挖掘的过程。我强烈推荐这本书,和这样的学习过程。
- Machine Learning(中文版:计算机科学丛书:机器学习 ):这是一本很老的书,包括了一些规则和很多参考资料。这是一本教科书,为每个算法提供了相关讲解。
有一些人认为那些经典的机器学习教科书很了不起。 我也赞同,那些书的确非常好。但是,我认为,对于初学者来说,这些书可能并不合适。
Further Reading 继续阅读
在写这篇文章时,我认真思考了相关问题,同时也参考了其他人推荐的资料,以确保我没有遗漏任何重要参考资料。为了确保文章的完整性,下面也列出了一些网上流行的,可以供初学者使用的材料。.
- A List of Data Science and Machine Learning Resources:这是一份仔细整理的列表。你可以花一些时间,点击链接,仔细阅读作者的建议。值得一读!
- What are some good resources for learning about machine learning Why:这个问题的第一个答案令人吃惊。每次我阅读这篇文章的时候,都会做好笔记,并且插入新的书签。答案中对我最有启发的部分是机器学习课程列表,以及相应的课程笔记和问答网站。
- Overwhelmed by Machine Learning: is there an ML101 book:这是StackOverflow上的问题。并且提供了一系列机器学习推荐书籍。Jeff Moser提供的第一个答案是很有用的,其中有课程视频和讲座的链接。
你是不是以及读过或者用过上面的一些资源了呢?你怎么看这个问题?
我是不是如愿为那些对机器学习有兴趣的初学者提供了重要、有用的资源呢?请留下你的建议,让我们分享!
转自:http://blog.jobbole.com/58937/
——————————————————————————————————————————————————
转载请注明:jinglingshu的博客 » 机器学习自学指南