随着人工智能技术的发展与普及,Python 超越了许多其他编程语言,成为了机器学习领域中最热门最常用的编程语言之一。有许多原因致使 Python 在众多开发者中如此受追捧,其中之一便是其拥有大量的与机器学习相关的开源框架以及工具库。根据 builtwith.com 的数据显示,45% 的科技公司都倾向于使用 Python 作为人工智能与机器学习领域的编程语言。
使 Python 如此受欢迎主要由于:
● Python 从设计之初就是为效率而生,以使项目从开发到部署再在运维都能保持较高的生产力;● 坊间有大量的基于 Python 的开源框架及工具库;
● Python 易于上手,可以说是编程小白的福音;
● 相比起 C、Java、C++ 来讲,Python 的语法更简单,更高级,只需要更少行数的代码便能实现其他编程语言同样的功能;
● Python 的跨平台能力;
正是由于 Python 简单易用以及高开发效率,吸引了大量的开发者为其创建更多新的机器学习工具库;而又因为大量的机器学习工具库的出现,使得 Python 在机器学习领域变得如此流行。
下面我们就来探索一下机器学习领域中最受欢迎的十大框架或工具库:
Tensorflow
![2d5b17ce1dd59ec7aff5e1193ad7a301009ae112](https://i-blog.csdnimg.cn/blog_migrate/704989e0933603e330e9e5008777efd5.png)
如果你正在使用 Python 来从事机器学习项目,那么你一定听说过其中一个著名的框架——Tensorflow。Tensorflow 框架主要由 Google 大脑团队开发,主要用于深度学习计算。几乎所有的 Google 机器学习应用都使用了它。比如在使用 Google 语音搜索或者 Google 相册时,你其实都是在间接地在使用 Tensorflow 所构建的模型。
Tensorflow 把神经网络运算抽象成运算图(Graph),一个运算图中包含了大量的张量(Tensor)运算。而张量实际上就是 N 维数据的集合。神经网络运算的本质是通过张量运算来拟合输入张量与输出张量之间的映射关系。
并行运算是 Tensorflow 的主要优势之一。也就是说你可以通过代码设置来分配你的 CPU、GPU 计算资源来实现并行化的图运算。
Tensorflow 框架中所有的工具库都是用 C 或者 C++ 来编写,但它提供了用 Python 来编写的接口封装。事实上,你用 Python 编写的神经网络模型最终会调用基于 C 和 C++ 编写的 Tensorflow 内核来执行运算。
Tensorflow 使用了类似 XLA(Accelerated Linear Algebra / 加速线性代数)等技术对运算过程进行过优化,以保证其能够灵活地调用计算资源的同时保持高效的运算速度。
Keras
Keras 被认为是最酷的 Python 深度学习库之一。如果你是深度学习开发方面的新手,那么非常建议你使用它。它提供了非常简明的机制来表达神经网络结构。它也提供了许多非常棒的工具用于神经网络模型的编译、数据的处理、以及网络结构的可视化等等。
Keras 本质上是对 Tensorflow、Theano 等基础框架作进一步的封装,以提供统一的 API 来简化神经网络的构建与训练。如果你打算以 Tensorflow 作为后端基础框架,则必须遵循以下架构图:
再有,Keras 提供了许多预处理的数据集,比如 MNIST,和预训练的模型,比如 VGG、Inception、 ResNet 等等。
Theano
![04e261e3841c4fde3827e11f6fa95646c04818f5](https://i-blog.csdnimg.cn/blog_migrate/37534a7da4203137c3e199e2ca838fe8.png)
Theano 是一个用于多维数组计算的 Python 运算框架。Theano 的工作原理与 Tensorflow 相似,但要比 Tensorflow 低效。因此它不适用于生产环境。
此外,Theano 还可以用于与 Tensorflow 类似的分布式或并行环境。
PyTorch
![b5028083966f4d5319c0c5d6763d9d536de49263](https://i-blog.csdnimg.cn/blog_migrate/3911d857c87a3e85e66fef5eca5325e0.png)
PyTorch 是最大的深度学习库,允许开发人员通过加速 GPU 执行张量计算,创建动态计算图,并自动计算梯度。 除此之外,PyTorch 还提供丰富的 API,用于解决与神经网络相关的应用问题。
这个深度学习库基于 Torch,这是一个用 C 语言实现的开源机器库,以 Lua 语言作了封装。与 Tensorflow 的区别在于 Tensorflow 用的是 “静态计算图” 的概念,而 PyTorch 用的是 “动态计算图” 的概念。最直观的感受是,用 PyTorch 来编写的神经网络模型代码更像常见的 Python 代码。PyTorch 是在 2017 年推出的,自成立以来,该库越来越受欢迎并吸引了越来越多的机器学习开发人员。
LightGBM
![aff9a85b4ffccefe20fa955d1a33c3a7b183c901](https://i-blog.csdnimg.cn/blog_migrate/8a6947370380018ca2fdf85e040a219f.png)
Gradient Boosting 是最好和最受欢迎的机器学习库之一,它通过使用重新定义的基本模型和决策树来帮助开发人员构建新算法。 因此,有专门的库被设计用于快速有效地实现该方法。这些库包括 LightGBM, XGBoost, 和 CatBoost。这些库互为竞争对手,同样使用了几乎相同的思路来解决一个共同问题。这些库都提供了高度可扩展,优化和快速的梯度增强实现,使其在机器学习开发人员中很受欢迎。 因为大多数机器学习开发人员通过使用这些算法赢得了机器学习竞赛。
Numpy
![58bbb6a7e6662f9a78813eec0c5bf7f47d4a04e0](https://i-blog.csdnimg.cn/blog_migrate/a3c42ac7f576951def28b11c8206d2bf.png)
Numpy 是公认的最受欢迎的 Python 机器学习库之一。Tensorflow 以及其他的一些框架内部都使用了 Numpy 来对张量进行多种操作。数组接口是 Numpy 最佳及最重要的功能。这个接口可以用于把图像、音频、以及其他二进制流数据表示为多维实数数组。为了把这个库应用到机器学习中,掌握 Numpy 的操作对于开发者而言意义重大。
Pandas
Pandas 是一个 Python 机器学习库,它提供了各种高级的工具用于进行数据分析。其中一项了不起的功能便是它可以用一两行代码就能实现复杂的数据操作。Pandas 有许多内置的方法用于分组统计、合并数据、数据筛选、以及时间序列操作。所有的这些操作都有出色的性能表现。因此,使用 Pandas 通常用于数据挖掘任务。
SciPy
![928b6e81dad1944647d087f2ed47b0fc0b68e1fd](https://i-blog.csdnimg.cn/blog_migrate/8407af9dfef01557a873a8b57d30e50b.png)
SciPy 是一个应用开发者与工程师们使用的机器学习库。然而,你需要知道的是 SciPy 库与 SciPy-Stack 的区别。SciPy 库是 SciPy-Stack 的一个子集。SciPy 库包含了优化器、线性代数、积分、插值、快速傅立叶变换、信号和图像处理、统计等子模块。所有子模块中的函数都有完整的文档说明,使用方便。
SciPy 库的主要功能是基于 Numpy 来实现的,它的数组操作就是使用了 Numpy 的数组操作。
Scikits_Learn
Scikits-learn,又称为 sk-learn,是一个基于 Numpy 与 SciPy 的 Python 库。Sk-learn 被认为是用于处理复杂数据的最优秀的机器学习库之一。它包含了大量用于实现传统机器学习和数据挖掘任务的算法,比如数据降维、分类、回归、聚类、以及模型选择等。
随着时间的发展,sk-learn 不断演进。其中包括它加入了交叉验证功能,提供了使用多个衡量指标的能力。许多的训练方法都得到了一定的改进,如逻辑回归、近邻算法(KNN)等。
Eli5
![d892fc3a617928b86b1e0de6ce0394edb5cb0448](https://i-blog.csdnimg.cn/blog_migrate/f28b06d88af045266a4629cb174e8587.png)
通常,在机器学习任务中遇到的难题是模型的预测结果不准确。而用 Python 构建的 Eli5 机器学习库可以帮助攻克这个难题。它为现有的机器学习框架提供了若干内置的支持,比如模型数据可视化、模型调试、算法跟踪等,使得机器学习模型对于开发者而言不再是一个黑盒子。
Eli5 支持 sk-learn、XGBoost、LightGBM、lightning、sklearn-crfsuite 等机器学习框架或机器学习库。
这些框架与库都能够实现以上提到的可视化、模型调试、算法跟踪等任务。
结语:
以上便是机器学习专家们与数据科学家们普遍认可的十大机器学习框架或工具库。所有的这些框架与库都值得看一看、试一试。
当然,除了以上提到的框架与工具库外,还有很多其他的机器学习库也同样值得关注。比如 Scikit-image 就是同属于 Scikit 系列的另一个侧重于图像领域的工具库。
希望本文能够帮助你为你的项目选择到合适的机器学习框架或工具库吧。
原文发布时间为:2018-09-20
本文作者:Mantra Malhotra
本文来自云栖社区合作伙伴新智元,了解相关信息可以关注“AI_era”。