The Best Machine Learning Libraries in Python
By Scott Robinson • November 10, 2015
我只是大自然的翻译工
引言
毫无疑问,在过去的几年里,神经网络与机器学习是科技圈最热门的话题之一。如果我们看过一些它们解决的真正有趣的案例,如语音识别、图像识别、甚至是乐谱编写等,我们就不难看出它们为什么这么火了。因此,在这篇文章中,我决定编写一份关于最好用的Python机器学习库的列表,并把它们罗列在下面。
我认为,Python是你学习(与实现)机器学习技术最好的语言之一,理由如下:
简洁:Python正成为新手程序员的首选语言,得益于它简洁的语法和庞大的社群。
有效:Python的简单并不意味着它不实用。Python同时也是数据科学家与Web程序员中最流行的语言之一。社群中的人们为它开发了几乎可以胜任所有事情的库,包括机器学习。
大量机器学习库:Python目前已经有大量(tons of)的机器学习库。你可以根据你的情况、技术和需求从上百个库中选择最适合你的一个。
最后一点也是最重要的一点。机器学习算法通常很复杂,包含大量数学内容,因此自行编写(且写对)是最困难的任务。幸运的是,有许多聪明与专业的人已经帮我们做好了这些工作,因此我们可以专注于我们的应用。
这并不是一份详尽的列表。相关的库太多太多了,我在这里只列举了一些最相关与最知名的库。下面,我们来看一下清单。
最流行的库
我为一些最流行的库写了简短的描述和它们所擅长的方面。下一节我将给出一份更详尽的项目列表。
Tensorflow
这是这份列表中最新的神经网络库,前几天才刚被公布。Tensorflow是一个高层神经网络库,能帮助你设计网络架构,并规避低层细节。重点是它允许你将计算表示成数据流图(data flow graph),它更适用于解决复杂问题。
Tensorflow主要用C++编写,并包含Python绑定,因此你无需烦恼性能问题。我最喜欢的特性之一是它灵活的结构,它允许你用相同的API将它部署到一个或多个桌面计算机、服务器或移动设备的CPU或GPU上。没有多少库能提供这样的功能,如果有的话,Tensorflow就是其中之一。
它是为了Google Brain项目所开发出来的,并且已被Google中数百名工程师所使用,因此无须怀疑它解决问题的能力。
像大多数库一样,你可能需要花一点时间来学习它的API,但这些时间是值得的。我只用了几分钟了解了一下它的核心特性,我已经可以说Tensorflow值得我花更多的时间来实现我的网络设计,而不是纠结于API。
擅长:神经网络
Scikit-learn
Scikit-learn如果不是最流行的,也绝对是所有语言的机器学习库中最流行的之一。它包含了大量的数据挖掘与数据分析功能,使它成为研究人员和开发人员的首选库。
它基于最流行的NumPy,SciPy和matplotlib编写,因此对于已经在使用这些库的人来说会感到很熟悉。尽管与列表下面的一些库比起来它要稍微低层次一些,并且倾向于作为其他机器学习实现的基础。
擅长:几乎所有
Theano
Theano允许你定义、优化和评估涉及多维数组的数学表达式,这可能会让其他库的开发者感到一点挫败。像scikit-learn一样,theano也与NumPy紧密集合。GPU的透明使用令theano可以快速且无痛(译:f**k,我不信)地设置,这正是很多初学者的痛点。尽管有些人说它更像一个研究工具而无法生产运用,所以请按需使用。
Theano最好的特点之一是它完善的文档和大量的教程。得益于该库的流行,你在寻找资源建立模型和运行模型时不会遇到太多麻烦。
擅长:神经网络与深度学习
Pylearn2
大多数Pylearn2的功能实际上都建立在Theano上,因此它有一个坚实的基础。
根据Pylearn2的官网:
Pylearn2 differs from scikit-learn in that Pylearn2 aimsto provide great flexibility and make it possible for a researcher to do almostanything, while scikit-learn aims to work as a “black box” that can producegood results even if the user does not understand the implementation.
Pylearn2与scikit-learn的不同之处在于Pylearn2旨在提供极佳的灵活性,使研究人员可以做几乎任何工作,而scikit-learn旨在提供一个可以产出较好结果的“黑箱”,即使使用者并不理解其实现。(译:damn right)
记住Pylearn2在合适的时候会封装其他库的代码,比如scikit-learn,因此你得到的并不是100%的自定义代码。在大多数BUG已经被发现的情况下,这是很好的。像pylearn2这样的封装包在该列表中十分重要。
擅长:神经网络
Pyevolve
神经网络研究中相当令人兴奋与不同的领域之一莫过于遗传算法。遗传算法基本上是一个模拟自然选择过程的搜索算法。它主要对一些数据建立一个神经网络,并从一个拟合函数得到网络性能的反馈。然后,它反复对神经网络进行小的、随机的改变,并用同样的数据再次测试。拟合分数较高的神经网络最终胜出,并作为新一轮网络的父类。
Pyevolve提供了一个很好的框架来构建和执行这类算法。尽管作者已经申明,仅到v0.6版本为止该框架依然支持遗传程序,所以在不久的将来,该框架会更倾向于成为一个进化计算框架(Evolutionary Computation framework)而不仅仅是简单的遗传算法框架。
擅长:基于遗传算法的神经网络
NuPIC
NuPIC提供一些与标准机器学习算法所不同的功能。它基于一种被称为“分层时间记忆”(Hierarchical Temporal Memory, HTM)的大脑皮层理论。HTMs可以被视为一种神经网络,但在一些理论上有点不同。
从根本上讲,HTMs是一种可以对各种数据进行训练的分层的、基于时间的记忆系统。这意味着一种全新的计算框架,模拟记忆与计算在大脑中是如何进行的。对该理论与其应用的完整说明,请查阅白皮书。
擅长:HTMs
Pattern
Pattern更像一个“全套”库,在于它不仅提供机器学习算法,也提供收集与分析数据的工具。它的数据挖掘部分能帮助你收集网络服务的数据,如Google,Twitter和Wikipedia等。它也包含网络爬虫与HTML DOM解释器。包含这些工具的优点是在同一个程序中收集和训练数据显得更加容易。(译:I don’t think so.)
下面是文档中一个很好的例子,通过使用一系列tweets来训练一个关于一条tweet是“win”还是“fail”的分类器。
这些tweets首先根据'#win'和'#fail'标签,使用twitter.search()来搜集。然后使用从tweets中提取的形容词来训练一个K近邻(k-nearest neighbor, KNN)分类器。经过足够的训练后,你就拥有一个成熟的分类器了。对于一段15行的程序来说算不错了吧。
擅长:自然语言处理,聚类和分类
Caffe
Caffe是一个用于视觉应用的机器学习库。你可以用它来创建用来从图像中识别物体的深度神经网络,甚至是识别视觉风格。它提供GPU训练的无缝集成,强烈建议你在训练图像的时候使用它。虽然该库常被用作学术和研究,但它应该也有很多在生产环境中训练模型的使用者。
擅长:针对计算机视觉的神经网络/深度学习
其他著名的库
这里还有列表中不少Python机器学习库。其中有一些与上述库提供相同的功能,其他则有更窄的用途或用来作为学习工具。
(译:I’ll end here.)