如何在基于Java/JVM的应用程序中拟合和评分机器学习模型



您能指导我如何在基于Java/JVM的应用程序(生产中)中创建和执行机器学习模型/统计模型(回归、决策树、K表示聚类、Naive bayes、记分卡/线性/逻辑回归等以及GBM、GLM)吗。

我们有一种ETL类型的基于Java的产品,可以在其中完成机器学习的大部分数据准备步骤,如JDBC、文件、HDFS、无SQL等的数据接收、连接和聚合等(这是功能工程所必需的),现在我们想使用机器学习/统计建模添加分析功能。

现在,我们正在使用JPMML-evaluator对使用R和python(以及Knime)以PMML格式创建的模型进行评分,但它需要三个独立且不相连的步骤:-1-在我们的Java/JVM应用程序中准备数据的第一步,并将采样数据(训练和测试)数据保存在csv文件或DB中,-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或内存DB(或缓存,如hazecast)中,父java应用程序将从中获取结果等。我研究过我不能使用Jython执行Sci-kit模型。3-我可以使用Jep(在Java中嵌入Python)在JVM中嵌入Cpython吗?有人在sci试剂盒模型上试用过吗?

或者,我应该探索在基于JVM的应用程序中使用基于Mahout或weka-java的机器学习库。(我需要同时支持windows和非windows平台)

我也在探索基于java的H2Oai。有人试过吗?

我将IntelliJ IDEA与python插件一起使用。通过这种方式,我在同一个项目中同时拥有java和python代码。数据在数据库中;连接总是可见和可访问的,与编辑器中当前是否有.java或.py文件无关。在配置列表中,可以有Python脚本、Java应用程序、maven目标等。因此,我认为您不必将Python和Java代码混合在一起(通过从Java中调用Python脚本)。这完全没有必要。

我的工作流程是(IntelliJ IDEA中的所有内容):1.准备数据(通常是SQL)2.运行python脚本,该脚本将转换器的管道应用于由某个数据库表构建的panda数据帧,并输出PMML。3.在您的java应用程序中使用scikit学习模型。

如果您有一个带有HDFS后端的ETL,我建议在集群上部署Spark,并使用Spark的MLib机器学习算法。它们支持您上面提到的方法。

你介意提供一些上下文来说明你计划使用的数据的大小(行、列、类型)吗?Java不是我推荐的用于ML的goto-语言,但Scala编译为JVM字节码,并且具有与Java类似的语法(除了具有Java API之外)。

如果你正在制作一个概念验证,那么Java是可以的,但如果你计划使用大数据,它就不能很好地扩展。

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

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

最新更新