无法使用字符串和数字属性WEKA创建实例

时间:2014-04-20 11:24:30

标签: java machine-learning nlp artificial-intelligence weka

我在weka中为我的研究编写了一个过滤器。当我将我的过滤器应用于我的数据集时(让我们从现在开始在 oldData 上调用它),它将应用于使用Range指定的其中一个属性。在实例中,属性被替换为Double类型的值,并且相应地调整标题。

但是,现在我希望复制未应用过滤器的 oldData 中的属性(因此属性不在Range中)。此属性是String属性。使用我编写的代码,我进入实例*WEKA*DUMMY*STRING*FOR*STRING*ATTRIBUTES*,而它必须是 oldData 中的原始值。

这是一个简单的例子(它在 oldData 中的外观):

@attribute attr_text string
@attribute attr_tags string

@data
'some text','some tags'
'some text','some tags'

我将过滤器应用于第一个属性(即attr_text)并获取此信息:

@attribute attr_tags string
@attribute attr1 numeric
@attribute attr2 numeric
...

@data
'some text',0.0136,0.0024, ...
'some text',0.0041,0.0387, ...

所以这就是我想要实现的目标。但是,每个实例的第一个属性是*WEKA*DUMMY*STRING*FOR*STRING*ATTRIBUTES*

以下是执行所有操作的代码:

// STEP 4 - add instances
DenseInstance denseInstance = null;
for (int i = 0; i < inst.numInstances(); i++) {
   double[] newValues = new double[getK() + 1];
   for (int t = 1; t <= getK(); t++) {
      newValues[t] = theta[i][t-1];
   }
   denseInstance = new DenseInstance(1.0, newValues);
   // Adding the following two lines solved my problem!
   denseInstance.setDataset(oldData);
   dennseInstance.setValue(0, inst.Instance(i).stringValue(1); // 1 is the attribute index
   //-----
   push(denseInstance);
}

正如您将看到的,数组newValues开始在idx 1处插入,因为我希望在索引0处插入字符串。

EDIT1 所以问题是,如何将每个实例中的attr_tags属性从 oldData 复制到新实例?

EDIT2 我基于this帖子,但似乎没有用,它打印了DUMMY文本。

EDIT3 我自己解决了这个问题。我在我的代码片段中添加了两行代码来解决问题。

0 个答案:

没有答案