0

我咨询了几个参考资料,以了解如何将经过训练的 Weka 模型输出到 Java 源代码中,以便我可以将我在实际代码中训练的分类器用于我一直在开发的研究应用程序。

当我在玩 Weka 3.7 时,我注意到虽然它在使用 J48 决策树等更简单的分类(这次在我的情况下监督)方法时确实将 Java 代码输出到其主文本缓冲区,但它删除了该选项(相反,它无效它通过删除复选标记和淡化文本的能力)来输出 RandomTree 和 RandomForest 的 Java 代码(它们在我的情况下给我最好的性能)。注意:我单击“更多选项”按钮并检查“输出源代码:”。

Weka 是否不允许您将 RandomTree 或 RandomForest 输出为 Java 代码?如果是这样,为什么?或者如果它确实并且只是不将它放在输出缓冲区中(因为 RF 是多个决策树,我想它不想浪费缓冲区空间),那么如何去挖掘文件系统中 Weka 输出 java 的位置默认代码?

有什么技巧可以让 Weka 将我训练有素的 RandomForest 作为 Java 代码提供给我吗?或者当涉及到 RF 和 RandomTree 时,输出 *.model 文件的序列化是我唯一的希望吗?

提前感谢那些提供帮助的人。

注意:(作为下面提供的答案的附录)如果您遇到类似的情况(要求您在代码中使用经过训练的分类器/ML 模型),我建议您按照响应中提供的答案中发布的链接进行操作我的问题。例如,如果您并不特别需要 RandomForest 的 Java 代码,那么反序列化模型的效果非常好,并且适合 Java 应用程序代码,可以作为经过训练的模型/强化算法来完成其任务,以预测未来未标记的实例。

4

2 回答 2

1

RandomTree 和 RandomForest 不能作为 Java 代码输出。 我不确定原因,但他们没有实现“Sourceable”接口。

这解释了一些关于将分类器输出为 Java 代码: 链接 1

这显示了哪些分类器可以作为 Java 代码输出:链接 2

不幸的是,我认为最简单的方法是序列化,尽管您可以尝试自己为其他分类器实现“Sourceable”。

另一个但可能不方便的解决方案是每次使用 Weka 时都使用它来构建分类器。您不需要加载“.model”文件,但您需要加载训练数据并重新学习模型。这是在您自己的 java 代码中构建分类器的入门指南http://weka.wikispaces.com/Use+WEKA+in+your+Java+code

于 2013-11-11T23:38:31.623 回答
0

通过将 RandomForest 分类器的 WEKA 的 -printTrees 选项的输出转换为 Java 源代码,为我自己解决了这个问题。

http://pielot.org/2015/06/exporting-randomforest-models-to-java-source-code/

由于我在 Android 中使用分类器,所有现有选项都有缺点:

  • 发布带有序列化模型的 Android 应用程序并不能可靠地跨设备运行
  • 在手机上计算模型占用了太多资源

最终代码将仅包含三个类:具有生成模型的类 + 两个用于进行分类的类。

于 2015-07-01T11:39:35.723 回答