Tribuo 是 Java 中的机器学习库,提供多类分类、回归、聚类、异常检测和多标签分类。 Tribuo 提供流行的 ML 算法的实现,并包装其他库以提供统一的接口。 Tribuo 包含加载、特征化和转换数据所需的所有代码。此外,它还包括所有支持的预测类型的评估类。开发由 Oracle 实验室的机器学习研究小组领导;我们欢迎社区贡献。
所有培训器均可使用 OLCUT 配置系统进行配置。这允许用户在 xml 或 json 文件中定义训练器并可重复构建模型。每个提供的 Trainer 的示例配置可以在每个包的 config 文件夹中找到。这些配置文件也可以通过使用适当的 OLCUT 配置依赖项以 json 或 edn 形式编写。模型和数据集可使用 Java 序列化进行序列化。
所有模型和评估都包含一个可序列化的来源对象,该对象记录模型或评估的创建时间、数据的身份和应用于数据的任何转换,以及训练器的超参数。在评估的情况下,此出处信息还包括所使用的特定模型。出处信息可以提取为 JSON,或直接使用 Java 序列化进行序列化。对于生产部署,可以对来源信息进行编辑并用哈希值替换,以通过外部系统提供模型跟踪。许多 Tribuo 模型可以以 ONNX 格式导出,以便部署在其他语言、平台或云服务中。
Tribuo 在 Java 8+ 上运行,我们在 Java 的 LTS 版本以及最新版本上进行测试。 Tribuo本身是一个纯Java库,并且支持所有Java平台;然而,我们的一些接口需要本机代码,因此只有在有本机库支持的情况下才受支持。我们在 Windows 10、macOS 和 Linux (RHEL/OL/CentOS 7+) 上的 x86_64 架构上进行测试,因为这些是我们与之交互的本机库的受支持平台。如果您对其他平台感兴趣并希望使用其中一个本机库接口(ONNX Runtime、TensorFlow 和 XGBoost),我们建议您联系这些库的开发人员。请注意,模型卡和重现性包需要 Java 17,因此不是tribuo-all
Maven Central 部署的一部分。
教程笔记本,包括分类、聚类、回归、异常检测、TensorFlow、文档分类、列式数据加载、使用外部训练模型和配置系统的示例,可以在教程中找到。它们使用 IJava Jupyter 笔记本内核,并可与 Java 10+ 配合使用,但模型卡和重现性教程需要 Java 17。要将教程的代码转换回 Java 8,在大多数情况下只需将var
关键字替换为适当的类型。
Tribuo 包含多种适用于各种预测任务的算法的实现:
算法 | 执行 | 笔记 |
---|---|---|
套袋 | 特里布奥 | 可以使用任何 Tribuo 训练器作为基础学习器 |
随机森林 | 特里布奥 | 对于分类和回归 |
额外的树 | 特里布奥 | 对于分类和回归 |
K-NN | 特里布奥 | 包括多个并行后端以及单线程后端的选项 |
神经网络 | TensorFlow | 通过 Tribuo 包装器在 TensorFlow 中训练神经网络。可以使用 ONNX 接口或 TF 接口部署模型 |
集成和 K-NN 使用组合函数来产生输出。这些组合器是特定于预测任务的,但集成和 K-NN 实现与任务无关。我们为多类分类、多标签分类和回归任务提供投票和平均组合器。
Tribuo 具有以下实现或接口:
算法 | 执行 | 笔记 |
---|---|---|
线性模型 | 特里布奥 | 使用 SGD 并允许任何梯度优化器 |
因式分解机 | 特里布奥 | 使用 SGD 并允许任何梯度优化器 |
大车 | 特里布奥 | |
支持向量机SGD | 特里布奥 | Pegasos 算法的实现 |
Adaboost.SAMME | 特里布奥 | 可以使用任何 Tribuo 分类训练器作为基础学习器 |
多项式朴素贝叶斯 | 特里布奥 | |
正则化线性模型 | 线性库 | |
支持向量机 | LibSVM 或 LibLinear | LibLinear 仅支持线性 SVM |
梯度提升决策树 | XGBoost |
Tribuo 还为序列分类任务提供线性链 CRF。该 CRF 是使用 Tribuo 的任何梯度优化器通过 SGD 进行训练的。
Tribuo 有一套信息论特征选择算法,可以应用于分类任务。特征输入会自动离散到等宽的箱中。目前,这包括互信息最大化 (MIM)、条件互信息最大化 (CMIM)、最小冗余最大相关性 (mRMR) 和联合互信息 (JMI) 的实现。
为了解释分类器预测,有一个 LIME 算法的实现。 Tribuo 的实现允许混合文本和表格数据,并使用任何稀疏模型作为解释器(例如回归树、套索等),但它不支持图像。
Tribuo 的回归算法默认是多维的。包装单维实现是为了产生多维输出。
算法 | 执行 | 笔记 |
---|---|---|
线性模型 | 特里布奥 | 使用 SGD 并允许任何梯度优化器 |
因式分解机 | 特里布奥 | 使用 SGD 并允许任何梯度优化器 |
大车 | 特里布奥 | |
套索 | 特里布奥 | 使用 LARS 算法 |
弹性网 | 特里布奥 | 使用坐标下降算法 |
正则化线性模型 | 线性库 | |
支持向量机 | LibSVM 或 LibLinear | LibLinear 仅支持线性 SVM |
梯度提升决策树 | XGBoost |
Tribuo 包括集群基础设施,还提供两种集群算法实现。我们希望随着时间的推移实现更多的算法。
算法 | 执行 | 笔记 |
---|---|---|
HDBSCAN* | 特里布奥 | 一种基于密度的算法,可发现聚类和异常值 |
K-均值 | 特里布奥 | 包括顺序和并行后端,以及 K-Means++ 初始化算法 |
Tribuo 提供异常检测任务的基础设施。我们希望随着时间的推移添加新的实现。
算法 | 执行 | 笔记 |
---|---|---|
一类支持向量机 | 库支持向量机 | |
一类线性 SVM | 线性库 |
Tribuo 提供多标签分类的基础设施,以及将 Tribuo 的任何多类分类算法转换为多标签分类算法的包装器。我们希望随着时间的推移添加更多的多标签特定实现。
算法 | 执行 | 笔记 |
---|---|---|
独立包装机 | 特里布奥 | 通过为每个标签生成一个单独的分类器,将多类分类算法转换为多标签算法 |
分类器链 | 特里布奥 | 使用 Tribuo 的任何多类分类算法提供分类器链和随机分类器链集成 |
线性模型 | 特里布奥 | 使用 SGD 并允许任何梯度优化器 |
因式分解机 | 特里布奥 | 使用 SGD 并允许任何梯度优化器 |
除了我们自己的机器学习算法实现之外,Tribuo 还为 JVM 上的流行 ML 工具提供了通用接口。如果您有兴趣贡献新界面,请打开 GitHub 问题,我们可以讨论它将如何融入 Tribuo。
目前我们有接口:
二进制文件可在 Maven Central 上使用 groupId org.tribuo
获得。要提取 Tribuo 的所有 Java 8 兼容组件,包括 TensorFlow、ONNX Runtime 和 XGBoost(它们是本机库)的绑定,请使用:
行家:
< dependency >
< groupId >org.tribuo</ groupId >
< artifactId >tribuo-all</ artifactId >
< version >4.3.1</ version >
< type >pom</ type >
</ dependency >
或来自 Gradle:
implementation ( " org.tribuo:tribuo-all:4.3.1@pom " ) {
transitive = true // for build.gradle (i.e., Groovy)
// isTransitive = true // for build.gradle.kts (i.e., Kotlin)
}
tribuo-all
依赖项是一个 pom,它依赖于除需要 Java 17 的模型卡和再现性项目之外的所有 Tribuo 子项目。
大多数 Tribuo 是纯 Java 的,因此是跨平台的,但是一些接口链接到使用本机代码的库。这些接口(TensorFlow、ONNX Runtime 和 XGBoost)仅在相应已发布二进制文件的支持平台上运行,Tribuo 无法控制提供哪些二进制文件。如果您需要特定平台的支持,请联系这些项目的维护人员。从 4.1 版本开始,这些本机软件包都提供适用于 Windows、macOS 和 Linux 的 x86_64 二进制文件。还可以为 macOS ARM64(即 Apple Silicon)编译每个包,尽管 Maven Central 上没有适用于该平台的 TensorFlow 或 XGBoost 二进制文件。从 4.3 版本开始,Tribuo 现在依赖于 ONNX Runtime 版本,其中包括对 macOS ARM64 和 Linux aarch64 平台的支持。在 ARM 平台上进行开发时,您可以在 Tribuo 的pom.xml
中选择arm
配置文件来禁用本机库测试。
每个 Tribuo 模块都会发布单独的 jar。最好只依赖特定项目所需的模块。这可以防止您的代码不必要地引入 TensorFlow 等大型依赖项。
Tribuo 使用 Apache Maven v3.5 或更高版本来构建。 Tribuo 与 Java 8+ 兼容,我们在 Java 的 LTS 版本以及最新版本上进行测试。要构建,只需运行mvn clean package
。所有 Tribuo 的依赖项都应该在 Maven Central 上可用。如果您遇到问题,请针对与构建相关的问题提出问题(不过,请先检查您是否缺少 Maven 的代理设置,因为这是构建失败的常见原因,并且超出了我们的控制范围)。请注意,如果您使用 Java 16 或更早版本进行构建,则模型卡和再现性包将被禁用。
开发发生在main
分支上,该分支具有下一个 Tribuo 版本的版本号,并附加“-SNAPSHOT”。 Tribuo 主要和次要版本将在main
分支上标记,然后有一个名为vA.BX-release-branch
(对于版本vA.B.0
)的分支,从任何点版本(即vA.B.1
、 vA.B.2
等)紧随该主要/次要版本。这些点版本被标记在特定的版本分支上,例如, v4.0.2
被标记在v4.0.X-release-branch
上。
我们欢迎贡献!请参阅我们的贡献指南。
我们有一个讨论邮件列表 [email protected],存档于此处。我们正在研究实时聊天的不同选项,请稍后再回来查看。对于错误报告、功能请求或其他问题,请提交 Github 问题。
请参阅安全指南,了解我们负责任的安全漏洞披露流程。
Tribuo 根据 Apache 2.0 许可证获得许可。