这里,你在学习机器学习的过程中,可以做很多的事情。这里有很多来自书籍和课程的资源给你提供参考,甚至你可以参加比赛和属性使用工具。在这篇文章里,我想对这些活动提供一些架构,并在你从程序员转变为机器学习专家的旅途中给你提供一些自由的顺序来解决一些问题。
机器学习的等级
考虑一下四个机器学习的技能等级,而这时一个模型,有助于我们思考这些可靠的资源和活动,而且说不定在什么时候能派上用场。
1.新手 2.初级 3.中级 4.高级
我这里想要把新手和初级分开来讨论就是因为我想要在这些绝对新手(一个在某个领域感兴趣的程序员)选择方向之前提供一些参考路径。
现在,我们开始对这四个等级进行一一的介绍,并在此过程中寻找一些能帮助我们在某个阶段的学习中学到更多,并且对他们的技能等级和所学的知识进行深入理解的资源和活动。
分解只是其中的一项建议,而一些活动或资源在它是你处在某个阶段以前或以后对于你来说是有用的,同时在你某个阶段下的分解是有用的这些情况是可能存在的。
我认为这个大致的框架是很有用的,而我很想听到你的想法,并欢迎你在文章的末尾那里留言来分享你个人的看法。
新手
这里的新手就是指一位程序员,他对机器学习的某个领域感兴趣。他们也许会从书籍方面入手,或者维基百科,或者在一个课程里上几堂课,但是他们还没有“明白”机器学习到底是怎么一回事。他们会感觉很沮丧,那是因为他们得到的建议是适合中间或者高级的人的。
新手需要一些合适的检验。除代码、教程和课程以外,他们需要知道他们为什么要学习机器学习、机器学习是什么,并且怎么学,为初级的学习打下坚实的基础。
以下的这些活动和书籍是适合初学者的:
1.书本的导论:读一些好的机器学习导论书籍和适合程序员的数据挖掘书籍,例如
Machine Learning for Hackers
https://www.amazon.com/dp/1449303714?tag=inspiredalgor-20
Programming Collective Intelligence
https://www.amazon.com/dp/0596529325?tag=inspiredalgor-20
以及 Data Mining: Practical Machine Learning Tools and Techniques
https://www.amazon.com/dp/0123748569?tag=inspiredalgor-20
这些书都是很好的入门书籍,当然,还有一篇文章你可以了解更多这方面的内容:
Best Machine Learning Resources for Getting Started
http://machinelearningmastery.com/best-machine-learning-resources-for-getting-started/
2.视频概述:你可以先选择一些针对入门的或者外行人的概述机器学习的视频进行观看,例如:
nterview with Tom Mitchell
http://videolectures.net/mlas06_mitchell_itm/
以及 Peter Norvig on big data Facebook Tech Talk。
https://www.facebook.com/video/video.php?v=644326502463
3.和人们交谈:问一下他们是怎样进入这一个行业的,他们会对新手推荐什么样的资源,这行什么吸引他们等等。
初级
有初级水平的人已经对机器学习有了一点了解,他们已经看了一些数据和听了一些视频课程。他们知道他们的兴趣在哪,而且他们想知道的更多。他们已经开始上手了,并且想要把更多的事情做好。
初级水平的人需要做这样的一些事情,这些事情就是,他们需要阅读一些具有针对性的材料,并把他们所学到的知识综合成一个架构,如他们所知道的编程语言或他们所能解决的问题。
一些活动和资源是针对初级水平的人:
1.完成相应的课程:完成一些相应的课程,如斯坦福大学的机器学习课程,并在此过程中做适当的笔记,尽可能的完成作业,并在需要的时候多问几个问题。
2.看一些相关书籍:不是课本,但可以选择看一些之前推荐给初学者看的书籍。
3.学习一种工具:学会使用一门工具或库,如Scikit-Learn(http://scikit-learn.org/stable/), WEKA, R 或许和它们类似的工具。尤其是,学习你在书本上看到的,或者是在课堂里学习的算法并掌握其使用方法,并尝试在你的学习过程中运用它们。
4.编写一些代码:运行一个简单的算法,如感知,k-最邻近或者线性回归。写一个程序来把这些方法简单化,并学习各种在运行过程中要学到的微观决策。
5.看完教程:随后要完成这些教程。开始建立一个配有数据集,脚本甚至你可以查阅的源代码的小项目的目录,并且思考。
中级
初级水平的人已经阅读了一些数据和完成了一些课程。他们知道怎样使用一些工具并能编写一些运行算法的代码和完成相关的教程。而一个中级水平的人能根据自己的需求,完成自己的项目来学习新的方法,并且进行互动,同时从更好的社区学习。中级水平的人需要学习如何更准确的运行和使用算法,并从它们的完整性和健壮性出发。他们需要花大量的时间来学习数据的预处理、数据清洗、汇总和思考这些问题的类型,需要怎么解答,以此建立新的技能。
这里有一些活动和资源是针对中级水平的人:
1.小项目:设计一些能用机器学习进行问题解答的小程序项目和实验。这就像是设计和运行你的教程来达到探索你感兴趣的新方法的目的。你也许要运行一个算法,或者连接到一个库,它可以给你提供算法。Learn more about small projects(了解更多小项目的内容)(http://machinelearningmastery.com/self-study-machine-learning-projects/)。
2.数据分析:你要习惯探索和汇总数据集。自动化你的报告、知道什么时候用什么工具、并寻找一些你能进行探索、清洗和你可以练习你的方法的数据集,并交流一些有趣的事。
3.看一些教材:阅读并自己消化那些机器学习的教材。这时,你需要具备能自己一会数学描述技能的能力,并认识一些描述问题和算法的等级的形式。
4.编写差距:写一些开源的,针对机器学习平台和库的插件和程序包。这是一个教你如何编写具有健壮性和生产效率的算法实施工具的练习。在你的包里使用你自己的插件,并从相关社区寻求他人帮忙阅读代码,并根据代码的性质尽可能的涵盖到相关的平台中。
5.竞赛:参加一些机器学习竞赛,例如一些相关会议,或者由像
Kaggle
平台提供的竞赛。在里面参与讨论,问问题,参考一下别的参赛者是如何解决一个问题的。在一个项目中添加你的仓库,方法和相关的代码。
高级
具有高级水平的人不仅会编写代码,而且还能独自整合机器学习算法或运行这些算法。他们也许有过相关的参赛经验,或者写过一些插件。他们读了相关的教程,完成了相关的课程,并在这个领域有了很多新的认识,甚至他们还根据自身条件掌握了几个重要的深度学习方法。
高级水平的人会建立、利用和维护生产系统来保持机器学习的顺利进行。他们和这个领域的发展与时俱进,并渴望的探索和学习方法的细微之处,并从其它具有相同水平的人得到一些新的技巧,当然,他们自己也可以。
这里有一些活动和资源推荐个高级水平的人:
1.定制算法:根据实际需求修改算法,它也许就要针对会议或期刊的论文运行自定义概述来解决一些相关问题域。
2.新的算法:基于基本的形式来重新改造出一个新的算法来应对可能的挑战。这个更像是在给一个问题找最优解,而不是更新这个领域的前沿。
3.案例研究:阅读并甚至重现机器学习竞赛里的或其他人所运行过的案例进行重新的运行。这些“我怎么做”的论文已经文章通常都填满那些数据展现的微妙的专业技能,特征工程和方法的使用。
4.方法学:过程的系统化,无论是正式的或者是它自身的。他们有一个解决问题的方法和在此基础上得到结果,而且他们还致力于寻找一些方法来进一步的定义它们,并根据相关的提示提高这些进程,进行最好的练习,并得到更新更好的方法。
5.研究:参加一些会议、阅读相关的研究论文和专著,并和这个方面的专家进行交流。他们也许会写一些自己的论文并把它们公开,或者以博客的形式展现他们的工作。
想要精通还需要一个持续的过程,学习之旅远远没有结束。任何人可以在旅途的任何一个地方停下来,或者绕到别的地方并成为“竞赛者”或者“专业图书馆人员”。实际上,我是期待这样的换方向回是常态。
这篇文章的分解就像介绍了一系列的线性学习途径,涵盖入门乃至高级的学习途径,并且是针对程序员的。我很希望大家能发表不同的见解,而我也可以从中改进。这种分解只是我的建议,我提倡你参加的活动,并假设你在某一阶段有如此强烈的求知欲望。
原文链接:https://machinelearningmastery.com/self-study-guide-to-machine-learning/ 译文链接:http://shujuren.org/index.php/Article/update/aid/186