### 在Java/JVM应用程序中拟合和评分机器学习模型

请指导我如何在Java/JVM应用程序(生产环境中)创建和执行机器学习模型/统计模型(回归、决策树、K均值聚类、朴素贝叶斯、评分卡/线性/逻辑回归等,以及GBM、GLM)。

我们有一个基于Java的ETL产品,可以进行大部分机器学习的数据准备步骤,如从JDBC、文件、HDFS、NoSQL等数据摄取,进行连接和聚合等(这些是特征工程所需的),现在我们想添加使用机器学习/统计建模的分析能力。

目前,我们使用JPMML-evaluator来评分用R和Python(以及Knime)创建的PMML格式的模型,但它需要三个独立且不相关的步骤:1- 在我们的Java/JVM应用程序中进行数据准备的第一步,并将抽样数据(训练和测试)数据保存到csv文件或数据库中;2- 在R和Python(以及Knime)中创建机器学习模型,并以PMML 4.2格式导出;3- 在我们的基于Java的应用程序中导入/部署PMML,并使用JPMML评估器在生产中执行它。

我确信这是一个机器学习中的常见问题,因为在生产环境中通常更倾向于使用Java而不是Python或R。您能建议在JVM应用程序中创建和执行基于Python/scikit的机器学习模型的更好方法吗?

您对在JVM应用程序中更无缝地实现步骤#2和#3有什么想法,以免影响性能和可用性:

1- 调用一个Java程序,该程序在内部调用Python scikit脚本(在后台)来创建PMML格式的模型,然后使用JPMML评估器。这将让用户感觉他是在一个单一的JVM应用程序中(更好的可用性)。我还不确定使用PMML的局限性和缺点,因为并非所有功能都在jpmml-sklearn中支持。2- 调用一个Java程序,该程序在内部调用Python脚本,在外部Python环境中进行模型创建和执行,并将模型和结果序列化到文件/csv或内存数据库(或缓存,如hazelcast),父Java应用程序将从中获取结果等。我研究后发现不能使用Jython来执行Sci-kit模型。3- 我可以使用Jep(在Java中嵌入Python)来在JVM中嵌入Cpython吗?是否有人尝试过用于sci-kit模型?

或者,我应该探索使用Mahout或weka – 这些基于Java的机器学习库来用于我的JVM应用程序。(我需要支持Windows和非Windows平台)

我也在探索H2Oai,这是一个基于Java的平台。是否有人尝试过它?


回答:

我已经为我的问题找到了一个不错的解决方案。我使用的是H2O.ai,这是一个用Java开发的用于可扩展机器学习的开源平台。它提供Java(Restful API)、Python、R和Scala的API。它拥有最佳的分类、回归、聚类等算法,并且可以无缝地与Apache Hadoop和Spark(sparkling-water)集成,如果有人有Spark集群的话。它还提供了一个基于多层前馈人工神经网络的深度学习算法。我使用的是Java绑定API/Rest API,有时也使用低级的H2o API(用于h2o 3节点集群管理)。

我发现了另一个基于Java的替代方案,称为Smile – 统计机器智能和学习引擎,它提供了回归、分类、聚类、关联规则挖掘、特征选择等功能。是否有人对这些或类似的基于Java的机器学习库有更多反馈?

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注