翻译整理了目前GitHub上最受欢迎的28款开源的机器学习项目,以供开发者参考使用。
TensorFlow是谷歌发布的第二代机器学习系统。据谷歌宣称,在部分基准测试中,TensorFlow的处理速度比第一代的DistBelief加快了2倍之多。具体的讲,TensorFlow是一个利用数据流图(DataFlowGraphs)进行数值计算的开源软件库:图中的节点(Nodes)代表数学运算操作,同时图中的边(Edges)表示节点之间相互流通的多维数组,即张量(Tensors)。这种灵活的架构可以让使用者在多样化的将计算部署在台式机、服务器或者移动设备的一个或多个CPU上,而且无需重写代码;同时任一基于梯度的机器学习算法均可够借鉴TensorFlow的自动分化(Auto-differentiation);此外通过灵活的Python接口,要在TensorFlow中表达想法也变得更为简单。TensorFlow最初由GoogleBrain小组(该小组隶属于Google'sMachineIntelligence研究机构)的研究员和工程师开发出来的,开发目的是用于进行机器学习和深度神经网络的研究。但该系统的通用性足以使其广泛用于其他计算领域。目前Google内部已在大量使用AI技术,包括GoogleApp的语音识别、Gmail的自动回复功能、GooglePhotos的图片搜索等都在使用TensorFlow。
Scikit-Learn是用于机器学习的Python模块,它建立在SciPy之上。该项目由DavidCournapeau于2007年创立,当时项目名为GoogleSummerofCode,自此之后,众多志愿者都为此做出了贡献。主要特点:
Scikit-Learn的基本功能主要被分为六个部分:分类、回归、聚类、数据降维、模型选择、数据预处理,具体可以参考官方网站上的文档。经过测试,Scikit-Learn可在Python2.6、Python2.7和Python3.5上运行。除此之外,它也应该可在Python3.3和Python3.4上运行。注:Scikit-Learn以前被称为Scikits.Learn。
Caffe是由神经网络中的表达式、速度、及模块化产生的深度学习框架。后来它通过伯克利视觉与学习中心((BVLC)和社区参与者的贡献,得以发展形成了以一个伯克利主导,然后加之Github和Caffe-users邮件所组成的一个比较松散和自由的社区。Caffe是一个基于C++/CUDA架构框架,开发者能够利用它自由的组织网络,目前支持卷积神经网络和全连接神经网络(人工神经网络)。在Linux上,C++可以通过命令行来操作接口,对于MATLAB、Python也有专门的接口,运算上支持CPU和GPU直接无缝切换。
目前Caffe应用实践主要有数据整理、设计网络结构、训练结果、基于现有训练模型,使用Caffe直接识别。
PredictionIO是面向开发人员和数据科学家的开源机器学习服务器。它支持事件采集、算法调度、评估,以及经由RESTAPIs的预测结果查询。使用者可以通过PredictionIO做一些预测,比如个性化推荐、发现内容等。PredictionIO提供20个预设算法,开发者可以直接将它们运行于自己的数据上。几乎任何应用与PredictionIO集成都可以变得更“聪明”。其主要特点如下所示:
Brain是JavaScript中的神经网络库。以下例子说明使用Brain来近似XOR功能:
varnet=newbrain.NeuralNetwork();net.train([{input:[0,0],output:[0]},{input:[0,1],output:[1]},{input:[1,0],output:[1]},{input:[1,1],output:[0]}]);varoutput=net.run([1,0]);//[0.987]当brain用于节点中,可使用npm安装:
npminstallbrain当brain用于浏览器,下载最新的brain.js文件。训练计算代价比较昂贵,所以应该离线训练网络(或者在Worker上),并使用toFunction()或者toJSON()选项,以便将预训练网络插入到网站中。
Keras是极其精简并高度模块化的神经网络库,在TensorFlow或Theano上都能够运行,是一个高度模块化的神经网络库,支持GPU和CPU运算。Keras可以说是Python版的Torch7,对于快速构建CNN模型非常方便,同时也包含了一些最新文献的算法,比如BatchNoramlize,文档教程也很全,在官网上作者都是直接给例子浅显易懂。Keras也支持保存训练好的参数,然后加载已经训练好的参数,进行继续训练。Keras侧重于开发快速实验,用可能最少延迟实现从理念到结果的转变,即为做好一项研究的关键。当需要如下要求的深度学习的库时,就可以考虑使用Keras:
Keras目前支持Python2.7-3.5。
CNTK(ComputationalNetworkToolkit)是一个统一的深度学习工具包,该工具包通过一个有向图将神经网络描述为一系列计算步骤。在有向图中,叶节点表示输入值或网络参数,其他节点表示该节点输入之上的矩阵运算。CNTK使得实现和组合如前馈型神经网络DNN、卷积神经网络(CNN)和循环神经网络(RNNs/LSTMs)等流行模式变得非常容易。同时它实现了跨多GPU和服务器自动分化和并行化的随机梯度下降(SGD,误差反向传播)学习。下图将CNTK的处理速度(每秒处理的帧数)和其他四个知名的工具包做了比较了。配置采用的是四层全连接的神经网络(参见基准测试脚本)和一个大小是8192的高效minibatch。在相同的硬件和相应的最新公共软件版本(2015.12.3前的版本)的基础上得到如下结果:
CNTK自2015年四月就已开源。
ConvNetJS是利用Javascript实现的神经网络,同时还具有非常不错的基于浏览器的Demo。它最重要的用途是帮助深度学习初学者更快、更直观的理解算法。它目前支持:
Pattern是Python的一个Web挖掘模块。拥有以下工具:
其文档完善,目前拥有50多个案例和350多个单元测试。Pattern目前只支持Python2.5+(尚不支持Python3),该模块除了在Pattern.vector模块中使用LSA外没有其他任何外部要求,因此只需安装NumPy(仅在MacOSX上默认安装)。
NuPIC有自己的独特之处。许多机器学习算法无法适应新模式,而NuPIC的运作接近于人脑,当模式变化的时候,它会忘掉旧模式,记忆新模式。
Theano是一个Python库,它允许使用者有效地定义、优化和评估涉及多维数组的数学表达式,同时支持GPUs和高效符号分化操作。Theano具有以下特点:
自2007年起,Theano一直致力于大型密集型科学计算研究,但它目前也很被广泛应用在课堂之上(如Montreal大学的深度学习/机器学习课程)。
MXNet是一个兼具效率和灵活性的深度学习框架。它允许使用者将符号编程和命令式编程相结合,以追求效率和生产力的最大化。其核心是动态依赖调度程序,该程序可以动态自动进行并行化符号和命令的操作。其中部署的图形优化层使得符号操作更快和内存利用率更高。该库轻量且便携带,并且可扩展到多个GPU和多台主机上。主要特点:
MXNet不仅仅是一个深度学习项目,它更是一个建立深度学习系统的蓝图、指导方针以及黑客们对深度学习系统独特见解的结合体。
XGBoot是设计为高效、灵活、可移植的优化分布式梯度Boosting库。它实现了GradientBoosting框架下的机器学习算法。XGBoost通过提供并行树Boosting(也被称为GBDT、GBM),以一种快速且准确的方式解决了许多数据科学问题。相同的代码可以运行在大型分布式环境如Hadoop、SGE、MP上。它类似于梯度上升框架,但是更加高效。它兼具线性模型求解器和树学习算法。XGBoot至少比现有的梯度上升实现有至少10倍的提升,同时还提供了多种目标函数,包括回归、分类和排序。由于它在预测性能上的强大,XGBoot成为很多比赛的理想选择,其还具有做交叉验证和发现关键变量的额外功能。值得注意的是:XGBoost仅适用于数值型向量,因此在使用时需要将所有其他形式的数据转换为数值型向量;在优化模型时,这个算法还有非常多的参数需要调整。
GoLearn是Go语言中“功能齐全”的机器学习库,简单性及自定义性是其开发目标。在安装GoLearn时,数据作为实例被加载,然后可以在其上操作矩阵,并将操作值传递给估计值。GoLearn实现了Fit/Predict的Scikit-Learn界面,因此用户可轻松地通过反复试验置换出估计值。此外,GoLearn还包括用于数据的辅助功能,例如交叉验证、训练以及爆裂测试。
ML_for_Hackers是针对黑客机器学习的代码库,该库包含了所有针对黑客的机器学习的代码示例(2012)。该代码可能和文中出现的并不完全相同,因为自出版以来,可能又添加了附加的注释和修改部分。所有代码均为R语言,依靠众多的R程序包,涉及主题包括分类(Classification)、排行(Ranking)、以及回归(Regression)的所有常见的任务和主成分分析(PCA)和多维尺度(Multi-dimenstionalScaling)等统计方法。
H2O使得Hadoop能够做数学运算!它可以通过大数据衡量统计数据、机器学习和数学。H2O是可扩展的,用户可以在核心区域使用简单的数学模型构建模块。H2O保留着与R、Excel和JSON等相类似的熟悉的界面,使得大数据爱好者及专家们可通过使用一系列由简单到高级的算法来对数据集进行探索、变换、建模及评分。采集数据很简单,但判决难度却很大,而H2O却通过更快捷、更优化的预测模型,能够更加简单迅速地从数据中获得深刻见解。0xdataH2O的算法是面向业务流程——欺诈或趋势预测。Hadoop专家可以使用Java与H2O相互作用,但框架还提供了对Python、R以及Scala的捆绑。
neon是Nervana基于Python语言的深度学习框架,在诸多常见的深层神经网络中都能够获得较高的性能,比如AlexNet、VGG或者GoogLeNet。在设计neon时,开发者充分考虑了如下功能:
在Nervana中,neon被用来解决客户在多个域间存在的各种问题。
开源项目Oryx提供了简单且实时的大规模机器学习、预测分析的基础设施。它可实现一些常用于商业应用的算法类:协作式过滤/推荐、分类/回归、集群等。此外,Oryx可利用ApacheHadoop在大规模数据流中建立模型,还可以通过HTTPRESTAPI为这些模型提供实时查询,同时随着新的数据不断流入,可以近似地自动更新模型。这种包括了计算层和服务层的双重设计,能够分别实现一个Lambda架构。模型在PMML格式交换。
Shogun是一个机器学习工具箱,由SoerenSonnenburg和GunnarRaetsch(创建,其重点是大尺度上的内核学习方法,特别是支持向量机(SVM,SupportVectorMachines)的学习工具箱。它提供了一个通用的连接到几个不同的SVM实现方式中的SVM对象接口,目前发展最先进的LIBSVM和SVMlight也位于其中,每个SVM都可以与各种内核相结合。工具箱不仅为常用的内核程序(如线性、多项式、高斯和S型核函数)提供了高效的实现途径,还自带了一些近期的字符串内核函数,例如局部性的改进、Fischer、TOP、Spectrum、加权度内核与移位,后来有效的LINADD优化内核函数也已经实现。此外,Shogun还提供了使用自定义预计算内核工作的自由,其中一个重要特征就是可以通过多个子内核的加权线性组合来构造的组合核,每个子内核无需工作在同一个域中。通过使用多内核学习可知最优子内核的加权。目前Shogun可以解决SVM2类的分类和回归问题。此外Shogun也添加了了像线性判别分析(LDA)、线性规划(LPM)、(内核)感知等大量线性方法和一些用于训练隐马尔可夫模型的算法。
HLearn是由Haskell语言编写的高性能机器学习库,目前它对任意维度空间有着最快最近邻的实现算法。HLearn同样也是一个研究型项目。该项目的研究目标是为机器学习发掘“最佳可能”的接口。这就涉及到了两个相互冲突的要求:该库应该像由C/C++/Fortran/Assembly开发的底层那样运行快速;同时也应该像由Python/R/Matlab开发的高级库那样灵活多变。Julia在这个方向上取得了惊人的进步,但是HLearn“野心”更大。更值得注意的是,HLearn的目标是比低级语言速度更快,比高级语言更加灵活。为了实现这一目标,HLearn采用了与标准学习库完全不同的接口。在HLearn中H代表着三个不同的概念,这三个概念也是HLearn设计的基本要求:
MLPNeuralNet是一个针对iOS和MacOS系统的快速多层感知神经网络库,可通过已训练的神经网络预测新实例。它利用了向量运算和硬盘加速功能(如果可用),其建立在苹果公司的加速框架之上。
若你已经用Matlab(Python或R)设计了一个预测模型,并希望在iOS应用程序加以应用。在这种情况下,正好需要MLPNeuralNet,而MLPNeuralNet只能加载和运行前向传播方式的模型。MLPNeuralNet有如下几个特点:
Mahout是ApacheSoftwareFoundation(ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用ApacheHadoop库,Mahout可以有效地扩展到云中。ApacheMahout项目的目标是建立一个能够快速创建可扩展、高性能机器学习应用的环境。虽然在开源领域中相对较为年轻,但Mahout已经提供了大量功能,特别是在集群和CF方面。Mahout的主要特性包括:
使用Mahout还可实现内容分类。Mahout目前支持两种根据贝氏统计来实现内容分类的方法:第一种方法是使用简单的支持Map-Reduce的NaiveBayes分类器;第二种方法是ComplementaryNaiveBayes,它会尝试纠正NaiveBayes方法中的一些问题,同时仍然能够维持简单性和速度。
Seldon是一个开放式的预测平台,提供内容建议和一般的功能性预测。它在Kubernetes集群内运行,因此可以调配到Kubernetes范围内的任一地址:内部部署或云部署(例如,AWS、谷歌云平台、Azure)。另外,它还可以衡量大型企业安装的需求。
Datumbox机器学习框架是用Java编写的一个开源框架,该框架的涵盖大量的机器学习算法和统计方法,并能够处理大尺寸的数据集。DatumboxAPI提供了海量的分类器和自然语言处理服务,能够被应用在很多领域的应用,包括了情感分析、话题分类、语言检测、主观分析、垃圾邮件检测、阅读评估、关键词和文本提取等等。目前,Datumbox所有的机器学习服务都能够通过API获取,该框架能够让用户迅速地开发自己的智能应用。目前,基于GPL3.0的Datumbox机器学习框架已经开源并且可以从GitHub上进行下载。Datumbox的机器学习平台很大程度上已经能够取代普通的智能应用。它具有如下几个显著的优点:
Datumbox主要可以应用在四个方面:一个是社交媒体的监视,评估用户观点能够通过机器学习解决,Datumbox能够帮助用户构建自己的社交媒体监视工具;第二是搜索引擎优化,其中非常有效的方法就是文档中重要术语的定位和优化;第三点是质量评估,在在线通讯中,评估用户产生内容的质量对于去除垃圾邮件是非常重要的,Datumbox能够自动的评分并且审核这些内容;最后是文本分析,自然语言处理和文本分析工具推动了网上大量应用的产生,平台API能够很轻松地帮助用户进行这些分析。
Jubatus库是一个运行在分布式环境中的在线机器学习框架,即面向大数据数据流的开源框架。它和Storm有些类似,但能够提供更多的功能,主要功能如下:
Jubatus认为未来的数据分析平台应该同时向三个方向展开:处理更大的数据,深层次的分析和实时处理。于是Jubatus将在线机器学习,分布式计算和随机算法等的优势结合在一起用于机器学习,并支持分类、回归、推荐等基本元素。根据其设计目的,Jubatus有如下的特点:
Decider是另一个Ruby机器学习库,兼具灵活性和可扩展性。Decider内置了对纯文本和URI、填充词汇、停止词删除、字格等的支持,以上这些都可以很容易地在选项中组合。Decider可支持Ruby中任何可用的存储机制。如果你喜欢,可以保存到数据库中,实现分布式分类。Decider有几个基准,也兼作集成测试。这些都是定期运行并用于查明CPU和RAM的瓶颈。Decider可以进行大量数学运算,计算相当密集,所以对速度的要求比较高。这是经常使用Ruby1.9和JRuby测试其计算速度。此外,用户的数据集应该完全在内存中,否则将会遇到麻烦。
DeepLearning4j是一个面向生产环境和商业应用的高成熟度深度学习开源库,可与Hadoop和Spark集成,即插即用,方便开发者在APP中快速集成深度学习功能,可应用于以下深度学习领域: