一种面向Java的机器学习库--TRIBRO

2020-09-16 22:21:48

TRIBRO是一个用Java编写的机器学习库,提供多类分类、回归、聚类、异常检测和多标签分类。TRIBRO提供了流行ML算法的实现,并包装了其他库以提供统一的接口,包含加载、特色化和转换数据所需的所有代码,此外,它还包括所有支持的预测类型的评估类。开发由Oracle Labs';MachineLearning研究小组领导;我们欢迎社区的贡献。

所有教员都可以使用OLCUT配置系统进行配置。这允许用户在XML文件中定义教练员,并可重复地构建模型。可以在每个软件包的config文件夹中找到每个提供的培训师的示例配置。通过使用适当的OLCUT配置依赖项,这些配置文件也可以用jsonor edn编写。模型和数据集可以使用Java序列化进行序列化。

所有模型和评估都包括一个可序列化的来源对象,该对象记录模型或评估的创建时间、数据的身份和应用于它的任何转换,以及跟踪器的超参数。在评估的情况下,此来源信息还包括所使用的具体型号。来源信息可以提取为JSON,或者使用Java序列化直接序列化。对于生产部署,可以对出处信息进行编校并用散列替换,以便通过外部系统提供模型跟踪。

Tribeo在Java8+上运行,我们在Java的最新版本和它的版本上进行了测试。Tribeo本身是一个纯Java库,在所有Java平台上都受支持;然而,我们的一些接口需要本机代码,因此只有在有本地库支持的地方才受支持。我们在Windows 10、MacOS和Linux(RHEL/OL/CentOS 7+)上的x86_64体系结构上进行了测试,因为这些平台支持我们与之交互的本地库。如果您对另一个平台重新感兴趣并希望使用本地库接口之一(ONNX Runtime、TensorFlow和XGBoost),我们建议与这些库的开发人员联系。

教程笔记本,包括分类、聚类、回归、异常检测和配置系统的示例,可以在教程中找到。它们使用IJavaJupyter笔记本内核,并与Java10+配合使用。要将教程代码转换回Java8,只需将var关键字替换为适当的类型即可。

将TensorFlow神经网络传递给三元包装器。可以使用ONNX接口或TF接口部署模型。

集成和K-NN使用组合函数来产生它们的输出,这些合并器是特定于预测任务的,但是集成和K-NN的实现是任务不可知的。我们为分类和回归任务提供投票和平均组合器。

我们的LIME实现允许混合文本和表格数据,但不支持图像

TRIBRIO还为序列分类任务提供线性链CRF。这个CRF是通过SGD使用三胞的任何梯度优化器进行训练的。

默认情况下,三元回归算法是多维的。单维实现被包装以产生多维输出。

TRIBRIO包括用于集群的基础设施,并且还提供了单集群算法实现。我们希望随着时间的推移实现额外的算法。

Tribeo为异常检测任务提供了基础设施,并使用LibSVM实现了单一的后台实现。我们希望随着时间的推移添加新的实现。

除了我们自己的机器学习算法实现之外,Tribeo还为JVM上流行的ML工具提供了一个公共接口。如果你重新有兴趣贡献一个新的界面,打开GitHub的问题,我们可以讨论它如何适合三胞。

TensorFlow-使用1.14 Java API。我们正在参与TensorFlow JVM SIG,即将发布的TensorFlow 2 Java API将支持不带Python的培训模型,我们将在发布时将其合并到三元模型中。

在Maven Central上可以使用groupId org.tribuo获得二进制文件。要拉出所有的三元,包括TensorFlow、ONNX Runtime和XGBoost(它们是本机库)的绑定,请使用:

大多数Tribeo是纯Java的,因此是跨平台的,但是一些接口链接到使用本机代码的库。这些接口(TensorFlow、ONNX Runtime和XGBoost)仅在受支持的平台上运行,用于预期发布的二进制文件,而Tribeo无法控制提供哪些二进制文件。如果您需要某个特定平台的支持,请联系这些项目的维护人员。

为每个三元模块发布单独的JAR。最好只依赖于特定项目所需的模块。这可以防止您的代码不必要地引入像TensorFlow这样的大型依赖项。

TRIBRIO使用Apache Maven v3.5或更高版本进行构建,与Java8+兼容,我们在Java的LTS版本和最新版本上进行了测试。要进行构建,只需运行MVN CLEAN包即可。所有的三元依赖项都应该在Maven Central上可用。如果您遇到问题,请提交与构建相关的问题(不过,请先检查您是否重新丢失了Maven的代理设置,因为这是构建失败的常见原因,并且不在我们的控制范围之内),请将问题提交给与构建相关的问题(不过,请务必检查您是否首先丢失了Maven的代理设置,因为这是构建失败的常见原因,并且不在我们的控制范围之内)。

我们有一个讨论邮件列表[email protected],存档在这里。我们正在研究不同的实时聊天选项,请在不久的将来再来查看。对于错误端口、功能请求或其他问题,请提交GithubIssue。