Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在基于Java/JVM的应用程序中拟合和评分机器学习模型_Java_Machine Learning_Scikit Learn_H2o_Pmml - Fatal编程技术网

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

如何在基于Java/JVM的应用程序中拟合和评分机器学习模型,java,machine-learning,scikit-learn,h2o,pmml,Java,Machine Learning,Scikit Learn,H2o,Pmml,请您指导我如何在基于Java/JVM的应用程序(生产中)中创建和执行机器学习模型/统计模型(回归、决策树、K均值聚类、朴素贝叶斯、记分卡/线性/逻辑回归等以及GBM、GLM) 我们有一种基于Java的ETL产品,可以为机器学习执行大部分数据准备步骤,如从JDBC、文件、HDF、无SQL等接收数据,连接和聚合等(这是功能工程所必需的),现在我们希望使用机器学习/统计建模添加分析功能 现在,我们正在使用JPMML-evaluator对使用R和python(以及Knime)以PMML格式创建的模型进行

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

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

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

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

您认为如何在不影响性能和可用性的情况下,在基于JVM的应用程序中更无缝地实现步骤2和步骤3:-

1-调用一个java程序,该程序在内部调用(引擎盖下),然后使用JPMML evaluator。它将向用户假装他在一个基于JVM的应用程序中(更好的可用性)。我不确定使用PMML的局限性和缺点是什么,因为jpmml sklearn并不支持所有功能。 2-调用一个java程序,该程序在内部调用python脚本,并在外部python环境中创建和执行模型,并将模型和结果序列化为文件/csv或内存数据库(或缓存,如hazelcast),父java应用程序将从中获取结果等。。我研究过我不能使用Jython来执行Sci工具包模型。 3-我可以使用Jep(Java中嵌入Python)在JVM中嵌入Cpython吗?有人试过sci套件模型吗

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


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

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

您是否介意提供一些关于您计划使用的数据大小(行、列、类型)的上下文?Java不是我推荐的用于ML的goto语言,但Scala编译成JVM字节码,并且具有与Java类似的语法(除了有JavaAPI)


如果您正在进行概念验证,那么Java是不错的,但是如果您计划使用大数据,它的扩展性就不太好。

我已经找到了一个解决问题的不错的解决方案。我使用Java开发的开放源码可伸缩机器学习。它提供了Java(RESTfulAPI)、Python、R和Scala的API。它拥有一流的分类、回归、聚类等算法,如果有人拥有Spark cluster,它还可以与Apache Hadoop和Spark(Sparking water)无缝集成。它还提供了一种基于多层前馈人工神经网络的深度学习算法。我正在使用Java绑定API/RESTAPI,有时使用低级H2OAPI(用于H2O3节点集群管理)


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

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

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

数据不够大,无法安装Spark/Hadoop。它通常在50到1GB之间变化(有几百行)。现在,我正在使用[H2o,ai](),因为它是基于java的,所以它与我基于java的产品配合得很好。但是它有有限的最大似然算法(没有支持向量机等)。最后,我想从基于java的应用程序中调用python(或R),以利用丰富的ML算法集。我的意思是-数据大小介于50 MB到1 GB(最大值)之间。鉴于这些数据大小,在python或R中实现ML应该是微不足道的。我建议不要尝试从java调用R或python,将数据序列化为可摄取格式(例如CSV),并进行系统调用(批处理/bash)以在Python或R中运行处理。这与您支持跨平台编译的需要有关。此外,当您在不同的框架之间穿梭数据时,我建议您花一些时间为您将要创建的模型开发一组模式