1

我正在为 Weka API 使用某种 hello world 示例。我在从数据库创建实例时发现了一个问题。 情况: 我有一个包含两个表 trainset(id, value, classValue) 和 testset(id, value, classValue) 的数据库。

每个表包含 10 行一些示例数据,应该 100% 正确分类。trainset 的第一行是 (1, 5, "low"),testset 的第一行是 (1, 15, "high")。

当 Weka 创建Instances对象时,它似乎也自动创建了一个类 Attribute 对象。

train = query.retrieveInstances();
train.setClassIndex(train.numAttributes() - 1);

第一组的类属性是

@attribute classValue {low,high}

...第二个

@attribute classValue {high,low}

当我进行评估时,它显示

Incorrectly Classified Instances        10              100      %

这是由混淆的 classValue 属性引起的。

有什么办法可以预先告诉类属性应该是什么样子,或者我可以以某种方式更改映射?我已经试过了

FastVector fvClassVal = new FastVector(2);
fvClassVal.addElement("low");
fvClassVal.addElement("high");
Attribute classAttribute = new Attribute("classValue", fvClassVal);
test.setClass(classAttribute);

但这似乎不起作用,它仍然想知道 classIndex 并覆盖以前的属性。

4

2 回答 2

0

谢谢你的提示。现在似乎真的没有优雅的解决方案。如果您可以假设您的测试数据将包含训练数据具有的每个类,您可以修改查询:

SELECT value, classValue FROM trainset ORDER BY classValue

这是一个代码修改较少但性能下降的解决方案:/

于 2013-03-05T08:47:54.193 回答
0

我以前问过并回答过同样的问题 。您需要创建正确的 Arff 标头并在查询数据库之前使用它。

于 2013-02-07T15:49:57.320 回答