当前位置: 首页 > 面试题库 >

创建无标签实例时weka.core.UnassignedDatasetException

朱刚捷
2023-03-14
问题内容

我使用一些手动创建的训练数据来训练IBK分类器,如下所示:

ArrayList<Attribute> atts = new ArrayList<Attribute>();
ArrayList<String> classVal = new ArrayList<String>();
classVal.add("C1");
classVal.add("C2");
atts.add(new Attribute("a"));
atts.add(new Attribute("b"));
atts.add(new Attribute("c"));
atts.add(new Attribute("d"));
atts.add(new Attribute("@@class@@", classVal));

Instances dataRaw = new Instances("TestInstances", atts, 0);
dataRaw.setClassIndex(dataRaw.numAttributes() - 1);
double[] instanceValue1 = new double[]{3,0,1,0,0};
dataRaw.add(new DenseInstance(1.0, instanceValue1));

double[] instanceValue2 = new double[]{2,1,1,0,0};
dataRaw.add(new DenseInstance(1.0, instanceValue2));

double[] instanceValue3 = new double[]{2,0,2,0,0};
dataRaw.add(new DenseInstance(1.0, instanceValue3));

double[] instanceValue4 = new double[]{1,3,0,0,1};
dataRaw.add(new DenseInstance(1.0, instanceValue4));

double[] instanceValue5 = new double[]{0,3,1,0,1};
dataRaw.add(new DenseInstance(1.0, instanceValue5));

double[] instanceValue6 = new double[]{0,2,1,1,1};
dataRaw.add(new DenseInstance(1.0, instanceValue6));

然后我建立分类器:

IBk ibk = new IBk();
try {
    ibk.buildClassifier(dataRaw);

} catch (Exception e) {
    e.printStackTrace();
}

我想用未标记的类创建一个新实例并对该实例进行分类,但我没有运气尝试了以下方法。

IBk ibk = new IBk();
try {
    ibk.buildClassifier(dataRaw);
    double[] values = new double[]{3,1,0,0,-1};
    DenseInstance newInst = new DenseInstance(1.0,values);
    double classif = ibk.classifyInstance(newInst);
    System.out.println(classif);
} catch (Exception e) {
    e.printStackTrace();
}

我刚收到以下错误

weka.core.UnassignedDatasetException: DenseInstance doesn't have access to a dataset!
at weka.core.AbstractInstance.classAttribute(AbstractInstance.java:98)
at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:74)
at TextCategorizationTest.instancesWithDoubleValues(TextCategorizationTest.java:136)
at TextCategorizationTest.main(TextCategorizationTest.java:33)

看起来我在创建新实例时做错了什么。如何准确创建一个未标记的实例?

提前致谢


问题答案:

问题在于此行:

double classif = ibk.classifyInstance(newInst);

当您尝试分类时newInst,Weka会引发异常,因为newInst没有与之关联的Instances对象(即,数据集)-因此,它对类属性一无所知。

您应该首先创建一个类似于dataRaw的新Instances对象,向其添加未标记的实例,设置类索引,然后才尝试对其进行分类,例如:

Instances dataUnlabeled = new Instances("TestInstances", atts, 0);
dataUnlabeled.add(newInst);
dataUnlabeled.setClassIndex(dataUnlabeled.numAttributes() - 1);        
double classif = ibk.classifyInstance(dataUnlabeled.firstInstance());


 类似资料:
  • 这个问题很可能和这个问题有关,但是这个问题的提问者似乎没有提供足够的信息来得到有用的回答。 我正在尝试运行带有JDK和JavaFx SDK版本11.0.2的JavaFx应用程序。 这段代码完全按照预期工作,生成一个空窗口: 但是,如果我尝试向添加标签,则会引发异常。 在IntelliJ Idea中,我相信我正确地选择了JDK,并且添加了作为库。 IntelliJ Idea正在使用此命令启动应用程序

  • Git 可以给历史中的某一个修订版本打上标签,通常我们会使用标签来表示一个版本的发布. 操作步骤: VCS —> Git —>Tag —>弹出创建标签配置窗口 配置介绍: Git Root: 项目地址 Current Branch: 显示当前的分支 Tag Name: 标签名 Force:如果相同的tag名已经存在了,是否强制创建. Commit: 通过输入的修订版本号、tag名来打标签,如果空白

  • 问题内容: 这个问题可能是同一个问题的这一个,但现在看来,一个的提问者还没有添加足够的信息来获得一个有用的响应。 我正在尝试使用JDK和JavaFx SDK版本11.0.2运行JavaFx应用程序。 此代码完全按预期工作,从而产生一个空窗口: 但是,如果我尝试向添加标签StackPane,则会引发异常。 它产生的堆栈跟踪如下所示(Main中的第13行是创建Label的位置): 我正在Kubuntu

  • 你好,我是android中MVVM的新手,正在使用livedata。我正在尝试创建viewmodel的一个实例。我觉得问题在于我没有将存储库传递给viewmodel构造函数。我一直无法创建viewmodel的实例。我不知道该怎么做这里是我的viewmodel和它的创建。

  • 我正在尝试将我的应用程序提交到iTunes Connect。我在(测试飞行)之前提交过它,但在某个时候我的证书已经停止工作。我试图用两种不同的方法更新它们,但没有任何成功。 方法1:在XCode中,我得到一个错误,说开发人员配置文件已经有一个分发证书,并建议我重新设置它。在相同的弹出窗口中重置结果,因此这将进入一个循环,但不起作用。 方法2:如果我在developer portal中手动创建证书和

  • 实例(Instance)是运行在云中的虚拟机。 在创建新实例之前,您要提前知晓以下参数: 实例的源可以是镜像,快照,或者包含镜像或快照的块存储设备。 实例的名字。 您实例的型号,这个型号决定了您nova实例的CPU,内存和磁盘空间情况。型号(flavor)是您虚拟机的硬件可用配置。它决定了您能创建的虚拟机的大小。 任意的用户数据文件。用户数据文件时在元数据服务中的一个特殊的键,它保存了一份能给虚拟