【问题标题】:How to access source code of a WEKA model file如何访问 WEKA 模型文件的源代码
【发布时间】:2014-04-06 22:27:08
【问题描述】:

我一直在训练 WEKA 模型文件,我想看看这些文件的内容。

我尝试将它们的文件扩展名更改为.class.java,但结果不可读。

Google 搜索让我想到了“content of a classifier 'model' file (weka-3-7-1)”这个问题,但没有直接答案。

我想查看模型文件的规则和权重的实际代码,而不仅仅是从可视化或查看生成的缓冲区代码。

这可能吗?


附加

之所以想从WEKA看一个.model文件的源代码是因为:

我需要证明我制作的模型文件是我从数据集生成的实际文件

我知道结果缓冲区在决策树分类器中提供生成的树,但其他的只显示权重和节点。

您能否就如何处理这个问题给我一些替代建议?

【问题讨论】:

    标签: java machine-learning weka modeling prediction


    【解决方案1】:

    不,目前 Weka 无法做到这一点。保存模型时,实际上是在序列化由特定算法实现的对象。此类可以包含学习算法使用的任意状态变量。因此,它只能被反序列化回同一类的实例。

    理论上,Weka 可以提供一个接口,允许学习算法将模型输出为纯 Java 代码,而不是二进制序列化实例,但现在还没有。我目前在工作中使用专有的 ML 框架,该框架实际上具有这些接口和许多算法,如决策树和回归,将模型输出为 C++ 代码,您可以直接将其添加到项目中,从而消除运行时依赖性。

    更多关于Weka模型序列化:http://weka.wikispaces.com/Serialization

    如果您只对可视化感兴趣,请参阅:http://weka.wikispaces.com/Explorer+tree+visualization+plugins

    【讨论】:

    • 谢谢,我其实对模型的 Java 代码版本更感兴趣,以便向我的同行证明模型确实存在。
    • 能详细说明一下序列化路径吗?我已经通过序列化成功使用了模型,但我认为这对于不熟悉 WEKA 的人来说还不够。
    【解决方案2】:

    你想做以下事情。

    我需要证明我制作的模型文件是我从数据集生成的实际文件

    我建议为您的分类器修改 weka 源代码并执行以下操作。

    1. 添加 DataSourceHashKey 字段
    2. 每当您生成分类器时,请获取数据集(arff 文件)的 cryptographic hash 并将此值设置为 DataSourceHashKey。
    3. 当您反序列化模型类时,您可以使用此 DataSourceHashKey。让我们称之为 ModelDataSourceHashKey
    4. 在运行分类器之前,从数据源(arff 文件)生成新的 DataSourceHashKey,我们将其命名为 CurrentDataSourceHashKey。
    5. 由于 Hash 函数的属性,您的 ModelDataSourceHashKey 和 CurrentDataSourceHashKey 必须相等。如果不是,那么您的新数据源与此模型生成的数据源不同,即使这种差异只是一个空格。

    我还想补充以下几点。以前的答案大部分是正确的,但它遗漏了一些要点。

    weka的一些分类器可以产生java代码见Generating source code from WEKA classes。以下摘自该链接。

    Some of the schemes in Weka can generate Java source code that represents their current internal state. At the moment these are classifiers (book and developer version) and filters (snapshot or >3.5.6). 
    

    翻译如果分类器或过滤器实现Sourcable (Source able?)接口,你可以得到你的分类器/过滤器的java代码版本,见下文。

    weka.classifiers 
    Interface Sourcable
    
    All Known Implementing Classes:
    AdaBoostM1, DecisionStump, J48, LogitBoost, OneR, REPTree, ZeroR
    

    对于所有其他分类器,模型文件为java serialized files。请注意,序列化是 java 概念 而不是 weka 概念,因此所有限制都属于 java。你问的可以按照下面link来执行。

    The serialized form contains sufficient information  
    such that it can be restored to an identical clone of  the original JAVA object 
    

    但我认为为您的分类器实现 Sourcable 接口将比遵循这条路径更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      相关资源
      最近更新 更多