机器之心编辑部报道

机器学习成才之路:这是一条GitHub高赞的学习路径

通过互联网学习意味着可以在无垠的知识海洋中遨游,但也可能因为广阔而迷失。在这个项目中,作者为机器学习提供了一个完整的学习路径。从 ML 到 DL、Scikit-Learn 到 TensorFlow,你需要这份学海指南。

曾有多少次,当你试图接近某一个新主题或领域时,会感到困惑、迷失方向并且无「路」可循。要如何确保你能够深刻理解并且获得运用它的能力呢?当然是借鉴其他人的成熟路径,然后跟着他一步步学习,少走很多弯路。

在这篇文章中,作者总结了三四年内从互联网学习机器学习的经验,他收集了大量开源项目、工具、教程和视频链接等资源,并将它们组织成一条高效的学习路径。

  • 项目地址:https://github.com/clone95/Machine-Learning-Study-Path-March-2019

本资源库旨在为以下领域提供三种有机完整的学习路径:

  • 机器学习

  • 商业智能(即将发布)

  • 云计算(即将发布)

在此你将能够了解相关原理并且在项目实践中予以运用。如果仔细遵循这些学习路径,则可以从零开始构建完整的认识和获得始终可用的技能。事实上,这些学习路径不需要之前有相关知识,但基础编程和简单数学是理解和实践大多数概念的必要条件。

这里列出的每一个资源都是免费或开源的,作者设法以简洁方式进行表述以避免显得太过复杂。此外,作者试图按照层次和复杂程度来组织内容,从而为学习机器学习原理提供一个连贯的概念。

作者表示,第二本指南(商业智能)将在 2 至 3 周内发布:

  • 机器学习生涯-已发布

  • 商业智能生涯-即将发布

  • 云计算生涯-即将发布

以下是不同学习路径的的路线图(机器学习的路线图已发布)。

三大路径与专题

在三大路径中,机器学习工程师已经完成并发布,其它商业数据分析云计算还没有完成。其中在机器学习工程师需要从基本的工具、传统机器学习深度学习打造完整的知识体系,同时也要知道如何工程化地开发和部署模型。

在学习 ML 和 DL 的过程中,作者表示重点是按照层次理解各模型的概念,并通过优秀的开源框架实现这些概念。文章后面会具体介绍机器学习工程师应该学习哪些模型与工具才能一步步成长。

对于后面的两条路径,它们注重的内容不同,知识体系也不一样,有需要的同学还需要等几周。此外,作者还提供了一些额外的扩展知识,包括数据专题和软技能专题。

其中数据专题介绍了数据的各种操作,它们的确是每一位数据工作者的核心工具包。从某种角度看,与数据打交道是一门艺术,最佳实践会帮助你理解处理数据的正确方式,但同时你也需要培养一种如何处理数据的「直觉」,而这种「直觉」大都是由情境和经验驱动的。基于此,这些专题将着重讨论训练和实践。

机器学习工程师成才之路

这一部分介绍了已经发布的「机器学习工程师」学习路径,作者介绍了很多学习资源,我们只展示了简要的示例,更多细节请查看原项目。

这里列出的所有东西都是开源且免费的,而且大部分来自世界著名的大学和开源协会。

当我们学习一些新的东西,尤其是那些内容广泛又复杂的事物时,避免混淆是很有必要的。因此本文接下来将介绍一些相关内容,而且尽可能采用那些来自相同语境和作者的内容。如果没有合适的内容,作者收集了理论和例子以及一些指向资源的内容,如「______的最佳实践」。

作者将学习路径分为四部分:

1. 先决条件

  • Python

  • Jupyter Notebook

  • 需要掌握的数学

  • 机器学习路径

2. 用 Scikit-Learn 库进行机器学习

  • 为什么选择 Scikit-Learn?

  • 端到端机器学习项目

  • 线性回归

  • 分类

  • 训练模型

  • 支持向量机

  • 决策树

  • 集成学习随机森林

  • 监督学习

  • 当前总结和未来展望

3. 用 TensorFlow 学习神经网络

  • 为什么选择 TensorFlow

  • 启动和运行 TensorFlow

  • ANN——人工神经网络

  • CNN——卷积神经网络

  • RNN——循环神经网络

  • 训练网络:最佳实践

  • 自编码器

  • 强化学习

  • 下一步

4. 学习工具

  • 机器学习项目

  • 数据科学工具

  • 博客/Youtube 频道/网站

背景知识

Python 是最有用和受欢迎的编程语言之一,因此它用于机器学习领域是无可厚非的事。和数据科学领域的大部分框架一样,TensorFlow 和 Python 结合了,而 Scikit-Learn 则是用 Python 写的。

简而言之,Jupyter Notebook 就是用来写并运行 Python 代码的编辑器。与数据打交道意味着需要大量实验,并将实验组织成某些具体的形式以获取潜在知识,所以 Jupyter Notebook 就必不可少了。

Python 和 Jupyer Notebook 是最基础的模块,相信大家已经非常熟了。如果需要走机器学习之路,除了 Python 外,首先就需要知道如何使用数值计算库 NumPy、可视化库 Matplotlib 和数据预处理库 Pandas,它们都是机器学习工程必不可少的工具。

有人告诉你机器学习背后的数学很难?这么说也没错。但是,要知道你每次要用它的时候,机器会为你处理这些。所以重点是抓住主要概念并认识到其局限性和应用方面。如果你不熟悉这些概念,那就学习,因为这是所有一切的原理。

有了这三种资源,你就能够明白你真正需要深入理解的大部分东西。

  • 关于线性代数的精品课程:https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/

  • 与基本概率和统计学概念结合:https://www.edx.org/course/introduction-to-probability-0

  • 你需要了解的大多数数学:https://explained.ai/matrix-calculus/index.html#sec4.5

如下书籍所述,它描述了有关什么是机器学习以及什么时候需要机器学习,这些都是最简洁和最具启发性的概述。

地址:https://www.oreilly.com/library/view/hands-on-machine-learning/9781491962282/ch01.html

传统编程开发流程。

机器学习开发流程。

机器学习与 Scikit-Learn

Scikit-Learn 是最完整、最成熟以及完档最完整的机器学习任务库之一。Scikit-Learn 利用功能强大和先进的模型实现「开箱即用」,并且为数据科学流程提供设施功能。初次使用时,作者建议你过一遍下面的 Kaggle 案例,它目的是试图对泰坦尼克号上的乘客是否最有可能生还作出预测。

泰坦尼克号示例:https://www.kaggle.com/startupsci/titanic-data-science-solutions

其它更多的示例与资料可在 Kaggle 上获得,该平台提供大量免费数据集以及有趣的挑战和机器学习模型试验。

1. 线性回归

最简单的机器学习形式,也是每个对预测数据集结果感兴趣的人的起点。

  • 例 1:https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py

  • 例 2:https://bigdata-madesimple.com/how-to-run-linear-regression-in-python-scikit-learn/

  • 例 3:https://www.geeksforgeeks.org/linear-regression-python-implementation/

2. 分类

当想要从不同的可能性中预测结果时,分类是最重要的机器学习任务之一。

  • 二分类:https://machinelearningmastery.com/make-predictions-scikit-learn/

  • logistic 回归:https://towardsdatascience.com/building-a-logistic-regression-in-python-301d27367c24

  • 分类器度量标准:https://medium.com/thalus-ai/performance-metrics-for-classification-problems-in-machine-learning-part-i-b085d432082b

3. 支持向量机(SVM)

支持向量机是一种非常经典的 ML 模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是类别间隔最大化,最终转化为一个凸二次规划问题来求解。

  • 理论解释:https://www.bilibili.com/video/av28186618 

  • 实战指南:https://www.bilibili.com/video/av38543231 

  • 实战指南:http://dataaspirant.com/2017/02/01/decision-tree-algorithm-python-with-scikit-learn/

4. 决策树

决策树预测结果背后最简单但最有效的方法之一,它们被用于很多方面(如随机森林)。

  • 理论解释:https://www.bilibili.com/video/av26086646

  • 实战指南:https://www.bilibili.com/video/av35523476

  • 实战指南:http://dataaspirant.com/2017/02/01/decision-tree-algorithm-python-with-scikit-learn/

5. 集成学习随机森林

集成学习是利用所有不同特征、一些机器学习模型的优缺点来获得一组「投票者」,这些投票者在每次预测时都会给你最有可能的结果,这些投票由不同的分类器给出(SVM、ID3 算法、logistic 回归)。

6. 无监督学习

  • 台大李宏毅视频:https://www.bilibili.com/video/av10590361/?p=24

  • explains Unsupervised Learning really well:https://towardsdatascience.com/unsupervised-learning-with-python-173c51dc7f03

  • 监督学习、有监督学习强化学习的区别:https://blogs.nvidia.com/blog/2018/08/02/supervised-unsupervised-learning/

深度学习TensorFlow

自 2015 年开源以来,深度学习框架的天下就属于 TensorFlow。不论是 GitHub 的收藏量或 Fork 量,还是业界使用量都无可比拟地位列顶尖。这一部分作者介绍了很多 TensorFlow 相关的教程与实现,推荐读者可以直接看 TensorFlow 的官方教程。对于深度学习,读者可以跟着斯坦福的 CS231n 课程或《深度学习》进行学习。

在了解 TensorFlow 后,作者表示我们可以迭代地学习用深度学习做工程:

  1. 通过斯坦福 CS231n、吴恩达的 DL 专项课程或李宏毅的 ML 课程理解最基本的概念,不需要完全弄懂数学推导,只需要知道是什么为什么就行。

  2. 每一次深度挖掘一个专题,包括理论、教程、实现案例(例如 RNN 理论、RNN 教程和 RNN 实现案例)。

  3. 第二步循环多个主题后,再看一遍第一步的资源,抓住主要的推导与细节。

后面作者从全连接网络、循环网络、卷积网络和自编码器等模块介绍了很多学习资源,详细内容请查看原 GitHub 项目。

学习工具

这一部分,作者整理大量学习资源,包括机器学习项目、工具、Youtube 频道、博客、网站等,感兴趣的读者可自行查看。

入门TensorFlow深度学习机器学习
172
相关数据
吴恩达人物

斯坦福大学教授,人工智能著名学者,机器学习教育者。2011年,吴恩达在谷歌创建了谷歌大脑项目,以通过分布式集群计算机开发超大规模的人工神经网络。2014年5月16日,吴恩达加入百度,负责“百度大脑”计划,并担任百度公司首席科学家。2017年3月20日,吴恩达宣布从百度辞职。2017年12月,吴恩达宣布成立人工智能公司Landing.ai,并担任公司的首席执行官。2018年1月,吴恩达成立了投资机构AI Fund。

深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

数据分析技术

数据分析是一类统计方法,其主要特点是多维性和描述性。有些几何方法有助于揭示不同的数据之间存在的关系,并绘制出统计信息图,以更简洁的解释这些数据中包含的主要信息。其他一些用于收集数据,以便弄清哪些是同质的,从而更好地了解数据。 数据分析可以处理大量数据,并确定这些数据最有用的部分。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

集成学习技术

集成学习是指使用多种兼容的学习算法/模型来执行单个任务的技术,目的是为了得到更佳的预测表现。集成学习的主要方法可归类为三大类: 堆叠(Stacking)、提升(Boosting) 和 装袋(Bagging/bootstrapaggregating)。其中最流行的方法包括随机森林、梯度提升、AdaBoost、梯度提升决策树(GBDT)和XGBoost。

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

文本分类技术

该技术可被用于理解、组织和分类结构化或非结构化文本文档。文本挖掘所使用的模型有词袋(BOW)模型、语言模型(ngram)和主题模型。隐马尔可夫模型通常用于词性标注(POS)。其涵盖的主要任务有句法分析、情绪分析和垃圾信息检测。

二次规划技术

二次规划(Quadratic programming),在运筹学当中,是一种特殊类型的最佳化问题。

商业智能技术

商业智能(Business Intelligence,BI),又称商业智慧或商务智能,指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数据分析以实现商业价值。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

随机森林技术

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。而"Random Forests"是他们的商标。这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合Breimans的"Bootstrap aggregating"想法和Ho的"random subspace method" 以建造决策树的集合。

线性回归技术

在现实世界中,存在着大量这样的情况:两个变量例如X和Y有一些依赖关系。由X可以部分地决定Y的值,但这种决定往往不很确切。常常用来说明这种依赖关系的最简单、直观的例子是体重与身高,用Y表示他的体重。众所周知,一般说来,当X大时,Y也倾向于大,但由X不能严格地决定Y。又如,城市生活用电量Y与气温X有很大的关系。在夏天气温很高或冬天气温很低时,由于室内空调、冰箱等家用电器的使用,可能用电就高,相反,在春秋季节气温不高也不低,用电量就可能少。但我们不能由气温X准确地决定用电量Y。类似的例子还很多,变量之间的这种关系称为“相关关系”,回归模型就是研究相关关系的一个有力工具。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

云计算技术

云计算(英语:cloud computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。

监督学习技术

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

支持向量机技术

在机器学习中,支持向量机是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

线性代数技术

线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。向量空间是现代数学的一个重要课题;因而,线性代数被广泛地应用于抽象代数和泛函分析中;通过解析几何,线性代数得以被具体表示。线性代数的理论已被泛化为算子理论。由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

Jupyter技术

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 。

推荐文章
贯彻快乐
里面的链接都不能复制么?