将 Mahout 模型输出导出为 Weka 输入

Posted

技术标签:

【中文标题】将 Mahout 模型输出导出为 Weka 输入【英文标题】:Exporting Mahout model output as Weka input 【发布时间】:2012-05-26 20:28:44 【问题描述】:

我想使用 Mahout 决策树训练过程的输出模型作为基于 Weka 的分类器的输入模型。

由于基于数百万训练记录的复杂决策树的训练对于单节点 Weka 分类器来说几乎是不切实际的,我想使用 Mahout 来构建模型,例如使用 Random Forest Partial Implementation。

虽然上述算法在训练时可能会出现问题,但在单台机器上使用 Weka 进行预测相当简单。

在 Mahout wiki site 上声明导入的数据格式包括 Weka ARFF 格式,但不用于导出。

是否可以使用 Mahout 中的一些现有实现来训练模型,这些模型将用于基于 Weka 的简单系统的生产中?

【问题讨论】:

【参考方案1】:

我认为不可能按照您的要求进行操作:.arff 是一种数据格式,导入/导出菜单中的所有其他选项也是如此。 Weka 可以保存/加载的分类器,其实就是 Weka 的 java Classifier 对象,使用 Java 的 Serializable 接口写入文件。它们不是可移植的树,因为它们是比创建它们的 JVM 更持久的 Java 对象。因此,为了做你想做的事,Mahout 或 Weka 都必须能够生成/读取彼此的代码,而我找不到任何文档。

我的经验是,拥有数百万条训练记录(每个包含约 45 个数字特征/列),使用默认选项的 Weka 随机森林实现非常快(在单个 2.26GHz 内核上运行在几秒钟内),因此它可能没有必要打扰 Mahout。不过,您的数据集可能会有不同的结果。

【讨论】:

关于 Weka 中的随机森林,您可能是对的,但它的内存需求并非微不足道,而且与其他算法相比更糟。我真的很喜欢 Mahout 的轻松训练,但不喜欢缓慢的预测时间。 是的。你见过这个:link 吗?您可以在 weka 中使用它,链接中的碎片表明这种 RF 的实现在 CPU 时间和内存上更容易。我自己没有测试过,也找不到任何东西来验证它的准确性,但是你可以很容易地用这个和默认射频实现中的一些数据做一个小测试,看看你的结果是否具有可比性。 不错的链接,但它只是为了证明 Weka 在 Java 和单机上的问题点。只要您拥有相对较小的数据,它就可以工作。 Mahout 的承诺是允许解决更大规模的问题。我们如何才能将这些马和象结合起来,共同构建一个现实生活中的大规模应用程序。 @Guy,此链接确实有助于弥合您的差距:它将利用多个内核并减少内存和 CPU 使用。但是,我认为 Mahout 不可能生产出 Weka 能够理解的模型。 Weka 使用的模型本质上是它自己的源代码 (serialized objects) 的实例。当您尝试使用这个或 RF 的原始 weka 实现时,您会遇到问题吗?我读过,Mahout 包括一些算法的非 hadoop 实现。也许这会给你想要的分类,同时仍然使用 hadoop 来构建分类器?

以上是关于将 Mahout 模型输出导出为 Weka 输入的主要内容,如果未能解决你的问题,请参考以下文章

将 mahout 随机森林分类输出转换为可读

weka数据挖掘

无需评估即可创建 Weka 分类器模型

Mahout - 简单的分类问题

使用 Apache Mahout 对数据进行分类

将 Weka DecisionTree 从 Java API 导出到 XML 或 JSON