2017年最受欢迎的十大机器学习Python库

过去两年来,咱们一直经过发表博文的方式作这件事,指出当年 Python 社区中出现的一些最佳工做。如今,2017 年即将结束,又到了总结的时刻。前端


可是此次开源库的评选限定在了机器学习的范围内。也许非机器学习库的大牛认为咱们有偏见,恳请大家原谅。很但愿读者在评论中对本文作出反馈,帮助咱们查缺补遗未收录的顶级软件。python


所以,放轻松,让咱们开始吧!正则表达式


1. Pipenv算法


2017 年排名第一的 python 库非 Pipenv 莫属。它在今年初发行,但却影响了每一个 Python 开发者的工做流程,尤为是如今它成了用于管理依赖项的官方推荐工具。
编程


Pipenv 源自大牛 Kenneth Reitz 的一个周末项目,旨在把其余软件包管理器的想法整合进 Python。安装 virtualenv 和 virtualenvwrapper,管理 requirements.txt 文件,确保依赖项的依赖项版本的可复现性,以上这些通通不须要。借助 Pipenv,你能够在 Pipfile(一般使用添加、删除或更新依赖项的命令构建它)中指定全部你的依赖项。Pipenv 能够生成一个 Pipfile.lock 文件,使得你的构建成为决定性的,避免了寻找 bug 的困难,由于甚至你也不认为须要一些模糊的依赖项。api


固然,Pipenv 还有不少其余特性,以及很好的文档,所以确保检查完毕,再开始在全部你的 Python 项目上使用它。浏览器


2. PyTorch数据结构


若是有一个库在今年特别是在深度学习社区中大为流行,那么它极可能是 PyTorch。PyTorch 是 Facebook 今年推出的深度学习框架。app


PyTorch 构建在 Torch 框架之上,并对这个(曾经?)流行框架作了改善,尤为是 PyTorch 是基于 Python 的,这与 Lua 造成鲜明对比。鉴于过去几年人们一直在使用 Python 进行数据科学研究,这为深度学习的普及迈出了重要一步。框架


最值得注意的是,因为其实现了全新的动态计算图(Dynamic Computational Graph)范式,PyTorch 成为了众多研究者的首选框架之一。当使用其余框架好比 TensorFlow、CNTK、MXNet 编写代码时,必须首先定义一个称之为计算图的东西。该图指定了由咱们的代码构建的全部操做与数据流,且它在构建完后会进行编译和利用框架潜在地优化,所以静态计算图能很天然地在 GPU 上实现并行处理。这一范式被称为静态计算图,它很棒,由于你能够利用各类优化,而且这个图一旦建成便可运行在不一样设备上(由于执行与构建相分离)。可是,在不少任务中好比天然语言处理中,工做量常常是变更的:你能够在把图像馈送至算法以前把其大小从新调整为一个固定的分辨率,可是相同操做不适用于语句,由于其长度是变化的。这正是 PyTorch 和动态图发挥做用的地方。经过在你的代码中使用标准的 Python 控制指令,图在执行时将被定义,给了你对完成若干任务来讲很关键的自由。


固然,PyTorch 也会自动计算梯度(正如你从其余现代深度学习框架中所指望的同样),这很是快,且可扩展,何不试一试呢?


3. Caffe2


也许这听起来有点疯狂,可是 Facebook 在今年也发布了另一个很棒的深度学习框架。原始的 Caffe 框架多年来一直被普遍使用,以无与伦比的性能和通过测试的代码库而闻名。可是,最近的深度学习趋势使得该框架在一些方向上停滞不前。Caffe2 正是一次帮助 Caffe 遇上潮流的尝试。



Caffe2 支持分布式训练、部署(甚至在移动端平台)和最新的 CPU、支持 CUDA 的硬件。尽管 PyTorch 更适合于研究,可是 Caffe2 适合大规模部署,正如在 Facebook 上看到的同样。


一样,查看最近的 ONNX 工做。你能够在 PyTorch 中构建和训练你的模型,同时使用 Caffe2 来部署!这是否是很棒?


4. Pendulum


去年,Arrow——一个旨在为你减负同时使用 Python datatime 的库入选了榜单;今年,该轮到 Pendulum 了。


Pendulum 的优势之一在于它是 Python 标准 datetime 类的直接替代品,所以你能够轻易地将其与现有代码整合,并在你真正须要时利用其功能。做者特别注意以确保时间区正确处理,默认每一个实例意识到时间区。你也会得到扩展的 timedelta 来简化日期时间的计算。


与其余现有库不一样,它努力使 API 具备可预测性行为,所以知道该指望什么。若是你正在作一个涉及 datetime 的重要工做,它会使你更开心。查看该文件得到更多信息:https://pendulum.eustace.io/docs/。


5. Dash



研究数据科学的时候你能够在 Python 生态系统中使用如 Pandas 和 scikit-learn 等很是棒的工具,还可使用 Jupyter Notebook 管理工做流程,这对于你和同事之间的协做很是有帮助。可是,当你的分享对象并不知道如何使用这些工具的时候,该怎么办?如何创建一个可让人们轻松地处理数据并进行可视化的接口?过去的办法是创建一个专业的熟悉 JavaScript 前端设计团队,以创建所须要的 GUI,没有其它办法。


Dash 是几年发布的用于构建网页应用(特别针对于数据可视化的高效利用)的纯 Python 开源库。它创建在 Flask、Plotly.js 和 React 的顶部,能够提供数据处理的抽象层次的接口,从而让咱们不须要再学习这些框架,进行高效的开发。该 app 可在浏览器上使用,之后将发布低延迟版本,以在移动设备上使用。



能够在这个网站中查看 Dash 的有趣应用


6. PyFlux


Python 中有不少库能够用于研究数据科学和机器学习,可是当你的数据点是随时间演化的度量的时候(例如股价,甚至任何仪器测量值),这就不同了。


PyFlux 就是一个专用于处理时序数据的开源 Python 库。对时序数据的研究是统计学和经济学的一个子领域,其研究的目的能够是描述时序数据的(关于隐变量或感兴趣特征的)演化行为,也能够是预测时序数据的将来状态。


PyFlux 容许使用几率方法对时序数据建模,拥有多种现代时序数据模型的实现,例如 GARCH。


7. Fire




大多数状况下,咱们须要为项目建立一个命令行界面(CLI)。除了传统的 argparse 以外,Python 还有 clik 和 docopt 等很棒的工具。Fire 是今年谷歌发布的软件库,它在解决这个问题上采起了不一样的方法。


Fire 是能为任何 Python 项目自动生成 CLI 的开源库。这里的关键点是自动化:咱们几乎不须要编写任何代码或文档来构建 CLI。咱们只须要调用一个 Fire 方法并把它传递到所但愿构建到 CLI 中的目标,例如函数、对象、类、字典或根本不传递参数(这样将会把总体代码导入 CLI)。


通常咱们须要阅读该项目下的指导手册,以便经过案例了解它是如何工做的。


8. imbalanced-learn



在理想的状况中,咱们总会有完美的平衡数据集,用它来训练模型将十分舒爽。但不幸的是,在实际中咱们总有不平衡的数据集,甚至有些任务拥有很是不平衡的数据。例如,在预测信用卡欺诈的任务中绝大多数交易(99%+)都是合法的,只有极少数的行为须要算法识别为欺诈。若是咱们只是朴素地训练 ML 算法,那么算法的性能可能还不如全都预测为占比大的数据,所以在处理这一类问题时咱们须要很是当心。


幸运的是,该问题已经通过充分的探讨,且目前存在各类各样的技术以解决不平衡数据。imbalanced-learn 是一个强大的 Python 包,它提供了不少解决数据不平衡的方法。此外,imbalanced-learn 与 scikit-learn 相互兼容,是 scikit-learn-contrib 项目的一部分。


9. FlashText



在大多数数据清理流程或其它工做中,咱们可能须要搜索某些文本以替换为其它内容,一般咱们会使用正则表达式完成这一工做。在大多数状况下,正则表达式都能完美地解决这一问题,但有时也会发生这样的状况:咱们须要搜索的项多是成千上万条,所以正则表达式的使用将变得十分缓慢。


为此,FlashText 提供了一个更好的解决方案。在该项目做者最初的基准测试中,它极大地缩短了整个操做的运行时间,从 5 天到 15 分钟。FlashText 的优势在于不论搜索项有多少,它所须要的运行时都是相同的。而在经常使用的正则表达式中,运行时将随着搜索项的增长而线性增加。

 
  1. # FlashText替代关键词

  2. >>> keyword_processor.add_keyword('New Delhi', 'NCR region')

  3. >>> new_sentence = keyword_processor.replace_keywords('I love Big Apple and new delhi.')

  4. >>> new_sentence

  5. >>> # 'I love New York and NCR region.'


FlashText 证实了算法和数据结构设计的重要性,即便对于简单的问题,更好的算法也能够轻松超越在最快处理器上运行的朴素实现。


10. Luminoth



现在图像无处无在,理解图像的内容对于许多应用程序来讲都是相当重要的。值得庆幸的是,因为深度学习的进步,图像处理技术已经有了很是大的进步。


Luminoth 是用于计算机视觉的开源 Python 工具包,它使用 TensorFlow 和 Sonnet 构建,且目前支持 Faster R-CNN 等目标检测方法。此外,Luminoth 不只仅是一个特定模型的实现,它的构建基于模块化和可扩展,所以咱们能够直接定制现有的部分或使用新的模型来扩展它而处理不一样的问题,即尽量对代码进行复用。



它还提供了一些工具以轻松完成构建 DL 模型所须要的工程工做:将数据(图像等)转换为适当的格式以馈送到各类操做流程中,例如执行数据加强、在一个或多个 GPU 中执行训练(分布式训练是训练大规模模型所必需的)、执行评价度量、在 TensorBoard 中可视化数据或模型和部署模型为一个简单的 API 接口等。因此由于 Luminoth 提供了大量的方法,咱们能够经过它完成不少关于计算机视觉的任务。


此外,Luminoth 能够直接与 Google Cloud 的 ML 引擎整合,因此即便咱们没有强大的 GPU,咱们也能够在云端进行训练。


更多优秀的 Python 库


除了以上十个很是流行与强大的 Python 库,今年还有一些一样值得关注的 Python 库,包括 PyVips、Requestium 和 skorch 等。


1. PyVips


你可能还没听过 libvips 库,但你必定据说过 Pillow 或 ImageMagick 等流行的图像处理库,它们支持普遍的格式。然而相比这些流行的图像处理库,libvips 更加快速且只占不多的内存。例如一些基准测试代表它相比 ImageMagick 在处理速度上要快三倍,且还节省了 15 倍的内存占用。


PyVips 是最近发布用于 libvips 的 Python 绑定包,它与 Python 2.7-3.6(甚至是 PyPy)相兼容,它易于使用 pip 安装。因此若是你须要处理图像数据的应用,那么这个库是咱们所须要关注的。


2. skorch



假设你很喜欢使用 scikit-learn 的 API,但却遇到了须要使用 PyTorch 工做的状况,该怎么办?别担忧,skorch 是一个封装,能够经过相似 sklearn 的接口提供 PyTorch 编程。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------