如何在 weka 中复制数据集的 class 值?
How do you copy a dataset's class values in weka?
我有两个 Instances
数据集:data
是原始数据集,stumpyInsts
是我要将 class 值复制到的数据集。这是我的代码:
FastVector attributes = new FastVector();
ArrayList<Instance> instances = new ArrayList<Instance>();
for(int i = 0; i <= 100; i++){
Attribute newAttr = new Attribute("Stump" + i, i);
attributes.addElement(newAttr);
}
//make new instances
Instances stumpyInsts = new Instances("Stumps", attributes, data.numInstances());
stumpyInsts.setClassIndex(stumpyInsts.numAttributes() - 1);
Enumeration instEnum = stumpyInsts.enumerateInstances();
Enumeration somethingElseLOL = data.enumerateInstances();
while (instEnum.hasMoreElements()) {
Instance instance = (Instance) instEnum.nextElement();
Instance other = (Instance) somethingElseLOL.nextElement();
String s = other.stringValue(other.classIndex());
instance.setValue(instance.classIndex(), s);
}
当我尝试设置值时,我不断收到此消息:
`java.lang.IllegalArgumentException: Attribute neither nominal nor string!
at weka.core.Instance.setValue(Instance.java:687)`
有谁知道为什么会这样?如果我在将实例添加到数据集之前尝试 setClassValue
,或者如果我使用这些值创建新字符串,我也会收到错误消息。对我来说这并没有什么意义,因为 stringValue
显然返回了一个字符串。
错误
java.lang.IllegalArgumentException: Attribute neither nominal nor string!
at weka.core.Instance.setValue(Instance.java:687)
不是指stringValue
,而是指instance
的class属性。当你这样做时
stumpyInsts.setClassIndex(stumpyInsts.numAttributes() - 1);
您告诉 stumpyInsts
它的 class 是什么索引,但不是那个应该是标称或字符串属性。根据 this answer 你必须做类似
FastVector classAttr = new FastVector();
classAttr .addElement(new Attribute("class", (FastVector) null));
创建具有字符串或标称值的 (class) 属性。
我有两个 Instances
数据集:data
是原始数据集,stumpyInsts
是我要将 class 值复制到的数据集。这是我的代码:
FastVector attributes = new FastVector();
ArrayList<Instance> instances = new ArrayList<Instance>();
for(int i = 0; i <= 100; i++){
Attribute newAttr = new Attribute("Stump" + i, i);
attributes.addElement(newAttr);
}
//make new instances
Instances stumpyInsts = new Instances("Stumps", attributes, data.numInstances());
stumpyInsts.setClassIndex(stumpyInsts.numAttributes() - 1);
Enumeration instEnum = stumpyInsts.enumerateInstances();
Enumeration somethingElseLOL = data.enumerateInstances();
while (instEnum.hasMoreElements()) {
Instance instance = (Instance) instEnum.nextElement();
Instance other = (Instance) somethingElseLOL.nextElement();
String s = other.stringValue(other.classIndex());
instance.setValue(instance.classIndex(), s);
}
当我尝试设置值时,我不断收到此消息:
`java.lang.IllegalArgumentException: Attribute neither nominal nor string!
at weka.core.Instance.setValue(Instance.java:687)`
有谁知道为什么会这样?如果我在将实例添加到数据集之前尝试 setClassValue
,或者如果我使用这些值创建新字符串,我也会收到错误消息。对我来说这并没有什么意义,因为 stringValue
显然返回了一个字符串。
错误
java.lang.IllegalArgumentException: Attribute neither nominal nor string!
at weka.core.Instance.setValue(Instance.java:687)
不是指stringValue
,而是指instance
的class属性。当你这样做时
stumpyInsts.setClassIndex(stumpyInsts.numAttributes() - 1);
您告诉 stumpyInsts
它的 class 是什么索引,但不是那个应该是标称或字符串属性。根据 this answer 你必须做类似
FastVector classAttr = new FastVector();
classAttr .addElement(new Attribute("class", (FastVector) null));
创建具有字符串或标称值的 (class) 属性。