【问题标题】:Using Python Pickle Object In Java在 Java 中使用 Python Pickle 对象
【发布时间】:2020-12-07 22:46:36
【问题描述】:

我在Python 中有RandomForestClassifierpickle object。我想在 Java 中使用这个对象来进行预测。那可能吗?如我所见,Python pickle object 可以在Java 中以that 的方式使用,但我不确定它是否适用于机器学习模型。

编辑:我发现 Pickle 只是一个“序列化对象”,在 Java 中使用它是没有意义的。我不得不使用来自 DronovIlya 的 Java 分类器实现,而不是在 Java 中使用 Python 对象。

【问题讨论】:

  • 我怀疑 Jython 是否可以使用 sklearn 模型对象,这将取决于 numpyscipy 之类的东西。你的 Java 进程可以只使用 Python 进程吗?
  • 你的 Java 进程只使用 Python 进程是什么意思,你的意思是在 Java 代码中使用 Python 脚本(或进程)吗?跨度>

标签: java python machine-learning pickle jython


【解决方案1】:

简答:不。

长答案:

根据python文档:

pickle 模块实现了用于序列化和反序列化 Python 对象结构的二进制协议。 “Pickling”是将 Python 对象层次结构转换为字节流的过程,而“unpickling”是逆操作,即字节流(来自二进制文件或类似字节的对象)被转换回对象层次结构。酸洗(和解酸)也称为“序列化”、“编组”、1 或“扁平化”;但是,为避免混淆,此处使用的术语是“酸洗”和“解酸”

这意味着给定的字节流仅在 Python 中仅在语法上有效,除非您想编写对象转译器。

您以错误的方式解决问题。 ML 模型只是您优化的一组系数/参数,以获得目标变量的近似值。您应该能够采用该组系数/参数并在任何语言中使用它。

【讨论】:

  • 我也用 Java 实现了一个 ML 模型,但我正在考虑在 Apache NiFi 或 Apache Spark 系统等系统中从 Python 传递模型,以便 Java 程序可以使用自 Scikit 以来的 Python 模型-learn模型比普通模型有更多的参数。最后,我还是无法使用 Scikit-learn。
  • @büşraçelik Pickle 不是模特。它是序列化的 Python 类。您的模型实际上由算法在从训练数据中学习时生成的系数表示。例如:对于以y = mx + c 表示的简单回归模型,模型不是LinearRegression 类的对象,而是m 和c 本身的值。
  • @büşraçelik 对于随机森林实现,您的模型是表示您的节点和赋予该节点的基尼值的树结构。
  • 你能分享你使用的方法吗?我的团队也面临着类似的问题
【解决方案2】:

【讨论】:

  • Cpickle 可用于类中的对象进行序列化,但如何导入 sci-kit learn 库属性?您能否给出假设,假设您使用参数构建了一个模型并训练了该模型,但是您如何使用该模型在 Java 中进行测试?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多