进阶篇:从 0 到 1 掌握 Python 机器学习(附资源)

进阶篇

机器学习算法

本篇是使用 Python 掌握机器学习的 7 个步骤系列文章的下篇,如果你已经学习了该系列的上篇基础篇:从 0 到 1 掌握 Python 机器学习(附资源),那么应该达到了令人满意的学习速度和熟练技能;如果没有的话,你也许应该回顾一下上篇,具体花费多少时间,取决于你当前的理解水平。我保证这样做是值得的。快速回顾之后,本篇文章会更明确地集中于几个机器学习相关的任务集上。由于安全地跳过了一些基础模块——Python 基础、机器学习基础等等——我们可以直接进入到不同的机器学习算法之中。这次我们可以根据功能更好地分类教程。

第1步:机器学习基础回顾&一个新视角

上篇中包括以下几步:

1. Python 基础技能

2. 机器学习基础技能

3. Python 包概述

4. 运用 Python 开始机器学习:介绍&模型评估

5. 关于 Python 的机器学习主题:k-均值聚类、决策树、线性回归&逻辑回归

6. 关于 Python 的高阶机器学习主题:支持向量机、随机森林、PCA 降维

7. Python 中的深度学习

如上所述,如果你正准备从头开始,我建议你按顺序读完上篇。我也会列出所有适合新手的入门材料,安装说明包含在上篇文章中。

然而,如果你已经读过,我会从下面最基础的开始:

  • 机器学习关键术语解释,作者 Matthew Mayo。地址:http://suo.im/2URQGm
  • 维基百科条目:统计学分类。地址:http://suo.im/mquen
  • 机器学习:一个完整而详细的概述,作者 Alex Castrounis。地址:http://suo.im/1yjSSq

如果你正在寻找学习机器学习基础的替代或补充性方法,恰好我可以把正在看的 Shai Ben-David 的视频讲座和 Shai Shalev-Shwartz 的教科书推荐给你:

  • Shai Ben-David 的机器学习介绍视频讲座,滑铁卢大学。地址:http://suo.im/1TFlK6
  • 理解机器学习:从理论到算法,作者 Shai Ben-David & Shai Shalev-Shwartz。地址:http://suo.im/1NL0ix

记住,这些介绍性资料并不需要全部看完才能开始我写的系列文章。视频讲座、教科书及其他资源可在以下情况查阅:当使用机器学习算法实现模型时或者当合适的概念被实际应用在后续步骤之中时。具体情况自己判断。

第2步:更多的分类

我们从新材料开始,首先巩固一下我们的分类技术并引入一些额外的算法。虽然本篇文章的第一部分涵盖决策树、支持向量机、逻辑回归以及合成分类随机森林,我们还是会添加 k-最近邻、朴素贝叶斯分类器和多层感知器。

Scikit-learn 分类器

k-最近邻(kNN)是一个简单分类器和懒惰学习者的示例,其中所有计算都发生在分类时间上(而不是提前在训练步骤期间发生)。kNN 是非参数的,通过比较数据实例和 k 最近实例来决定如何分类。

  • 使用 Python 进行 k-最近邻分类。地址:http://suo.im/2zqW0t

朴素贝叶斯是基于贝叶斯定理的分类器。它假定特征之间存在独立性,并且一个类中任何特定特征的存在与任何其它特征在同一类中的存在无关。

  • 使用 Scikit-learn 进行文档分类,作者 Zac Stewart。地址:http://suo.im/2uwBm3

多层感知器(MLP)是一个简单的前馈神经网络,由多层节点组成,其中每个层与随后的层完全连接。多层感知器在 Scikit-learn 版本 0.18 中作了介绍。

首先从 Scikit-learn 文档中阅读 MLP 分类器的概述,然后使用教程练习实现。

  • 神经网络模型(监督式),Scikit-learn 文档。地址:http://suo.im/3oR76l
  • Python 和 Scikit-learn 的神经网络初学者指南 0.18!作者 Jose Portilla。地址:http://suo.im/2tX6rG

第3步:更多聚类

我们现在接着讲聚类,一种无监督学习形式。上篇中,我们讨论了 k-means 算法; 我们在此介绍 DBSCAN 和期望最大化(EM)。

Scikit-learn聚类算法

首先,阅读这些介绍性文章; 第一个是 k 均值和 EM 聚类技术的快速比较,是对新聚类形式的一个很好的继续,第二个是对 Scikit-learn 中可用的聚类技术的概述:

  • 聚类技术比较:简明技术概述,作者 Matthew Mayo。地址:http://suo.im/4ctIvI
  • 在玩具数据集中比较不同的聚类算法,Scikit-learn 文档。地址:http://suo.im/4uvbbM

期望最大化(EM)是概率聚类算法,并因此涉及确定实例属于特定聚类的概率。EM 接近统计模型中参数的最大似然性或最大后验估计(Han、Kamber 和 Pei)。EM 过程从一组参数开始迭代直到相对于 k 聚类的聚类最大化。

首先阅读关于 EM 算法的教程。接下来,看看相关的 Scikit-learn 文档。最后,按照教程使用 Python 自己实现 EM 聚类。

  • 期望最大化(EM)算法教程,作者 Elena Sharova。地址:http://suo.im/33ukYd
  • 高斯混合模型,Scikit-learn 文档。地址:http://suo.im/20C2tZ 。
  • 使用 Python 构建高斯混合模型的快速介绍,作者 Tiago Ramalho。地址:http://suo.im/4oxFsj

如果高斯混合模型初看起来令人困惑,那么来自 Scikit-learn 文档的这一相关部分应该可以减轻任何多余的担心:

高斯混合对象实现期望最大化(EM)算法以拟合高斯模型混合。

基于密度且具有噪声的空间聚类应用(DBSCAN)通过将密集数据点分组在一起,并将低密度数据点指定为异常值来进行操作。

首先从 Scikit-learn 的文档中阅读并遵循 DBSCAN 的示例实现,然后按照简明的教程学习:

  • DBSCAN 聚类算法演示,Scikit-learn 文档。地址:http://suo.im/1l9tvX
  • 基于密度的聚类算法(DBSCAN)和实现。地址:http://suo.im/1LEoXC

第4步:更多的集成方法

上篇只涉及一个单一的集成方法:随机森林(RF)。RF 作为一个顶级的分类器,在过去几年中取得了巨大的成功,但它肯定不是唯一的集成分类器。我们将看看包装、提升和投票。

给我一个提升

首先,阅读这些集成学习器的概述,第一个是通用性的;第二个是它们与 Scikit-learn 有关:

  • 集成学习器介绍,作者 Matthew Mayo。地址:http://suo.im/cLESw
  • Scikit-learn 中的集成方法,Scikit-learn 文档。地址:http://suo.im/yFuY9

然后,在继续使用新的集成方法之前,请通过一个新的教程快速学习随机森林:

  • Python 中的随机森林,来自 Yhat。地址:http://suo.im/2eujI

包装、提升和投票都是不同形式的集成分类器,全部涉及建构多个模型; 然而,这些模型由什么算法构建,模型使用的数据,以及结果如何最终组合起来,这些都会随着方案而变化。

  • 包装:从同一分类算法构建多个模型,同时使用来自训练集的不同(独立)数据样本——Scikit-learn 实现包装分类器
  • 提升:从同一分类算法构建多个模型,一个接一个地链接模型,以提高每个后续模型的学习——Scikit-learn 实现 AdaBoost
  • 投票:构建来自不同分类算法的多个模型,并且使用标准来确定模型如何最好地组合——Scikit-learn 实现投票分类器

那么,为什么要组合模型?为了从一个特定角度处理这个问题,这里是偏差-方差权衡的概述,具体涉及到提升,以下是 Scikit-learn 文档:

  • 单一评估器 vs 包装:偏差-方差分解,Scikit-learn 文档。地址:http://suo.im/3izlRB

现在你已经阅读了关于集成学习器的一些介绍性材料,并且对几个特定的集成分类器有了基本了解,下面介绍如何从 Machine Learning Mastery 中使用 Scikit-learn 在 Python 中实现集成分类器:

  • 使用 Scikit-learn 在 Python 中实现集成机器学习算法,作者 Jason Brownlee。地址:http://suo.im/9WEAr

第5步:梯度提升

下一步我们继续学习集成分类器,探讨一个当代最流行的机器学习算法。梯度提升最近在机器学习中产生了显著的影响,成为了 Kaggle 竞赛中最受欢迎和成功的算法之一。

给我一个梯度提升

首先,阅读梯度提升的概述:

  • 维基百科条目:梯度提升。地址:http://suo.im/TslWi

接下来,了解为什么梯度提升是 Kaggle 竞赛中「最制胜」的方法:

  • 为什么梯度提升完美解决了诸多 Kaggle 难题?Quora,地址:http://suo.im/3rS6ZO
  • Kaggle 大师解释什么是梯度提升,作者 Ben Gorman。地址:http://suo.im/3nXlWR

虽然 Scikit-learn 有自己的梯度提升实现,我们将稍作改变,使用 XGBoost 库,我们提到过这是一个更快的实现。

以下链接提供了 XGBoost 库的一些额外信息,以及梯度提升(出于必要):

  • 维基百科条目:XGBoost。地址:http://suo.im/2UlJ3V
  • Ghub 上的 XGBoost 库。地址:http://suo.im/2JeQI8
  • XGBoost 文档。地址:http://suo.im/QRRrm

现在,按照这个教程把所有汇聚起来:

  • Python 中 XGBoost 梯度提升树的实现指南,作者 Jesse Steinweg-Woods。地址:http://suo.im/4FTqD5

你还可以按照这些更简洁的示例进行强化:

  • XGBoost 在 Kaggle 上的示例(Python)。地址:http://suo.im/4F9A1J
  • Iris 数据集和 XGBoost 简单教程,作者 Ieva Zarina。地址:http://suo.im/2Lyb1a

第6步:更多的降维

降维是通过使用过程来获得一组主变量,将用于模型构建的变量从其初始数减少到一个减少数。

有两种主要形式的降维:

  • 1. 特征选择——选择相关特征的子集。地址:http://suo.im/4wlkrj
  • 2. 特征提取——构建一个信息性和非冗余的衍生值特征集。地址:http://suo.im/3Gf0Yw

下面是一对常用的特征提取方法。

主成分分析(PCA)是一种统计步骤,它使用正交变换将可能相关变量的一组观测值转换为一组称为主成分的线性不相关变量值。主成分的数量小于或等于原始变量的数量。这种变换以这样的方式定义,即第一主成分具有最大可能的方差(即考虑数据中尽可能多的变率)

以上定义来自 PCA 维基百科条目,如果感兴趣可进一步阅读。但是,下面的概述/教程非常彻底:

  • 主成分分析:3 个简单的步骤,作者 Sebastian Raschka。地址:http://suo.im/1ahFdW

线性判别分析(LDA)是 Fisher 线性判别的泛化,是统计学、模式识别和机器学习中使用的一种方法,用于发现线性组合特征或分离两个或多个类别的对象或事件的特征。所得到的组合可以用作线性分类器,或者更常见地,用作后续分类之前的降维。

LDA 与方差分析(ANOVA)和回归分析密切相关,它同样尝试将一个因变量表示为其他特征或测量的线性组合。然而,ANOVA 使用分类独立变量和连续因变量,而判别分析具有连续的独立变量和分类依赖变量(即类标签)。

上面的定义也来自维基百科。下面是完整的阅读:

  • 线性判别分析——直至比特,作者 Sebastian Raschka。地址:http://suo.im/gyDOb

你对 PCA 和 LDA 对于降维的实际差异是否感到困惑?Sebastian Raschka 做了如下澄清:

线性判别分析(LDA)和主成分分析(PCA)都是通常用于降维的线性转换技术。PCA 可以被描述为「无监督」算法,因为它「忽略」类标签,并且其目标是找到使数据集中的方差最大化的方向(所谓的主成分)。与 PCA 相反,LDA 是「监督的」并且计算表示使多个类之间的间隔最大化的轴的方向(「线性判别式」)。

有关这方面的简要说明,请阅读以下内容:

  • LDA 和 PCA 之间的降维有什么区别?作者 Sebastian Raschka。地址:http://suo.im/2IPt0U

第 7 步:更多的深度学习

上篇中提供了一个学习神经网络和深度学习的入口。如果你的学习到目前比较顺利并希望巩固对神经网络的理解,并练习实现几个常见的神经网络模型,那么请继续往下看。

首先,看一些深度学习基础材料:

  • 深度学习关键术语及解释,作者 Matthew Mayo
  • 理解深度学习的 7 个步骤,作者 Matthew Mayo。地址:http://suo.im/3QmEfV

接下来,在 Google 的机器智能开源软件库 TensorFlow(一个有效的深度学习框架和现今几乎是最好的神经网络工具)尝试一些简明的概述/教程:

  • 机器学习敲门砖:任何人都能看懂的 TensorFlow 介绍(第 1、2 部分)
  • 入门级解读:小白也能看懂的 TensorFlow 介绍(第 3、4 部分)

最后,直接从 TensorFlow 网站试用这些教程,它实现了一些最流行和常见的神经网络模型:

  • 循环神经网络,谷歌 TensorFlow 教程。地址:http://suo.im/2gtkze
  • 卷积神经网络,谷歌 TensorFlow 教程。地址:http://suo.im/g8Lbg

此外,目前一篇关于 7 个步骤掌握深度学习的文章正在写作之中,重点介绍使用位于 TensorFlow 顶部的高级 API,以增模型实现的容易性和灵活性。我也将在完成后在这儿添加一个链接。

相关的:

  • 进入机器学习行业之前应该阅读的 5 本电子书。地址:http://suo.im/SlZKt
  • 理解深度学习的 7 个步骤。地址:http://suo.im/3QmEfV
  • 机器学习关键术语及解释。地址:http://suo.im/2URQGm

END.

本文由机器之心整理

作者为 KDnuggets 副主编兼数据科学家 Matthew Mayo

链接:https://www.jiqizhixin.com/articles/6b42088a-3f36-4a57-b060-4a362993dea4

原文发布于微信公众号 - PPV课数据科学社区(ppvke123)

原文发表时间:2017-06-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

224秒训练ImageNet!这次创纪录的是索尼大法

随着用于深度学习的数据集和深度神经网络模型的规模增大,训练模型所需的时间也在增加具有数据并行性的大规模分布式深度学习可以有效缩短训练时间。

9610
来自专栏机器之心

AAAI 2018 | 阿尔伯塔大学提出新型多步强化学习方法,结合已有TD算法实现更好性能

375110
来自专栏杨熹的专栏

强化学习 8: approximate reinforcement learning

前面说过,对于骑自行车这种可能只有十个 state,四个 aciton 的小问题上面,交叉熵可以解决,但如果在自动驾驶,或者打游戏上面,它却不行,因为这时我们没...

12610
来自专栏新智元

【新式DNN】CortexNet模拟视觉系统,预测视频下一帧

【新智元导读】受到人类视觉系统的启发,普渡大学的研究人员提出了深度神经网络 CortexNet,它不仅具有自下而上的前馈连接,而且还模拟了我们视觉皮层中存在的丰...

45460
来自专栏磐创AI技术团队的专栏

一个完整的机器学习项目在Python中的演练(二)

24970
来自专栏人工智能

从卷积神经网络的角度看世界

原文地址:https://blog.keras.io/how-convolutional-neural-networks-see-the-world.html

42060
来自专栏机器之心

学界 | 从深度学习研究论文中自动生成可执行源代码

34960
来自专栏CVer

ECCV 2018 收录论文名单全公布

前天从朱政研究员那里得知,ECCV 2018所有录用论文已经开放并支持PDF下载了。因为事情较多,就没来得及推送到CVer公众号,而是在Amusi的知乎专栏上推...

32830
来自专栏AI研习社

一文带你读懂 OCR

OCR,或光学字符识别,是最早的计算机视觉任务之一,因为在某些方面它不需要用到深度学习。因此,早在2012年深度学习热潮之前,OCR就有了各种不同的应用,有些甚...

39820
来自专栏PPV课数据科学社区

【学习】机器学习中的数据清洗与特征处理综述

背景 随着美团交易规模的逐步增大,积累下来的业务数据和交易数据越来越多,这些数据是美团做为一个团购平台最宝贵的财富。通过对这些数据的分析和挖掘,不仅能给美团业务...

44550

扫码关注云+社区

领取腾讯云代金券