使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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