常用的Java机器学习库
在 MLOSS.org 网站上,列出了 70 多个基于 Java 的开源机器学习项目,可能还有更多未列出的项目,存于大学里的服务器、GitHub 或 Bitbucket 中。我们将在本文中回顾 Java 中的主流机器学习库和平台,它们能够解决的问题类型,支持的算法以及可以使用的数据类型。
本文节选自 Machine learning in Java,由 Bostjan Kaluza 编写,Packt Publishing Ltd. 出版
1、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 是在 GNU 通用公共许可证(GNU GPL)下发布的,这意味着你可以复制、分发和修改它,只要你跟踪源文件中的更改并将其保存在 GNU GPL 下。你甚至可以进行商业分发,但前提是你必须公开源代码或获得商业许可证。
除了几种支持的文件格式外,Weka 还提供了自己的默认数据格式 ARFF,用于通过属性 - 数据对描述数据。它由两部分组成:第一部分包含标题头,它指定所有属性(即特性)及其类型;例如,标称、数字、日期和字符串。第二部分包含数据,其中每行对应于一个实例。标题头中的最后一个属性隐式地被视为目标变量,缺失的数据用问号标记。例如,用 ARFF 文件格式编写的 Bob 实例如下:
<span style="color:#aa090f"><code class="language-java"> <span style="color:#2b91af">@RELATION</span> person_dataset
<span style="color:#2b91af">@ATTRIBUTE</span> `Name` STRING
<span style="color:#2b91af">@ATTRIBUTE</span> `Height` NUMERIC
<span style="color:#2b91af">@ATTRIBUTE</span> `Eye color`{blue, brown, green}
<span style="color:#2b91af">@ATTRIBUTE</span> `Hobbies` STRING
<span style="color:#2b91af">@DATA</span>
<span style="color:#a31515">'Bob'</span>, 185.0, blue, <span style="color:#a31515">'climbing, sky diving'</span>
<span style="color:#a31515">'Anna'</span>, 163.0, brown, <span style="color:#a31515">'reading'</span>
<span style="color:#a31515">'Jane'</span>, 168.0, ?, ?
</code></span>
该文件由三个部分组成。第一部分以 @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
-