weka.core.UnassignedDatasetException when creating an unlabeled instance

前端 未结 3 355
迷失自我
迷失自我 2020-12-31 08:03

I trained an IBK classifier with some training data that I created manually as following:

ArrayList atts = new ArrayList();         


        
相关标签:
3条回答
  • 2020-12-31 08:41

    See pages 203 - 204 of the WEKA documentation. That helped me a lot! (The Weka Manual is a pdf file that is located in your weka installation folder. Just open the doucmentation.html and it will point you to the pdf manual.)

    Copy-pasting some snippets of the code listings of Chapter 17 (Using the WEKA API / Creating datasets in memory) should help you solve the task.

    0 讨论(0)
  • 2020-12-31 08:57

    The problem is with this line:

    double classif = ibk.classifyInstance(newInst);
    

    When you try to classify newInst, Weka throws an exception because newInst has no Instances object (i.e., dataset) associated with it - thus it does not know anything about its class attribute.

    You should first create a new Instances object similar to the dataRaw, add your unlabeled instance to it, set class index, and only then try classifying it, e.g.:

    Instances dataUnlabeled = new Instances("TestInstances", atts, 0);
    dataUnlabeled.add(newInst);
    dataUnlabeled.setClassIndex(dataUnlabeled.numAttributes() - 1);        
    double classif = ibk.classifyInstance(dataUnlabeled.firstInstance());
    
    0 讨论(0)
  • 2020-12-31 09:02

    You will see this error, when you classify a new instance which is not associated with a dataset. You have to associate every new instance you create to an Instances object using setDataset.

    //Make a place holder Instances
    //If you already have access to one, you can skip this step
    Instances dataset = new Instances("testdata", attr, 1);
    dataset.setClassIndex(classIdx);
    
    DenseInstance newInst = new DenseInstance(1.0,values);
    
    //To associate your instance with Instances object, in this case dataset
    newInst.setDataset(dataset); 
    

    After this you can classify newly created instance.

    double classif = ibk.classifyInstance(newInst);
    

    http://www.cs.tufts.edu/~ablumer/weka/doc/weka.core.Instance.html

    Detailed Implementation Link

    0 讨论(0)
提交回复
热议问题