Java 分类时出现Weka nullPointerException

Java 分类时出现Weka nullPointerException,java,nullpointerexception,machine-learning,weka,linear-regression,Java,Nullpointerexception,Machine Learning,Weka,Linear Regression,我正在使用该模型进行训练,并使用该模型再次进行分类 我正确地得到了第一部分的统计数据,但不是第二部分。 它在再次求值时给出nullPointerException。我尝试过各种操作,比如在代码中创建的一个实例上测试它等等 java.lang.NullPointerException at weka.classifiers.trees.m5.M5Base.classifyInstance(M5Base.java:514) at wekaTest.<init&g

我正在使用该模型进行训练,并使用该模型再次进行分类

我正确地得到了第一部分的统计数据,但不是第二部分。 它在再次求值时给出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)
java.lang.NullPointerException
位于weka.classifiers.trees.m5.M5Base.classifyInstance(M5Base.java:514)
在wekaTest。(wekaTest.java:44)
在wekaTest.main(wekaTest.java:71)
我编写的代码片段是:

wekaTest()
{
    try
    {
        FileReader reader = new FileReader("3.arff"); 
        Instances instances = new Instances(reader); 

        // Make the last attribute be the class 
        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(); }
}
wekaTest()
{
尝试
{
FileReader=新的FileReader(“3.arff”);
实例=新实例(读卡器);
//将最后一个属性设为类
int numAttr=instances.numAttributes();
实例.setClassIndex(numAttr-1);
M5P树=新的M5P();
评估eval=新评估(实例);
评估交叉验证模型(树,实例,10,新随机(1));
System.out.println(eval.toSummaryString(“\nResults\n====\n”,false));
write(“/path/tree.model”,tree);
reader.close();
FileReader reader2=新的FileReader(“3.arff”);
InstancesInstances2=新实例(reader2);
instances2.setClassIndex(instances2.numAttributes()-1);
reader2.close();
标记的实例=新实例(实例2);
分类器cls=(分类器)weka.core.SerializationHelper.read(“/path/tree.model”);
//实例2.deleteAttributeEAT(numAttr-1);

因为(int j=0;j可能是您正在编写的树尚未初始化。

谢谢Aditya。实际上,您是对的!当我在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();
        // Test the model
        //Evaluation eTest = new Evaluation(instances2);
        //eTest.evaluateModel(cls, instances2);
    } 
试试看
{
FileReader reader2=新的FileReader(“3.arff”);
InstancesInstances2=新实例(reader2);
instances2.setClassIndex(instances2.numAttributes()-1);
reader2.close();
int numAttr=instances2.numAttributes();
标记的实例=新实例(实例2);
分类器cls=(分类器)weka.core.SerializationHelper.read(“/home/sumit/Desktop/weka test/tree.model”);
cls.setDebug(true);
实例inst=新实例(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));
仪器设定值(3,-1);
双clsLabelTest=cls.classifyInstance(inst);
系统输出打印LN(clsLabelTest);
//实例2.deleteAttributeEAT(numAttr-1);
对于(int j=0;j