Weka打印稀疏的arff文件

时间:2012-03-23 13:24:32

标签: java weka sparse-matrix arff

我正在尝试显示here所示的arff文件的稀疏表示。在我的程序中,我能够打印类标签“B”但由于某种原因它不打印“A”。

    attVals = new FastVector();
    attVals.addElement("A");
    attVals.addElement("B");
    atts.addElement(new Attribute("class", attVals));

    vals[index] = attVals.indexOf("A");

该程序的输出类似于 -

 {0 6,2 8}      ---  I should get {0 6,2 8,3 A}

但是当我做的时候

vals[index] = attVals.indexOf("B");

我得到了正确的输出 -

 {0 6,2 8,3 B}

出于某种原因,它没有采用指数0.有人可以告诉我为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

这是一个非常受欢迎的问题。根据定义,稀疏格式不存储0值。

Weka ARFF format page清楚地说:

  

警告:从中保存SparseInstance对象存在已知问题   具有字符串属性的数据集。在Weka中,字符串和名义数据   值存储为数字;这些数字作为一个索引   可能的属性值数组(这非常有效)。然而,   第一个字符串值被赋予索引0:这意味着,   在内部,此值存储为0.当SparseInstance为时   写入时,不输出内部值为0的字符串实例   他们的字符串值丢失(当再次读取arff文件时,   默认值0是不同字符串值的索引,所以   属性值似乎改变了)。要解决此问题,请添加一个   索引0处的虚拟字符串值,无论何时声明,都不会使用   可能在SparseInstance对象中使用的字符串属性   并保存为稀疏ARFF文件。

你必须首先放置一个虚拟属性。只需将您的代码修改为:

attVals = new FastVector();
attVals.addElement("dummy");
attVals.addElement("A");
attVals.addElement("B");

如果您需要任何进一步的帮助,请与我们联系。