[关闭]
@sambodhi 2018-09-13T15:11:36.000000Z 字数 8434 阅读 2033

六大最常用的Java机器学习库一览

作者|Fatema Patrawala
译者|刘志勇
编辑|陈思

AI前线导读:机器学习是目前盛行于世的技术之一,这几年一时风头无两。虽然在机器学习中,Python是人工智能从业者使用最多的编程语言,但是,Java在项目开发中仍然发挥着不可替代的作用,而且许多流行的机器学习框架本身就是Java编写的。Python的资料到处都是,而Java相关的资料就相对少了很多。今天我们翻译了Fatema Patrawala撰写的《六大最常用的Java机器学习库一览》。

在MLOSS.org网站上,列出了70多个基于Java的开源机器学习项目,可能还有更多未列出的项目,存于大学里的服务器、GitHub或Bitbucket中。我们将在本文中回顾Java中的主流机器学习库和平台,它们能够解决的问题类型,支持的算法以及可以使用的数据类型。

本文节选自Machine learning in Java,由Bostjan Kaluza编写,Packt Publishing Ltd.出版

Weka

Weka是Waikato Environment for Knowledge Analysis(Waikato智能分析环境)的缩写,是新西兰Waikato大学开发的机器学习库,也可能是最为有名的Java库。Weka是一个通用的库,能够解决各种机器学习任务,如分类、回归和聚类。它具有丰富的图形用户界面、命令行界面和Java API。有关Weka更多详情,请参阅:http://www.cs.waikato.ac.nz/ml/weka/

截止到本书写作之时,Weka总共包含267个算法,其中:数据预处理(82),属性选择(33),分类和回归(133),聚类(12),关联规则挖掘(7)。图形界面非常适合用于探索数据,而Java API可以让你开发新的机器学习方案并在应用中使用这些算法。

Weka

Weka是在GNU通用公共许可证(GNU GPL)下发布的,这意味着你可以复制、分发和修改它,只要你跟踪源文件中的更改并将其保存在GNU GPL下。你甚至可以进行商业分发,但前提是你必须公开源代码或获得商业许可证。

除了几种支持的文件格式外,Weka还提供了自己的默认数据格式ARFF,用于通过属性-数据对描述数据。它由两部分组成:第一部分包含标题头,它指定所有属性(即特性)及其类型;例如,标称、数字、日期和字符串。第二部分包含数据,其中每行对应于一个实例。标题头中的最后一个属性隐式地被视为目标变量,缺失的数据用问号标记。例如,用ARFF文件格式编写的Bob实例如下:

  1. @RELATION person_dataset
  2. @ATTRIBUTE `Name` STRING
  3. @ATTRIBUTE `Height` NUMERIC
  4. @ATTRIBUTE `Eye color`{blue, brown, green}
  5. @ATTRIBUTE `Hobbies` STRING
  6. @DATA
  7. 'Bob', 185.0, blue, 'climbing, sky diving'
  8. 'Anna', 163.0, brown, 'reading'
  9. 'Jane', 168.0, ?, ?

该文件由三个部分组成。第一部分以@relation关键字开始,指定数据集名称。下一部分以@ATTRIBUTE关键字开始,后面是属性名和类型。可用的类型是STRING(字符串)、NUMERIC(数字)、DATE(日期)和一组分类值。最后一个属性被隐式假设为我们想要预测的目标变量。最后一部分以@DATA关键字开始,每行后面跟着一个实例。实例值用逗号分隔,并且必须遵循与第二部分中的属性相同的顺序。

Weka的Java API由以下的顶层包组成:

用于机器学习的Java-ML

Java机器学习库(Java-ML)是一组机器学习算法的集合,具备用于相同类型的算法的公共接口。它只提供Java API,因此,它主要面向的是软件工程师和程序员。Java-ML包含用于数据预处理、特征选择、分类和聚类的算法。此外,它还提供了几个Weka桥来直接通过Java-ML API访问Weka的算法。Java-ML可从http://java-ml.sourceforge.net下载,截至本书完成之际,最近版本发布于2012年。

Java machine learning

Java-ML也是一个通用机器学习库。与Weka相比,它提供了更为一致的接口和最新算法的实现,在其他包中不存在这些算法,如一系列最先进的相似性度量和特征选择技术等,这些包含动态时间规整、随机森林属性评估等等。Java-ML也可以在GNU GPL许可证下使用。

Java-ML支持任何类型的文件,只要它每行包含一个数据样本,并且特征用逗号、分号和制表符分隔。

Java-ML库由以下顶层包组成:

Apache Mahout

Apache Mahout项目旨在构建可扩展的机器学习库。它是在可扩展分布式体系结构(如Hadoop)上构建的,实用MapReduce范例,这是一种实用服务器集群处理和生成具有并行分布式算法的大型数据及的方法。

Apache Mahout

Mahout提供了控制台界面和Java API,可用于聚类、分类和写作过滤的可扩展算法。它可以解决这三个业务问题:项目推荐,如向喜欢某部电影的人推荐其他可能喜欢的电影;聚类,如将文本文档分组与主题相关的文档组中归档;分类,如学习将哪个主题分配给未标记的文档。

Mahout是在商业化的Apache许可证下分发的,这意味着只要你保留Apache许可证并将其显示在程序的版权声明中,你就可以使用它。

Mahout提供了以下库:

Apache Spark

Apache Spark(或简称Spark)是在Hadoop上构建大规模数据处理的平台,但与Mahout不同的是,它与MapReduce范式无关。相反,它使用内存缓存提取工作数据集,对其进行处理并重复查询。据报道,Spark直接处理磁盘存储数据的速度是Mahout实现的十倍。可从https://spark.apache.org下载。

Apache Spark

在Spark之上构建了许多模块,例如用于图形处理的GraphX、用于处理实时数据流的Spark Streaming和用于机器学习库的MLlib,这些模块具有分类、回归、协同过滤、聚类、降维和优化。

Spark的MLlib可以使用基于Hadoop的数据源,例如Hadoop分布式文件系统(HDFS)或HBase,以及本地文件。支持的数据类型包括以下几种:

Spark的MLlib API库提供了各种学习算法和实用工具的接口,如下所示:

Deeplearning4j

DeepLearning4j(或称DL4J),是一个用Java编写的深度学习库。它具有分布式和单机深度学习框架,包括并支持各种神经网络结构,如前馈神经网络、RBM(Restricted Boltzmann Machine,受限玻尔兹曼机)、卷积神经网络、深度信念网络、自动编码器等。DL4J可以解决不同的问题,比如识别面孔、声音、垃圾邮件和电子商务欺诈。

Deeplearning4j也是在Apache 2.0许可下分发的,可从http://deeplearning4j.org下载。该库由以下组成:

MALLET

机器学习语言工作包(Machine Learning for Language Toolkit,MALLET),是一个包含自然语言处理算法和实用程序的大型库。它可以用于各种任务,如文档分类、分档聚类、信息提取和主题建模。MALLET提供了命令行界面和Java API,适用于多种算法,如朴素贝叶斯、HMM(Hidden Markov Model,隐马尔可夫模型)、隐含狄利克主题模型(Latent Dirichlet topic model)、逻辑回归和条件随机域(conditional random fields)。

Mallet

MALLET可以在通用公共许可证1.0下使用,这意味着你甚至可以在商业应用程序中使用它。可以从http://mallet.cs.umass.edu下载。MALLET实例由名称、标签、数据和源表示。但是,有两种方法可以将数据导入到MALLET格式中,如下所示:

该库由以下包组成:

如果你想利用关键的Java机器学习库进行设计、构建和部署你自己的机器学习应用,请查阅Packt Publishing出版社出版的《Java机器学习》(Machine Learning in Java)一书。

原文链接: 6 most commonly used Java Machine learning libraries
https://hub.packtpub.com/most-commonly-used-java-machine-learning-libraries/

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注