使用Weka进行分类时出现nullPointerException

我在使用模型进行训练和再次分类时遇到了问题。

我能够正确地获取第一部分的统计数据,但第二部分却不行。在再次评估时出现了nullPointerException。我尝试了各种操作,比如在代码中创建一个实例进行测试等。

java.lang.NullPointerException        at weka.classifiers.trees.m5.M5Base.classifyInstance(M5Base.java:514)        at wekaTest.<init>(wekaTest.java:44)        at wekaTest.main(wekaTest.java:71)

我编写的代码片段如下:

wekaTest(){    try    {        FileReader reader = new FileReader("3.arff");         Instances instances = new Instances(reader);         // 将最后一个属性设置为类属性         int numAttr = instances.numAttributes();        instances.setClassIndex( numAttr - 1);        M5P tree = new M5P();        Evaluation eval = new Evaluation(instances);        eval.crossValidateModel(tree, instances, 10, new Random(1));        System.out.println(eval.toSummaryString("\nResults\n======\n", false));        weka.core.SerializationHelper.write("/path/tree.model", tree);        reader.close();        FileReader reader2 = new FileReader("3.arff");         Instances instances2 = new Instances(reader2);        instances2.setClassIndex(instances2.numAttributes() - 1);        reader2.close();        Instances labeled = new Instances(instances2);        Classifier cls = (Classifier) weka.core.SerializationHelper.read("/path/tree.model");        //instances2.deleteAttributeAt(numAttr-1);        for(int j=0; j<instances2.numInstances() ;j++)        {                //instance temp = new instance(instances2.instance(j));                //instances2.instance(j).setValue(numAttr-1,-1);                System.out.println("The instance: " + instances2.instance(j));                 double clsLabel = tree.classifyInstance(instances2.instance(j));                labeled.instance(j).setClassValue(clsLabel);            }    }     catch(Exception ex) { ex.printStackTrace(); }}

回答:

谢谢@。实际上,你是对的!当我在10折交叉验证后写入时,变量尚未初始化。

代码片段如下:

  try    {        FileReader reader2 = new FileReader("3.arff");         Instances instances2 = new Instances(reader2);        instances2.setClassIndex(instances2.numAttributes() - 1);        reader2.close();        int numAttr = instances2.numAttributes();        Instances labeled = new Instances(instances2);        Classifier cls = (Classifier) weka.core.SerializationHelper.read("/home/sumit/Desktop/weka test/tree.model");        cls.setDebug(true);        Instance inst = new Instance(4);        inst.setValue(0, instances2.instance(0).value(0));        inst.setValue(1, instances2.instance(0).value(1));        inst.setValue(2, instances2.instance(0).value(2));        inst.setValue(3, -1);        double clsLabelTest = cls.classifyInstance(inst);        System.out.println(clsLabelTest);        //instances2.deleteAttributeAt(numAttr-1);        for(int j=0; j<instances2.numInstances() ;j++)        {                //instance temp = new instance(instances2.instance(j));                instances2.instance(j).setValue(numAttr-1,-1);                //System.out.println("The instance: " + instances2.instance(j));                 double clsLabel = cls.classifyInstance(instances2.instance(j));                labeled.instance(j).setClassValue(clsLabel);        }        BufferedWriter writer = new BufferedWriter(new FileWriter("/home/sumit/Desktop/weka test/labeled.arff"));                   writer.write(labeled.toString());        writer.newLine();        writer.flush();        writer.close();        // 测试模型        //Evaluation eTest = new Evaluation(instances2);        //eTest.evaluateModel(cls, instances2);    } 

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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