第 8 章 工具和框架篇

8.1 常见框架

一、SciKit-learn

scikit-learn 是一种强大的基于 Python 语言的机器学习算法库(https://scikit-learn.org/stable/)。其中,包含了算法预处理,模型参数择优,回归与分类等算法,官方文档包含了每一种算法的例子,代码简洁优美,可视化了每一种算法结果,即能学习 python,也是帮助开发者更好理解机器学习算法的便利工具。

尤其在监督学习部分,Scikit-learn 提供了广义线性模型、支持向量机、最近邻算法、高斯过程、朴素贝叶斯、决策树和集成方法等算法教程,同时还介绍了特征选择、随即梯度下降算法、线性与二次判别分析等在监督学习中非常重要的概念;而在半监督学习中的标签传播算法和无监督学习中的聚类与降维算法方面,也有非常多的教程。

GitHub 地址:

https://github.com/scikit-learn/scikit-learn

二、TensorFlow

TensorFlow 是用于机器学习的端到端开源平台(https://tensorflow.org),也是 2019 年度 GitHub 上最受欢迎的项目。

它具有工具、库、社区资源全面且灵活的生态系统,提供稳定的 Python 和 C ++ API,以及其他语言的非保证向后兼容 API;能够帮助开发者们在 ML 领域的研究与发展,并使开发人员轻松构建和部署 ML 支持的应用程序。

GitHub 地址:

https://github.com/tensorflow/tensorflow

三、PyTorch

作为 TensorFlow 强有力竞争对手的 PyTorch,也是目前较为主流的深度学习工具之一。

PyTorch 是一个开源的机器学习框架,提供了两个高级功能,包括:具有强有力的 GPU 加速度的张量计算(如 NumPy),以及基于磁带自动调整系统构建的深度神经网络;可加快从研究原型到生产部署的过程。

此前,OpenAI 官方宣布了「全面转向 PyTorch」的消息,计划将自家平台的所有框架统一为 PyTorch,也进一步体现了 PyTorch 在深度学习方面的潜力。

GitHub 地址:

https://github.com/pytorch/pytorch

四、MXNET

MXNet 是一个功能齐全,可编程和可扩展的深入学习框架,支持最先进的深入学习模式(https://mxnet.apache.org/)。

MXNet 提供了混合编程模型(命令式和声明式)和大量编程语言的代码(包括 Python、C++、R、Scala、Julia、Matlab 和 JavaScript)的能力,是一个易安装易上手的开源深度学习工具,它提供了一个 python 接口 gluon,能够让开发者迅速搭建起神经网络,并进行高效训练。

GitHub 地址:

https://github.com/apache/incubator-mxnet

五、BERT

BERT 是一个基于双向 Transformer 的大规模预训练语言模型,用于对大量未标记的文本数据进行预训练,以学习一种语言表示形式,这种语言表示形式可用于对特定机器学习任务进行微调。

BERT 被称为是 NLP 领域中里程碑的进展;目前,BERT 也是 NLP 深度学习中的重要组成部分,很多之后的自然语言处理模型都是在此基础上优化与改进而得。

GitHub 地址:

https://github.com/google-research/bert

六、Transformers

Transformers 是神经机器翻译中使用的一种神经网络,它主要涉及将输入序列转换为输出序列的任务,这些任务包括语音识别和文本转换语音。

这类任务需要「记忆」,下一个句子必须与前一个句的上下文相关联(这是相当关键的),以免丢失重要的信息。通过将 attention 应用到正在使用的单词上,则可以解决当句子太长的时,RNN 或 CNN 无法跟踪上下文和内容的问题。

GitHub 地址:

https://github.com/huggingface/transformers

七、Spark MLlib

Spark 是一个开源集群运算框架,也是现在大数据领域热门开源软件之一(https://spark.apache.org/mllib/)。

由于 Spark 使用了内存内运算技术,它在内存上的运算速度比 Hadoop MapReduce 的运算速度快上 100 倍;这也使得 Spark MLlib 分布式计算框架运行非常高效、快速。它可以实现大部分机器学习,如:聚类、分类、回归等算法,并允许将数据加载至集群内存,多次对其进行查询,所以非常适合用于机器学习算法。

GitHub 地址:

https://github.com/apache/spark

8.2 sklearn

8.2.1 如何正确地实用sklearn

By Andreas Muller–Scikit learn 的核心开发人员,书籍《Python 机器学习入门》的作者,哥伦比亚大学数据科学研究所的科学家、讲师。

1.对于 Scikit 学习,每个人都可能在使用管道。如果你不使用管道,那你可能有些地方做错了。2 年前,我们引入了列转换器,它允许你处理具有连续和分类变量的数据,或者处理其他类型 One-Hot 编码器时,一切都很好。

2。我在机器学习中看到的一个常见错误是没有对度量标准给予足够的关注。Scikit-learn 将精度用作默认度量。但一旦你有了一个不平衡的数据,准确度是一个可怕的指标。你真的应该考虑使用其他指标。我们不会改变默认的度量标准,因为准确性被广泛使用,而且有如此清楚的解释。但是,在机器学习中,查看其他度量并为你的用例考虑是否使用它们是最常见的问题。

什么是管道?如果它不准确,还有什么其他指标更适合机器学习?

在 Scikit-learn 中,每个 ML 模型都封装在一个称为「估计器」的简单 python 类中。通常在机器学习过程中,你可能会有一个带有一系列预处理步骤的分类器。管道允许你封装所有预处理步骤、特征选择、缩放、变量编码等,以及通常在单个估计器中具有的最终监督模型。

所以你有一个对象来完成你所有的工作。它非常方便,能够使编写错误的代码出现的更少,因为它可以确保你正的训练集和测试集是一致的。最后,你应该使用交叉验证或网格搜索 CV。在这种情况下,重要的是所有的预处理都在交叉验证循环中进行。如果在交叉验证循环之外进行功能选择,可能会发生非常糟糕的事情。但在你的管道中,你知道一切都在交叉验证循环中。

8.4 Tensorflow

本项目是TensorFlow2.0学习笔记,主要参考官方文档,此外也添加个人许多个人使用心得体会等内容,本项目所有笔记也发布在博客园等平台,希望对你有所帮助。

TensorFlow2.0正式版在10月初已经发布,相比于1.X,2.0版的TensorFlow修改的不是一点半点,这些修改极大的弥补了1.X版本的反人类设计,提升了框架的整体易用性,绝对好评!

TensorFlow2.0(一):基本数据结构——张量

TensorFlow2.0(二):数学运算

TensorFlow2.0(三):张量排序、最大最小值

TensorFlow2.0(四):填充与复制

TensorFlow2.0(五):张量限幅

TensorFlow2.0(六):数据预处理中的Dataset

TensorFlow2.0(七):激活函数

TensorFlow2.0(八):误差计算——损失函数总结

TensorFlow2.0(9):TensorBoard可视化

TensorFlow2.0(10):加载自定义图片数据集到Dataset

TensorFlow2.0(11):tf.keras建模三部曲

TensorFlow2.0(12):模型保存与序列化

TensorFlow 2.4 来了:新功能解读

Tensorflow的妙用​

8.5 Pytorch

8.5.1 Pytorch教程

这是由 Stéphane d’Ascoli, Andrei Bursuc和Timothée Lacroix一起带来的“利用 PyTorch 进行深度学习的实践之旅”课程。
这个教程的优点有这么几个:

  • PPT讲解和实践教程穿插,好懂;

  • 实践教程都是Github项目,数据、代码一应俱全;

  • 教程特别详细,代码基础差也可以上手。

课程网址:
http://www.dataflowr.com

GitHub链接:
https://github.com/mlelarge/dataflowr