【问题标题】:Weka printing sparse arff fileWeka打印稀疏arff文件
【发布时间】:2012-04-08 01:25:36
【问题描述】:

我正在尝试 arff 文件的稀疏表示,如 here 所示。在我的程序中,我可以打印类标签“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。有人可以告诉我为什么会这样吗?

【问题讨论】:

    标签: java weka sparse-matrix arff


    【解决方案1】:

    这是一个非常流行的问题。根据定义,Sparse 格式不存储 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");
    

    如果您需要任何进一步的帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 1970-01-01
      • 2011-08-26
      • 2015-04-03
      • 2014-05-31
      • 2013-10-22
      • 2020-12-19
      • 2020-06-04
      • 2017-06-16
      相关资源
      最近更新 更多