如何在Weka中复制数据集的类值?

我有两个Instances数据集:data是原始数据集,stumpyInsts是我试图复制类值的目标数据集。以下是我的代码:

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 instancesInstances 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的类属性。当你执行

stumpyInsts.setClassIndex(stumpyInsts.numAttributes() - 1);

你只是告诉stumpyInsts它的类索引是什么,但没有说明它应该是名义或字符串属性。根据这个回答,你需要做类似以下的事情

FastVector classAttr = new FastVector();classAttr .addElement(new Attribute("class", (FastVector) null));

来创建一个具有字符串或名义值的(类)属性。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注