整理网上常用Python库
我已经对一些比较流行的库和它们擅长的方向做了一个简短的描述,在下一节,我会给出一个更完整的项目列表。
Tensorflow
这是清单中最新的神经网络库。在前几天刚刚发行,Tensorflow是高级神经网络库,可以帮助你设计你的网络架构,避免出现低水平的细节错误。重点是允许你将计算表示成数据流图,它更适合于解决复杂问题。
此库主要使用C++编写,包括Python绑定,所以你不必担心其性能问题。我最喜欢的一个特点是它灵活的体系结构,允许你使用相同的API将其部署到一个或多个CPU或GPU的台式机、服务器或者移动设备。有此功能的库并不多,如果要说有,Tensorflow就是其一。
它是为谷歌大脑项目开发的,目前已被数百名工程师使用,所以无须怀疑它是否能够创造有趣的解决方案。
尽管和其它的库一样,你可能必须花一些时间来学习它的API,但花掉的时间应该是很值得的。我只花了几分钟了解了一下它的核心功能,就已经知道Tensorflow值得我花更多的时间让我来实现我的网络设计,而不仅仅是通过API来使用。
scikit-learn
scikit-learn绝对是其中一个,如果不是最流行的,那么也算得上是所有语言中流行的机器学习库之一。它拥有大量的数据挖掘和数据分析功能,使其成为研究人员和开发者的首选库。
其内置了流行的NumPy、SciPy,matplotlib库,因此对许多已经使用这些库的人来说就有一种熟悉的感觉。尽管与下面列出的其他库相比,这个库显得水平层次略低,并倾向于作为许多其他机器学习实现的基础。
Theano
Theano是一个机器学习库,允许你定义、优化和评估涉及多维数组的数学表达式,这可能是其它库开发商的一个挫折点。与scikit-learn一样,Theano也很好地整合了NumPy库。GPU的透明使用使得Theano可以快速并且无错地设置,这对于那些初学者来说非常重要。然而有些人更多的是把它描述成一个研究工具,而不是当作产品来使用,因此要按需使用。
Theano最好的功能之一是拥有优秀的参考文档和大量的教程。事实上,多亏了此库的流行程度,使你在寻找资源的时候不会遇到太多的麻烦,比如如何得到你的模型以及运行等。
Pylearn2
大多数Pylearn2的功能实际上都是建立在Theano之上,所以它有一个非常坚实的基础。
据Pylearn2网址介绍:
Pylearn2不同于scikit-learn,Pylearn2旨在提供极大的灵活性,使研究者几乎可以做任何想做的事情,而scikit-learn的目的是作为一个“黑盒”来工作,即使用户不了解实现也能产生很好的结果。
记住,Pylearn2在合适的时候会封装其它的库,如scikit-learn,所以在这里你不会得到100%用户编写的代码。然而,这确实很好,因为大多数错误已经被解决了。像Pylearn2这样的封装库在此列表中有很重要的地位。
Pyevolve
神经网络研究更让人兴奋和不同的领域之一是遗传算法。从根本上说,遗传算法只是一个模拟自然选择的启发式搜索过程。本质上它是在一些数据上测试神经网络,并从一个拟合函数中得到网络性能的反馈。然后对网络迭代地做小的、随机的变化,再使用相同的数据进行测试。将具有高度拟合分数的网络作为输出,然后使其作为下一个网络的父节点。
Pyevolve提供了一个用于建立和执行这类算法很棒的框架。作者曾表示,V0.6版本也支持遗传编程,所以在不久的将来,该框架将更倾向于作为一个进化的计算框架,而不只是简单地遗传算法框架。
NuPIC
Nupic是另一个库,与标准的机器学习算法相比,它提供了一些不同的功能。它基于一个称作层次时间记忆(HTM)的新皮层理论,。HTMs可以看作是一类神经网络,但在一些理论上有所不同。
从根本上说,HTMs是一个分层的、基于时间的记忆系统,可以接受各种数据。这意味着会成为一个新的计算框架,来模仿我们大脑中的记忆和计算是如何密不可分的。对于理论及其应用的详细说明,请参阅 白皮书。
Pattern
此库更像是一个“全套”库,因为它不仅提供了一些机器学习算法,而且还提供了工具来帮助你收集和分析数据。数据挖掘部分可以帮助你收集来自谷歌、推特和维基百科等网络服务的数据。它也有一个Web爬虫和HTML DOM解析器。“引入这些工具的优点就是:在同一个程序中收集和训练数据显得更加容易。
在文档中有个很好的例子,使用一堆推文来训练一个分类器,用来区分一个推文是“win”还是“fail”。
首先使用twitter.search()通过标签'#win'和'#fail'来收集推文数据。然后利用从推文中提取的形容词来训练一个K-近邻(KNN)模型。经过足够的训练,你会得到一个分类器。仅仅只需15行代码,还不错。
Caffe
Caffe是面向视觉应用领域的机器学习库。你可能会用它来创建深度神经网络,识别图像中的实体,甚至可以识别一个视觉样式。
Caffe提供GPU训练的无缝集成,当你训练图像时极力推荐使用此库。虽然Caffe似乎主要是面向学术和研究的,但它对用于生产使用的训练模型同样有足够多的用途。
Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy。其中Numpy是一个用python实现的科学计算包。包括:
SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。其功能与软件MATLAB、Scilab和GNU Octave类似。
Numpy和Scipy常常结合着使用,Python大多数机器学习库都依赖于这两个模块,绘图和可视化依赖于matplotlib模块,matplotlib的风格与matlab类似。Python机器学习库非常多,而且大多数开源,主要有:
1. scikit-learn
scikit-learn 是一个基于SciPy和Numpy的开源机器学习模块,包括分类、回归、聚类系列算法,主要算法有SVM、逻辑回归、朴素贝叶斯、Kmeans、DBSCAN等,目前由INRI 资助,偶尔Google也资助一点。
项目主页:
https://pypi.python.org/pypi/scikit-learn/
http://scikit-learn.org/
https://github.com/scikit-learn/scikit-learn
2. NLTK
NLTK(Natural Language Toolkit)是Python的自然语言处理模块,包括一系列的字符处理和语言统计模型。NLTK 常用于学术研究和教学,应用的领域有语言学、认知科学、人工智能、信息检索、机器学习等。 NLTK提供超过50个语料库和词典资源,文本处理库包括分类、分词、词干提取、解析、语义推理。可稳定运行在Windows, Mac OS X和Linux平台上.
项目主页:
http://sourceforge.net/projects/nltk/
https://pypi.python.org/pypi/nltk/
http://nltk.org/
3. Mlpy
Mlpy是基于NumPy/SciPy的Python机器学习模块,它是Cython的扩展应用。包含的机器学习算法有:
l 回归
least squares, ridge regression, least angle regression, elastic net, kernel ridge regression, support vector machines (SVM), partial least squares (PLS)
l 分类
linear discriminant analysis (LDA), Basic perceptron, Elastic Net, logistic regression, (Kernel) Support Vector Machines (SVM), Diagonal Linear Discriminant Analysis (DLDA), Golub Classifier, Parzen-based, (kernel) Fisher Discriminant Classifier, k-nearest neighbor, Iterative RELIEF, Classification Tree, Maximum Likelihood Classifier
l 聚类
hierarchical clustering, Memory-saving Hierarchical Clustering, k-means
l 维度约减
(Kernel) Fisher discriminant analysis (FDA), Spectral Regression Discriminant Analysis (SRDA), (kernel) Principal component analysis (PCA)
项目主页:
http://sourceforge.net/projects/mlpy
https://mlpy.fbk.eu/
4. Shogun
Shogun是一个开源的大规模机器学习工具箱。目前Shogun的机器学习功能分为几个部分:feature表示,feature预处理, 核函数表示,核函数标准化,距离表示,分类器表示,聚类方法,分布, 性能评价方法,回归方法,结构化输出学习器。
SHOGUN 的核心由C++实现,提供 Matlab、 R、 Octave、 Python接口。主要应用在linux平台上。
项目主页:
http://www.shogun-toolbox.org/
5. MDP
The Modular toolkit for Data Processing (MDP) ,用于数据处理的模块化工具包,一个Python数据处理框架。
从用户的观点,MDP是能够被整合到数据处理序列和更复杂的前馈网络结构的一批监督学习和非监督学习算法和其他数据处理单元。计算依照速度和内存需求而高效的执行。从科学开发者的观点,MDP是一个模块框架,它能够被容易地扩展。新算法的实现是容易且直观的。新实现的单元然后被自动地与程序库的其余部件进行整合。MDP在神经科学的理论研究背景下被编写,但是它已经被设计为在使用可训练数据处理算法的任何情况中都是有用的。其站在用户一边的简单性,各种不同的随时可用的算法,及应用单元的可重用性,使得它也是一个有用的教学工具。
项目主页:
http://mdp-toolkit.sourceforge.net/
https://pypi.python.org/pypi/MDP/
6. PyBrain
PyBrain(Python-Based Reinforcement Learning, Artificial Intelligence and Neural Network)是Python的一个机器学习模块,它的目标是为机器学习任务提供灵活、易应、强大的机器学习算法。(这名字很霸气)
PyBrain正如其名,包括神经网络、强化学习(及二者结合)、无监督学习、进化算法。因为目前的许多问题需要处理连续态和行为空间,必须使用函数逼近(如神经网络)以应对高维数据。PyBrain以神经网络为核心,所有的训练方法都以神经网络为一个实例。
项目主页:
http://www.pybrain.org/
https://github.com/pybrain/pybrain/
7. BigML
BigML 使得机器学习为数据驱动决策和预测变得容易,BigML使用容易理解的交互式操作创建优雅的预测模型。BigML使用BigML.io,捆绑Python。
项目主页:
https://bigml.com/
https://pypi.python.org/pypi/bigml
http://bigml.readthedocs.org/
8. PyML
PyML是一个Python机器学习工具包, 为各分类和回归方法提供灵活的架构。它主要提供特征选择、模型选择、组合分类器、分类评估等功能。
项目主页:
http://cmgm.stanford.edu/~asab/pyml/tutorial/
http://pyml.sourceforge.net/
9. Milk
Milk是Python的一个机器学习工具箱,其重点是提供监督分类法与几种有效的分类分析:SVMs(基于libsvm),K-NN,随机森林经济和决策树。它还可以进行特征选择。这些分类可以在许多方面相结合,形成不同的分类系统。
对于无监督学习,它提供K-means和affinity propagation聚类算法。
项目主页:
https://pypi.python.org/pypi/milk/
http://luispedro.org/software/milk
10. PyMVPA
PyMVPA(Multivariate Pattern Analysis in Python)是为大数据集提供统计学习分析的Python工具包,它提供了一个灵活可扩展的框架。它提供的功能有分类、回归、特征选择、数据导入导出、可视化等
项目主页:
http://www.pymvpa.org/
https://github.com/PyMVPA/PyMVPA
11. Pattern
Pattern是Python的web挖掘模块,它绑定了 Google、Twitter 、Wikipedia API,提供网络爬虫、HTML解析功能,文本分析包括浅层规则解析、WordNet接口、句法与语义分析、TF-IDF、LSA等,还提供聚类、分类和图网络可视化的功能。
项目主页:
http://www.clips.ua.ac.be/pages/pattern
https://pypi.python.org/pypi/Pattern
12. pyrallel
Pyrallel(Parallel Data Analytics in Python)基于分布式计算模式的机器学习和半交互式的试验项目,可在小型集群上运行,适用范围:
l focus on small to medium dataset that fits in memory on a small (10+ nodes) to medium cluster (100+ nodes).
l focus on small to medium data (with data locality when possible).
l focus on CPU bound tasks (e.g. training Random Forests) while trying to limit disk / network access to a minimum.
l do not focus on HA / Fault Tolerance (yet).
l do not try to invent new set of high level programming abstractions (yet): use a low level programming model (IPython.parallel) to finely control the cluster elements and messages transfered and help identify what are the practical underlying constraints in distributed machine learning setting.
项目主页:
https://pypi.python.org/pypi/pyrallel
http://github.com/pydata/pyrallel
13. Monte
Monte ( machine learning in pure Python)是一个纯Python机器学习库。它可以迅速构建神经网络、条件随机场、逻辑回归等模型,使用inline-C优化,极易使用和扩展。
项目主页:
https://pypi.python.org/pypi/Monte
http://montepython.sourceforge.net
14. Orange
Orange 是一个基于组件的数据挖掘和机器学习软件套装,它的功能即友好,又很强大,快速而又多功能的可视化编程前端,以便浏览数据分析和可视化,基绑定了 Python以进行脚本开发。它包含了完整的一系列的组件以进行数据预处理,并提供了数据帐目,过渡,建模,模式评估和勘探的功能。其由C++ 和 Python开发,它的图形库是由跨平台的Qt框架开发。
项目主页:
https://pypi.python.org/pypi/Orange/
http://orange.biolab.si/
15. Theano
Theano 是一个 Python 库,用来定义、优化和模拟数学表达式计算,用于高效的解决多维数组的计算问题。Theano的特点:
l 紧密集成Numpy
l 高效的数据密集型GPU计算
l 高效的符号微分运算
l 高速和稳定的优化
l 动态生成c代码
l 广泛的单元测试和自我验证
自2007年以来,Theano已被广泛应用于科学运算。theano使得构建深度学习模型更加容易,可以快速实现下列模型:
l Logistic Regression
l Multilayer perceptron
l Deep Convolutional Network
l Auto Encoders, Denoising Autoencoders
l Stacked Denoising Auto-Encoders
l Restricted Boltzmann Machines
l Deep Belief Networks
l HMC Sampling
l Contractive auto-encoders
Theano,一位希腊美女,Croton最有权势的Milo的女儿,后来成为了毕达哥拉斯的老婆。
项目主页:
http://deeplearning.net/tutorial/
https://pypi.python.org/pypi/Theano
16. Pylearn2
Pylearn2建立在theano上,部分依赖scikit-learn上,目前Pylearn2正处于开发中,将可以处理向量、图像、视频等数据,提供MLP、RBM、SDA等深度学习模型。Pylearn2的目标是:
项目主页:
http://deeplearning.net/software/pylearn2/
https://github.com/lisa-lab/pylearn2
还有其他的一些Python的机器学习库,如:
pmll(https://github.com/pavlov99/pmll)
pymining(https://github.com/bartdag/pymining)
ease (https://github.com/edx/ease)
textmining(http://www.christianpeccei.com/textmining/)
更多的机器学习库可通过https://pypi.python.org/pypi查找。