解析python常用的机器学习库

python在科学计算中用途广泛:计算机视觉、人工智能、数学、天文等。它同样适用于机器学习也是意料之中的事。

这篇文章就列举并描述python的最有用的机器学习工具和库。这个列表中,我们不要求这些库是用python写的,只要有python接口就够了。

我们的目的不是列出python中所有机器学习库(搜索“机器学习”时python包索引(pypi)返回了139个结果),而是列出我们所知的有用并且维护良好的那些。

另外,尽管有些模块可以用于多种机器学习任务,我们只列出主要焦点在机器学习的库。比如,虽然scipy1包含一些聚类算法,但是它的主焦点不是机器学习而是全面的科学计算工具集。因此我们排除了scipy(尽管我们也使用它!)。

另一个需要提到的是,我们同样会根据与其他科学计算库的集成效果来评估这些库,因为机器学习(有监督的或者无监督的)也是数据处理系统的一部分。如果你使用的库与数据处理系统其他的库不相配,你就要花大量时间创建不同库之间的中间层。在工具集中有个很棒的库很重要,但这个库能与其他库良好集成也同样重要。

如果你擅长其他语言,但也想使用python包,我们也简单地描述如何与python进行集成来使用这篇文章列出的库。

scikit-learn

scikit learn7是我们在cb insights选用的机器学习工具。我们用它进行分类、特征选择、特征提取和聚集。

我们最爱的一点是它拥有易用的一致性api,并提供了**很多**开箱可用的求值、诊断和交叉验证方法(是不是听起来很熟悉?python也提供了“电池已备(译注:指开箱可用)”的方法)。锦上添花的是它底层使用scipy数据结构,与python中其余使用scipy、numpy、pandas和matplotlib进行科学计算的部分适应地很好。

因此,如果你想可视化分类器的性能(比如,使用精确率与反馈率(precision-recall)图表,或者接收者操作特征(receiver operating characteristics,roc)曲线),matplotlib可以帮助进行快速可视化。

考虑到花在清理和构造数据的时间,使用这个库会非常方便,因为它可以紧密集成到其他科学计算包上。

另外,它还包含有限的自然语言处理特征提取能力,以及词袋(bag of words)、tfidf(term frequency inverse document frequency算法)、预处理(停用词/stop-words,自定义预处理,分析器)。

此外,如果你想快速对小数据集(toy dataset)进行不同基准测试的话,它自带的数据集模块提供了常见和有用的数据集。你还可以根据这些数据集创建自己的小数据集,这样在将模型应用到真实世界中之前,你可以按照自己的目的来检验模型是否符合期望。对参数最优化和参数调整,它也提供了网格搜索和随机搜索。

如果没有强大的社区支持,或者维护得不好,这些特性都不可能实现。我们期盼它的第一个稳定发布版。

statsmodels

statsmodels是另一个聚焦在统计模型上的强大的库,主要用于预测性和探索性分析。如果你想拟合线性模型、进行统计分析,或者预测性建模,那么statsmodels非常适合。它提供的统计测试相当全面,覆盖了大部分情况的验证任务。

如果你是r或者s的用户,它也提供了某些统计模型的r语法。它的模型同时也接受numpy数组和pandas数据帧,让中间数据结构成为过去!

pymc

pymc是做**贝叶斯曲线**的工具。它包含贝叶斯模型、统计分布和模型收敛的诊断工具,也包含一些层次模型。如果想进行贝叶斯分析,你应该看看。

shogun

shogun1是个聚焦在支持向量机(support vector machines, svm)上的机器学习工具箱,用c++编写。它正处于积极开发和维护中,提供了python接口,也是文档化最好的接口。但是,相对于scikit-learn,我们发现它的api比较难用。而且,也没提供很多开箱可用的诊断和求值算法。但是,速度是个很大的优势。

gensim

gensim被定义为“人们的主题建模工具(topic modeling for humans)”。它的主页上描述,其焦点是狄利克雷划分(latent dirichlet allocation, lda)及变体。不同于其他包,它支持自然语言处理,能将nlp和其他机器学习算法更容易组合在一起。

如果你的领域在nlp,并想进行聚集和基本的分类,你可以看看。目前,它们引入了google的基于递归神经网络(recurrent neural network)的文本表示法word2vec。这个库只使用python编写。

orange

orange是这篇文章列举的所有库中唯一带有图形用户界面(graphical user interface,gui)的。对分类、聚集和特征选择方法而言,它是相当全面的,还有些交叉验证的方法。在某些方面比scikit-learn还要好(分类方法、一些预处理能力),但与其他科学计算系统(numpy, scipy, matplotlib, pandas)的适配上比不上scikit-learn。

但是,包含gui是个很重要的优势。你可以可视化交叉验证的结果、模型和特征选择方法(某些功能需要安装graphviz)。对大多数算法,orange都有自己的数据结构,所以你需要将数据包装成orange兼容的数据结构,这使得其学习曲线更陡。

pymvpa

pymvpa是另一个统计学习库,api上与scikit-learn很像。包含交叉验证和诊断工具,但是没有scikit-learn全面。

深度学习

尽管深度学习是机器学习的一个子节,我们在这里创建单独一节的原因是,它最新吸引了google和facebook人才招聘部门的很多注意。

theano

theano是最成熟的深度学习库。它提供了不错的数据结构(张量,tensor)来表示神经网络的层,对线性代数来说很高效,与numpy的数组类似。需要注意的是,它的api可能不是很直观,用户的学习曲线会很高。有很多基于theano的库都在利用其数据结构。它同时支持开箱可用的gpu编程。

pylearn

还有另外一个基于theano的库,pylearn2,它给theano引入了模块化和可配置性,你可以通过不同的配置文件来创建神经网络,这样尝试不同的参数会更容易。可以说,如果分离神经网络的参数和属性到配置文件,它的模块化能力更强大。

decaf

decaf是最近由uc berkeley发布的深度学习库,在imagenet分类挑战中测试发现,其神经网络实现是很先进的(state of art)。

nolearn

如果你想在深度学习中也能使用优秀的scikit-learn库api,封装了decaf的nolearn会让你能够更轻松地使用它。它是对decaf的包装,与scikit-learn兼容(大部分),使得decaf更不可思议。

overfeat

overfeat是最近猫vs.狗(kaggle挑战)4的胜利者,它使用c++编写,也包含一个python包装器(还有matlab和lua)。通过torch库使用gpu,所以速度很快。也赢得了imagenet分类的检测和本地化挑战。如果你的领域是计算机视觉,你可能需要看看。

hebel

hebel是另一个带有gpu支持的神经网络库,开箱可用。你可以通过yaml文件(与pylearn2类似)决定神经网络的属性,提供了将神级网络和代码友好分离的方式,可以快速地运行模型。由于开发不久,就深度和广度上说,文档很匮乏。就神经网络模型来说,也是有局限的,因为只支持一种神经网络模型(正向反馈,feed-forward)。

但是,它是用纯python编写,将会是很友好的库,因为包含很多实用函数,比如调度器和监视器,其他库中我们并没有发现这些功能。

neurolab

neurolab是另一个api友好(与matlabapi类似)的神经网络库。与其他库不同,它包含递归神经网络(recurrent neural network,rnn)实现的不同变体。如果你想使用rnn,这个库是同类api中最好的选择之一。

与其他语言集成

你不了解python但是很擅长其他语言?不要绝望!python(还有其他)的一个强项就是它是一个完美的胶水语言,你可以使用自己常用的编程语言,通过python来访问这些库。以下适合各种编程语言的包可以用于将其他语言与python组合到一起:

r -> rpython

matlab -> matpython

java -> jython

lua -> lunatic python

julia -> pycall.jl

不活跃的库

这些库超过一年没有发布任何更新,我们列出是因为你有可能会有用,但是这些库不太可能会进行bug修复,特别是未来进行增强。

mdp2mlpy

ffnet

pybrain

以上就是解析python常用的机器学习库的详细内容,更多请关注 第一php社区 其它相关文章!

Posted in 未分类

发表评论