机器学习自学指南

2116 查看

事实上有许多的途径可以了解机器学习,也有许多的资源例如书籍、公开课等可为所用,一些相关的比赛和工具也是你了解这个领域的好帮手。本文我将围绕这个话题,给出一些总结性的认识,并为你由程序员到机器学习高手的蜕变旅程中提供一些学习指引。

机器学习的四个层次

根据能力可以将学习过程分成四个阶段。这也是一个有助于我们将所有学习资源进行分类的好方法。

  1. 初学阶段
  2. 新手阶段
  3. 中级阶段
  4. 高级阶段

我之所以把初学阶段和新手阶段区分开来,是因为我想让那些完全初学者(对这个领域感兴趣的程序员)在初学阶段对机器学习有一个大致的认识,以便决定是否继续深入。

我们将分别探讨这四个阶段,并推荐一些能够帮助我们更好地理解机器学习和提高相关技能的资源。对学习阶段进行这样的分类只是我个人的建议,也许每个分类的前后阶段中也有一些适合当前阶段的资源。

我认为对机器学习有一个整体性的认识是非常有帮助的,我也希望能听听你们的想法,通过在下面评论告诉我吧!

Four-Levels-of-Machine-Learning

初学阶段

初学者是指那些对机器学习感兴趣的程序员。他们或许已经接触过一些相关的书籍、wiki网页,或者是已经上过几节机器学习课程,但是他们并没有真正地了解机器学习。他们在学习过程感到沮丧是因为他们得到的建议往往是针对中级或高级阶段的。

初学者需要的是一个感性的认识而不是纯粹的代码、教科书、课程。他们首先需要对机器学习有一个是什么、为什么、怎么做的认识以此为接下来的阶段学习奠定基础。

新手阶段

新手是指那些已经对机器学习有一定了解的人,他们已经阅读过一些专业书籍或者是接受过完整地课程学习,并且对这个东西有很大的兴趣想做更深入的了解,想通过进一步学习去解决他们所面临的问题。

下面是给新手的一些资料或者建议:

  • 完成一门课程:完整地学习一门机器学习的课程,例如斯坦福大学的机器学习课程。多做课程笔记,尽可能地完成课程作业,多问问题。
  • 阅读一些书籍:这里指的不是教科书,而是为上面所列举的为程序员初学者所准备的书籍。
  • 掌握一门工具:学会使用一门分析工具或者类库,例如python的机器学习包Scikit-Learn、java的机器学习包WEKAR语言或者其他类似的。具体地说,学习如何使用你在课程或书本上学来的算法,看看它们处理问题的实际效果。
  • 写一写代码:动手实现一些简单的算法,例如感知机、K近邻、线性回归。试图写一些小程序去阐述你对这些算法的理解。
  • 学习相关教程:完整地跟一门教程,为你所完成的小项目建立一个文件夹,其中包含数据集、脚本代码等,以便你可以随时回顾并有所收获。

中级阶段

在新手阶段已经阅读过一些专业书籍并完成了一些专业课程,这些人已经懂得如何使用机器学习相关的工具,并且也已经为实现机器学习算法和完成一些教程写过不少的代码了。中级阶段其实是一个自我突破的过程,可以通过建立自己的项目去探索新的技巧并在社区的交流互动中获取更多的知识。

中级阶段的目标是学习如何实现并使用准确、合适、健壮机器学习算法。同样,他们也在数据预处理、数据清洗、归纳总结上花了不少时间,并思考这些数据能解决什么问题。

下面是给中级学习者的一些资料或者建议:

  • 建立自己的小项目:自己设计小型的编程项目或者是应用机器学习算法解决问题的小实验。这就像是为探索你自己所感兴趣的技术而设计一些教程。你可以自己实现一个算法或者是提供一些实现这些算法类库的链接。
  • 数据分析:习惯于从数据集中探索并总结。知道什么时候该用什么工具,获取用于探索、学习相关技术的数据。
  • 阅读教科书:阅读并消化机器学习相关的教科书。这可能对理解用数学方式描述相关技术的能力有一定的要求,并且需要了解用公式的方式去对描述问题和算法。
  • 编写你自己的工具:为开源的机器学习平台或类库编写插件和相关的程序包。这是学习如何实现健壮的、能用于生产环境下的算法的一个很好的锻炼机会。将你的程序包运用到项目中,将代码提交给社区进行代码审核,如果可能的话,努力将你的程序发布到开源的平台上,从大家的反馈中进一步学习。
  • 竞赛:参加与机器学习有关的比赛,比如与机器学习会议有关的,或者是提供像Kaggle这样的平台的比赛。参与讨论、提问题,学习其他参赛者是如何解决问题的。将这些项目、方法和代码添加到你的项目库中。

高级阶段

机器学习的高级玩家是那些已经整理过大量机器学习算法或者是自己独立实现算法的人。他们或许参加过机器学习的竞赛又或许写过机器学习的程序包。他们已经阅读过许多书籍、学习过许多相关课程,对这一领域有较充分的认识,同时对自己研究的几个关键技术有很深入的了解。

这些高级使用者平时负责生产环境下的机器学习系统的建立、部署和维护。他们能时刻紧跟这个行业的最新动态,通过自己或他人的一线开发经验发现并了解每一种机器学习技术的细微差距。

下面是给高级阶段学习者的一些资料:

  • 定制开发算法:根据业务需求定制开发算法,实现会议、期刊论文中关于某个相似问题的算法。
  • 自己设计算法:设计全新的算法去解决工作中 遇到的问题,这样做的目的更多的是为工作中所面临的困难找到最佳的解决方案,而不是进行该领域的前沿研究。
  • 案例学习:阅读甚至是重新设计机器学习竞赛或者是其他参赛者所提供的实际案例。这些一直在谈“我是如何做到”的论文或文章中总是塞满了关于数据准备、工程实践以及使用技术的微妙技巧。
  • 方法论:总结处理问题的过程并系统化,可以正式地分享出来也可以仅仅是作为个人总结。他们总有一套自己解决问题的思路并且不断地提炼和改进处理过程,试图用更好的技术来或得最佳实践。
  • 学术研究:参加学术会议,阅读研究论文和学术专著,与机器学习领域的专家交流学习。他们会记录工作中所积累的经验发布到相关的期刊或者自己博客上,然后回到工作岗位继续研究。

知识在不断地收获,但学习永无止境。在机器学习的征途中遇到问题时你可以随时停住脚步自己钻研问题自行解决,或者绕道而行查阅资料借用群体智慧,事实上,我希望绕道而行成为一种常态。

这样的学习阶段划分是以程序员的角度来规划的,这可以作为技术人员实现从入门到精通的一条线性学习路线。我很乐意收到对于这篇文章的批评建议,这样可以使文章变得更好。在特定的学习阶段你可以得到更多的学习资源,因为针对每个阶段所推荐的学习资源也仅仅是我个人的建议。

好了,现在想想你在哪个学习阶段呢?接下来你该怎么做?