如何访问WEKA模型文件的源代码

时间:2014-03-05 03:36:31

标签: java machine-learning weka modeling prediction

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

我尝试将其文件扩展名更改为.class.java,但结果无法读取。

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

我希望看到模型文件的规则和权重的实际代码,不仅来自可视化或查看生成的缓冲区代码。

这可能吗?


其他

我想从WEKA看到.model文件的源代码的原因是:

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

生成的实际文件

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

您能否就如何处理此问题向我提出其他建议?

2 个答案:

答案 0 :(得分:3)

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

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

有关Weka模型序列化的更多信息:http://weka.wikispaces.com/Serialization

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

答案 1 :(得分:2)

您想要关注。

  

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

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

  1. 添加DataSourceHashKey字段
  2. 每当生成分类器时,请取一个cryptographic hash数据集(arff文件)并将此值设置为DataSourceHashKey。
  3. 反序列化模型类时,可以使用此DataSourceHashKey。让我们称之为ModelDataSourceHashKey
  4. 在运行分类器之前,从数据源(arff文件)生成新的DataSourceHashKey,我们称之为CurrentDataSourceHashKey。
  5. 由于Hash函数的属性,ModelDataSourceHashKey和CurrentDataSourceHashKey必须为EQUAL。如果不是,那么您的新数据源与此模型生成的数据源不同,即使此差异仅为空格。
  6. 我想补充以下几点。以前的答案大多是正确的,但它错过了一些观点。

    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接口比遵循该路径更容易。