机器学习是目前起源于世的技术之一,这一两年一时之间锋头无两。虽然在机器学习中,Python 是人工智慧从业者采用最少的C语言,但是,Java 在工程项目合作开发中依然充分发挥着不容代替的作用,而且许多盛行的机器学习架构这类就是 Java 编写的。Python 的统计数据资料四处都是,而 Java 有关的统计数据资料就相较少了许多。那时他们译者了 Fatema Patrawala 编写的《五大最常见的 Java 机器学习库参阅》。
在 MLOSS.org 中文网站上,列举了 70 数个如前所述 Java 的开放源码机器学习工程项目,可能将还有更多未列举的工程项目,藏于理工学院里的伺服器、GitHub 或 Bitbucket 中。他们将在责任撰稿中简述 Java 中的非主流机器学习库和网络平台,它能化解的问题类别,全力支持的演算法以及能采用的正则表达式。
责任撰稿农圣 Machine learning in Java,由 Bostjan Kaluza 编写,Packt Publishing Ltd. 出版发行
WekaWeka 是 Waikato Environment for Knowledge Analysis(Waikato 智能化预测自然环境)的简写,是澳大利亚 Waikato 理工学院合作开发的机器学习库,也可能将是最出名的 Java 库。Weka 是一个通用型的库,能化解各种机器学习各项任务,如进行分类、重回和控制点。它具有多样的GUI、配置文件介面和 Java API。有关 Weka 更多详细情况,参见:http://www.cs.waikato.ac.nz/ml/weka/
止到两本书诗歌创作之时,Weka 一共包涵 267 个演算法,其中:统计数据后处理(82),特性优先选择(33),进行分类和重回(133),控制点(12),关连准则发掘(7)。GUI适于用作积极探索统计数据,而 Java API 能让你合作开发捷伊机器学习计划并在应用领域中采用这些演算法。
Weka 是在 GNU 通用型公共许可证(GNU GPL)下发布的,这意味着你能复制、分发和修改它,只要你跟踪源文件中的更改并将其保存在 GNU GPL 下。你甚至能进行商业分发,但前提是你必须公开放源码代码或获得商业许可证。
除了几种全力支持的文件格式外,Weka 还提供了自己的默认统计数据格式 ARFF,用作通过特性 – 统计数据对描述统计数据。它由两部分组成:第一部分包涵标题头,它指定所有特性(即特性)及其类别;例如,标称、数字、日期和字符串。第二部分包涵统计数据,其中每行对应于一个实例。标题头中的最后一个特性隐式地被视为目标变量,缺失的统计数据用问号标记。例如,用 ARFF 文件格式编写的 Bob 实例如下:
该文件由三个部分组成。第一部分以 @relation 关键字开始,指定数据集名称。下一部分以 @ATTRIBUTE 关键字开始,后面是特性名和类别。可用的类别是 STRING(字符串)、NUMERIC(数字)、DATE(日期)和一组进行分类值。最后一个特性被隐式假设为他们想要预测的目标变量。最后一部分以 @DATA 关键字开始,每行后面跟着一个实例。实例值用逗号分隔,并且必须遵循与第二部分中的特性相同的顺序。
Weka 的 Java API 由以下的顶层包组成:
weka.associations:这些是关连准则学习的统计数据结构和演算法,包括 Apriori、 predictive apriori、FilteredAssociator、FP-Growth、Generalized Sequential Patterns (GSP)、Hotspot 和 Tertius。
weka.classifiers:这些是监督学习演算法、评估期和统计数据结构。该包由以下几个部分组成:
weka.classifiers.bayes:它实现了贝叶斯(Bayesian)方法,包括朴素贝叶斯、贝式网络、贝叶斯逻辑重回等。
weka.classifiers.evaluation:这些是评价统计、混淆矩阵、ROC 曲线等标称和数值预测的监督评价演算法。
weka.classifiers.functions:这些是重回演算法,包括线性重回、保序重回、高斯过程、全力支持向量机、多层感知器、表决感知器等。
weka.classifiers.lazy:这些是如前所述实例的演算法,比如 k- 最近邻、K*,惰性贝叶斯准则。
weka.classifiers.meta:这些是监督学习元演算法,包括 AdaBoost、bagging、加性重回、随机委员会(random committee)等。
weka.classifiers.mi:这些是多实例演算法,如 Citation-KNN、多样性密度、MI AdaBoost 等。
weka.classifiers.rules:这些是如前所述变治法(separate-and-conquer)、Ripper、Part、Prism 的决策表和决策规格。
weka.classifiers.trees:这些是各种决策树演算法,包括 ID3、C4.5、M5、功能树、逻辑树、随机森林等。
weka.clusterers:这些是控制点演算法,包括 k-means、Clope、Cobweb、DBSCAN 层次控制点、Farthest 等
weka.core:这些是各种实用类、统计数据表示、配置文件等。
weka.datagenerators:这些是用作进行分类、重回和控制点演算法的统计数据生成器。
weka.estimators:这些是用作离散 / 标称域、条件概率估计等的各种统计数据分布估计。
weka.experiment:这是一组类,全力支持运行实验所需的配置、统计数据集、模型设置和统计信息。
weka.filters:这些是如前所述特性和如前所述实例的优先选择演算法,用作监督和非监督统计数据后处理。
weka.gui:这些是实现 Explorer、Experimenter、和 Knowledge Flow 的GUI。Explorer 允许你调查统计数据集、算法及其参数,并采用散点图和其他可视化的形式对统计数据集进行可视化。Experimenter 用作设计批量实验,但它只能用作进行分类和重回问题。Knowledge Flow 实现了可视化的拖放式用户介面来构建数据流,如:加载统计数据、应用领域过滤器、构建进行分类器和评估。
用作机器学习的 Java-MLJava 机器学习库(Java-ML)是一组机器学习演算法的集合,具备用作相同类别的演算法的公共接口。它只提供 Java API,因此,它主要面向的是软件工程师和程序员。Java-ML 包涵用作统计数据后处理、特征优先选择、进行分类和控制点的演算法。此外,它还提供了几个 Weka 桥来直接通过 Java-ML API 访问 Weka 的算法。Java-ML 可从 http://java-ml.sourceforge.net 下载,截至两本书完成之际,最近版本发布于 2012 年。
Java-ML 也是一个通用型机器学习库。与 Weka 相比,它提供了更为一致的接口和最新演算法的实现,在其他包中不存在这些演算法,如一系列最先进的相似性度量和特征优先选择技术等,这些包涵动态时间规整、随机森林特性评估等等。Java-ML 也能在 GNU GPL 许可证下采用。
Java-ML 全力支持任何类别的文件,只要它每行包涵一个统计数据样本,并且特征用逗号、分号和制表符分隔。
Java-ML 库由以下顶层包组成:
net.sf.javaml.classification:这些是进行分类演算法,包括朴素贝叶斯、随机森林、Bagging、自组织映射、k- 最近邻等。
net.sf.javaml.clustering:这些是控制点演算法,包括 kmeans、自组织映射、空间控制点、Cobweb、AQBC 等。
net.sf.javaml.core:这些表示实例和统计数据集。
net.sf.javaml.distance:这些是测量实例距离和相似度的演算法,如切比雪夫距离(Chebyshev distance)、余弦距离 / 相似度、欧几里得距离(Euclidian distance)、杰卡德距离(Jaccard distance)/ 相似度、马氏距离(Mahalanobis distance)、曼哈顿距离(Manhattan distance)、明氏距离(Minkowski distance)、皮尔逊积矩有关系数(Pearson correlation coefficient)、斯皮尔曼简捷距离(Spearmans footrule distance)、动态时间规整(dynamic time wrapping,DTW)等。
net.sf.javaml.featureselection:这些是用作特征评估、评分、优先选择和排名的演算法,如增益比、ReliefF、Kullback-Liebler 散度、对称不确定性等。
net.sf.javaml.filter:这些是通过过滤、删除特性、设置类或特性值等操作实例的方法。
net.sf.javaml.matrix:实现内存或如前所述文件的数组。
net.sf.javaml.sampling:实现优先选择统计数据集子集的采样演算法。net.sf.javaml.tools:这些是关于统计数据集、实例操作、序列化、Weka API 接口等的采用方法。
net.sf.javaml.utils:这些是演算法的实用方法,如统计、数学方法、列联表等表等。
Apache MahoutApache Mahout 工程项目旨在构建可扩展的机器学习库。它是在可扩展分布式体系结构(如 Hadoop)上构建的,实用 MapReduce 范例,这是一种实用伺服器集群处理和生成具有并行分布式演算法的大型统计数据及的方法。
Mahout 提供了控制台介面和 Java API,可用作控制点、进行分类和诗歌创作过滤的可扩展演算法。它能化解这三个业务问题:工程项目推荐,如向喜欢某部电影的人推荐其他可能将喜欢的电影;聚类,如将文责任撰稿档分组与主题有关的文档组中归档;进行分类,如学习将哪个主题分配给未标记的文档。
Mahout 是在商业化的 Apache 许可证下分发的,这意味着只要你保留 Apache 许可证并将其显示在程序的版权声明中,你就能采用它。
Mahout 提供了以下库:
org.apache.mahout.cf.taste:这些是如前所述用户和如前所述工程项目的协同过滤演算法,及如前所述 ALS 的矩阵分解演算法。
org.apache.mahout.classifier:这些是内存和分布式实现,包括逻辑重回、朴素贝叶斯、随机森林、隐马尔科夫模型(hidden Markov models,HMM)和多层感知器。
org.apache.mahout.clustering:这些是控制点演算法,例如 Canopy 控制点、k-means、模糊 k-means、流式 K-means 和谱控制点。
org.apache.mahout.common:这些是演算法的实用方法,包括距离、MapReduce 操作、迭代器等。
org.apache.mahout.driver:实现了通用型驱动程序来运行其他类的主要方法。
org.apache.mahout.ep:这是采用记录步骤突变的进化优化。
org.apache.mahout.math:这些是 Hadoop 中的各种统计数据额实用方法和实现。
org.apache.mahout.vectorizer:这些是用作统计数据表示、操作和 MapReduce 各项任务的类。
Apache SparkApache Spark(或简称 Spark)是在 Hadoop 上构建大规模统计数据处理的网络平台,但与 Mahout 不同的是,它与 MapReduce 范式无关。相反,它采用内存缓存提取工作统计数据集,对其进行处理并重复查询。据报道,Spark 直接处理磁盘存储统计数据的速度是 Mahout 实现的十倍。可从 https://spark.apache.org 下载。
在 Spark 之上构建了许多模块,例如用作图形处理的 GraphX、用作处理实时统计数据流的 Spark Streaming 和用作机器学习库的 MLlib,这些模块具有进行分类、重回、协同过滤、控制点、降维和优化。
Spark 的 MLlib 能采用如前所述 Hadoop 的统计数据源,例如 Hadoop 分布式文件系统(HDFS)或 HBase,以及本地文件。全力支持的正则表达式包括以下几种:
局部向量存储在一台机器上。稠密向量表示为双类别值数组,如 (2.0,0.0,10.,0.0);而稀疏向量由向量的大小、索引数组和值数组表示,如 [4, (0, 2), (2.0, 1.0)]。
标记点用作监督学习演算法,由局部向量组成,用双类别的类值标记。标签能是类索引、二进制结果或数个类索引的列表(多类进行分类)。例如,标记的稠密向量表示为 [1.0, (2.0, 0.0, 1.0, 0.0)]。
局部矩阵在单台机器上存储稠密矩阵。它由矩阵维数和以列主序排列的单个双数组定义。
分布式矩阵对存储在 Spark 的弹性分布式统计数据集(Resilient Distributed Dataset,RDD)中的统计数据进行操作,RDD 表示能并行操作的元素集合。有三种表示:行矩阵,其中每一行都是能存储在一台机器上的局部向量,但行索引没有意义;索引行矩阵,类似于行矩阵,但行索引是有意义的,即能识别行并执行行连接;坐标矩阵,当行不能存储在一台机器上,且矩阵非常稀疏时才采用。
Spark 的 MLlib API 库提供了各种学习演算法和实用工具的接口,如下所示:
org.apache.spark.mllib.classification:这些是二元和多类进行分类演算法,包括线性 SVM、逻辑重回、决策树和朴素贝叶斯。
org.apache.spark.mllib.clustering:这些是 k-means 控制点。
org.apache.spark.mllib.linalg:这些是统计数据表示,包括稠密向量、稀疏向量和矩阵。
org.apache.spark.mllib.optimization:这是 MLlib 中作为低级基元的各种优化演算法,包括梯度下降、随机梯度下降、分布式 SGD 的更新计划和有限内存 BFGS。
org.apache.spark.mllib.recommendation:这些是如前所述模型的协同过滤,通过交替最小二乘矩阵分解来实现。
org.apache.spark.mllib.regression:这些是重回学习演算法,如线性最小二乘、决策树、Lasso 和 Ridge 重回。
org.apache.spark.mllib.stat:这些是稀疏或稠密向量格式的样本的统计函数,用作计算均值、方差、最小值、最大值、计数和非零计数。org.apache.spark.mllib.tree:实现了进行分类和重回决策树的演算法。
org.apache.spark.mllib.util:这些是用作加载、保存、后处理、生成和验证统计数据的方法的集合。
Deeplearning4jDeepLearning4j(或称 DL4J),是一个用 Java 编写的深度学习库。它具有分布式和单机深度学习架构,包括并全力支持各种神经网络结构,如前馈神经网络、RBM(Restricted Boltzmann Machine,受限玻尔兹曼机)、卷积神经网络、深度信念网络、自动编码器等。DL4J 能化解不同的问题,比如识别面孔、声音、垃圾邮件和电子商务欺诈。
Deeplearning4j 也是在 Apache 2.0 许可下分发的,可从 http://deeplearning4j.org 下载。该库由以下组成:
org.deeplearning4j.base:这些是加载类。
org.deeplearning4j.berkeley:这些是数学采用方法。
org.deeplearning4j.clustering:k-means 的控制点实现。
org.deeplearning4j.datasets:这是统计数据集的操作,包括导入、创建、迭代等。
org.deeplearning4j.distributions:这是用作分发的实用方法。
org.deeplearning4j.eval:这些是评估类,包括混淆矩阵。
org.deeplearning4j.exceptions:实现异常处理程序。
org.deeplearning4j.models:这些是监督学习演算法,包括深度信念网络、堆叠式自动编码器、堆叠去噪式自动编码器和 RBM。
org.deeplearning4j.nn:这些是如前所述神经网络的组件和演算法的实现,例如神经网络、多层网络、卷积多层网络等。
org.deeplearning4j.optimize:这些是神经网络优化演算法,包括反向传播、多层优化、输出层优化等。
org.deeplearning4j.plot:这些是用作呈现统计数据的各种方法。
org.deeplearning4j.rng:这是一个随机统计数据生成器。
org.deeplearning4j.util:这些是帮助和实用方法。
MALLET机器学习语言工作包(Machine Learning for Language Toolkit,MALLET),是一个包涵自然语言处理演算法和实用程序的大型库。它能用作各种各项任务,如文档进行分类、分档控制点、信息提取和主题建模。MALLET 提供了配置文件介面和 Java API,适用作多种演算法,如朴素贝叶斯、HMM(Hidden Markov Model,隐马尔可夫模型)、隐含狄利克主题模型(Latent Dirichlet topic model)、逻辑重回和条件随机域(conditional random fields)。
MALLET 能在通用型公共许可证 1.0 下采用,这意味着你甚至能在商业应用领域程序中采用它。能从http://mallet.cs.umass.edu下载。MALLET 实例由名称、标签、统计数据和源表示。但是,有两种方法能将统计数据导入到 MALLET 格式中,如下所示:
Instance per file:每个文件(即文档)对应一个实例,MALLET 接受输入的目录名。
Instance per line:每行对应一个实例,假设采用以下格式:instance_name 标签令牌。统计数据将是一个特征向量,由作为标记出现的不同单词和它出现次数组成。
该库由以下包组成:
cc.mallet.classify:这些是用作训练和进行分类实例的演算法,包括 AdaBoost、Bagging、C4.5、以及其他决策树模型、多元逻辑重回、朴素贝叶斯和 Winnow2。
cc.mallet.cluster:这些是无监督控制点演算法,包括贪心凝聚( greedy agglomerative)、爬山演算法(hill climbing)、k-best 和 k-means 控制点。
cc.mallet.extract:实现分词器(tokenizers)、文档提取器、文档查看器和清理器等。
cc.mallet.fst: 实现了序列模型,包括条件随机域、HMM、最大熵马尔科夫模型(maximum entropy Markov models),以及相应的演算法和评估器。
cc.mallet.grmm:实现了如推理演算法、学习和测试的图形模型和因子图。例如环状信念传播(loopy belief propagation)、吉布斯采样(Gibbs sampling)等。
cc.mallet.optimize:这些是用作寻找函数最大值的优化演算法,例如梯度上升、有限内存 BFGS、随机元上升(stochastic meta ascent)等。
cc.mallet.pipe:这些方法是将统计数据处理为 MALLET 实例中的管道。cc.mallet.topics:这些是主题建模演算法,例如隐含狄利克分布(Latent Dirichlet allocation)、四级弹球分布(four-level pachinko allocation)、分层 PAM、DMRT 等。
cc.mallet.types:实现了基本正则表达式,如统计数据集、特征向量、实例和标签。
cc.mallet.util:这些是各种实用工具功能,如配置文件处理、搜索、数学、测试等。
如果你想利用关键的 Java 机器学习库进行设计、构建和部署你自己的机器学习应用领域,请查阅 Packt Publishing 出版发行社出版发行的《Java 机器学习》(Machine Learning in Java)一书。
原文链接:
https://hub.packtpub.com/most-commonly-used-java-machine-learning-libraries/
如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!