我在尝试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。有人能告诉我为什么会这样吗?
最佳答案
这是一个非常普遍的问题。根据定义,稀疏格式不存储0个值。
韦卡清楚地说:
警告:从中保存SparseInstance对象时出现已知问题
具有字符串属性的数据集。在WEKA中,字符串和标称数据
值存储为数字;这些数字用作
可能的属性值数组(这非常有效)。然而,
第一个字符串值被指定为索引0:这意味着,
在内部,此值存储为0。当火花装置
没有输出内部值为0的已写入字符串实例,因此
它们的字符串值丢失(当再次读取arff文件时,
默认值0是不同字符串值的索引,因此
属性值似乎发生更改)。为了解决这个问题,添加
索引0处的伪字符串值,无论何时声明
可能在SparseInstance对象中使用的字符串属性
并保存为稀疏的arff文件。
首先必须放置一个dummy属性。只需将代码修改为:
attVals = new FastVector();
attVals.addElement("dummy");
attVals.addElement("A");
attVals.addElement("B");
如果你需要进一步的帮助,请告诉我。