值得mark的11个开源机器学习项目
英文原文:11 open source tools to make the most of machine learning
垃圾邮件过滤、人脸识别、推荐引擎——当你有一个大数据集并且希望利用它们执行预测分析和模式识别,机器学习是必经之路。这门科学,计算机可以在没有事先规划的前提下自主学习、分析和操作数据,现在越来越多的开发人员关注机器学习。
机器学习技术的兴起不仅是因为硬件成本越来越便宜以及性能越来越强大,促使机器学习在单机或大规模集群上轻松部署的免费软件激增也是重要因素。机器学习库的多样性意味着无论你喜欢什么语言或环境,都有可能是获得你喜欢的。
1. Scikit-learn
Python 由于其易用性以及丰富的函数库,已经成为数学、自然科学和统计学的首选编程语言。Scikit-learn 通过在现有 Python 包上构建——NumPy SciPy 和 matplotlib——服务于数学和自然科学。生成的库要么可以使用交互式“工作台”应用程序,要么被嵌入到其他软件和重用。工具箱可以在 BSD 许可下获取,所以它是完全开放和可重用的。
Project: scikit-learn
GitHub: https://github.com/scikit-learn/scikit-learn
2. Shogun
在最古老、最值得尊敬的机器学习库中,Shogun 创建于 1999 年,用 C++ 编写,但并不限于在 C++ 工作。由于 SWIG 库,Shogun 可以轻松在 Java、Python、C#、Ruby、R、Lua、Octave、Matlab 语言和环境下使用。
虽然德高望重,Shogun 也有其他的竞争者。另一个基于 C++ 的机器学习库 Mlpack 在 2011 年出现,它宣称比其他竞争者速度更快并且更容易使用(一个更完整的 API 集)。
Project: Shogun
GitHub: https://github.com/shogun-toolbox/shogun
3. Accord Framework/AForge.net
Accord,一个 .Net 的机器学习和信号处理框架,是早前类似一个项目 AForge.net 的扩展。顺便说一下,“信号处理”这里是指一系列对图像和音频的机器学习算法,如图片无缝缝合或执行人脸检测。包含一组视觉处理算法;它作用于图像流(如 视频),并且可用于实现移动对象的跟踪等功能。Accord 还提供一个从神经网络到决策树系统的机器学习常见库。
Project: Accord Framework/AForge.net
GitHub: https://github.com/accord-net/framework/
4. Mahout
Mahout 框架一直与 Hadoop 相关联,但旗下很多算法还可以脱离 Hadoop 运行。他们对那些可能最终迁移到 Hadoop 上的应用程序或从 Hadoop 上剥离成为独立应用程序的项目非常有用。
Mahout 缺点之一:目前几乎没有算法支持高性能的 Spark 框架,反而使用日益过时的 MapReduce 框架。该项目目前不接受基于 MapReduce 的算法,那些想要获得更高性能的开发者转而用 MLlib 替代。
Project: Mahout
5. MLlib
Apache 自己的 Spark 和 Hadoop 机器学习库,旨在为大规模和高速度而设计的 MLlib 自称拥有所有常见的算法和有用数据类型。与任何 Hadoop 项目一样,Java 是 MLlib 上的基本语言,但是 Python 用户可以用 MLlib NumPy 库连接(也用于 scikit-learn),并且 Scala 用户可以针对 MLlib 编写代码。如果不能设置一个 Hadoop 集群,MLlib 可以在没有 Hadoop 的情况下部署在 Spark 上——以及在 EC2 或 Mesos 上。
Project:MLlib
6. H2O
0xdata H2O 的算法是面向业务流程——欺诈或趋势预测。Hadoop 专家可以使用 Java 与 H2O 相互作用,但框架还提供了对 Python、R以及 Scala 的捆绑。
Project: H20
GitHub: https://github.com/0xdata/h2o
7. Cloudera Oryx
另一个为 Hadoop 设计的机器学习项目 Oryx 由 Cloudera Hadoop distribution 创造者提供。Oryx 是为了允许机器学习模型部署在实时流数据上而设计的,如实时垃圾邮件过滤器或推荐引擎。
该项目的全新版本暂时定名为 Oryx 2,目前正在准备阶段。它使用 Apache 项目如 Spark 和 Kafka 实现更高性能,其组件构建走松散耦合路线以便能经得住时间考验。
Project:Cloudera Oryx
GitHub: https://github.com/cloudera/oryx
8. GoLearn
谷歌的 Go 语言已经开始被广泛使用,随着库越来越多,据其开发者 Stephen Witworth 介绍,GoLearn 被构建为 Go 语言的一体化的机器学习库,目标是“简单可定制”。简单主要是由于数据在库内被加载和处理,因为它是仿照 SciPy 和R;可定制性在于库的开放源码特性以及一些数据结构可以很容易地在一个应用程序中扩展。Witworth 也为 Vowpal Wabbit 库创建了一个包装器,其中一个库存放在 Shogun 工具箱中。
Project:GoLearn
GitHub: https://github.com/sjwhitworth/golearn
9. Weka
Weka 是新西兰 Waikato 大学开发的,收集一组专门为数据挖掘设计的 Java 机器学习算法。这组 GNU 得到 GPLv3 许可的集有一个包系统扩展其功能,有官方和非官方包两种。Weka 甚至还有专门一本书解释其软件和实战技术,所以那些想要在概念和软件上取得优势的开发者可以关注下。
虽然 Weka 并不是专门针对 Hadoop 用户,但是 Weka 的最新版本的一组封装器可以用于 Hadoop。请注意,它还不能支持 Spark,只有 MapReduc。Clojure 用户还可以通过 Clj-ml 库利用 Weka。
Project: Weka
10. CUDA-Convnet
现在大多数人都知道 GPU 在处理某些问题上的速度比 CPU 快。但应用程序不会自动利用 GPU 的加速功能;他们必须明确通过程序写入。CUDA-Convne 是一个神经网络应用程序机器学习库,用 C++ 编写来开发 Nvidia 的 CUDA GPU 处理技术。对于那些使用 Python 而不是 C++ 用户,由此产生的神经网络可以保存为 Python pickle 对象,因此可以从 Python 存取。
注意,原始版本的项目不再被开发,但是已经被重组为 CUDA-Convnet2,支持多个 GPU 和 Kepler-generation GPU。与之类似的项目 Vulpes,已经用F#编写,并且通常和 .Net 框架一起使用。
Project: CUDA-Convnet
11. ConvNetJS
顾名思义,ConvNetJS 是一个基于 js 的深度学习 library,可以让你在浏览器中训练深度网络。NPM 版本也可用于那些使用 Node.js 的用户,并且这个库也是为合理使用 JavaScript 的异步性而设计,例如,一旦他们完成训练操作可以给出一个回调函数来执行。里面还包含大量的演示案例。
Project: ConvNetJS
GitHub: https://github.com/karpathy/convnetjs