2012-08-08 127 views
2

我是Weka的新手。Weka中的UI和API代码给出了不同的结果

我想使用API​​运行WEKA,并发现WEKA GUI的结果与Java代码生成的结果不匹配。

我想通过提供TrainingSet和测试集来运行RandomForest算法。

这里是代码片段:

  DataSource ds = new DataSource(trainingFile); 

      Instances insts = ds.getDataSet(); 

      insts.setClassIndex(insts.numAttributes() - 1); 

      Classifier cl = new RandomForest(); 
      RandomForest rf = (RandomForest)cl; 
     //  rf.setOptions(options); 
     // rf.setNumExecutionSlots(1); 
      rf.setNumFeatures(5); 
      rf.setSeed(1); 
      rf.setNumExecutionSlots(1);     

      Remove remove = new Remove(); 
      int[] attrs = WekaCustomisation.convertIntegers(attrList); 

      remove.setAttributeIndicesArray(attrs); 
      remove.setInvertSelection(true);     

      remove.setInputFormat(insts); 
      insts = weka.filters.Filter.useFilter(insts, remove); 

      insts.setClassIndex(insts.numAttributes() - 1);    


      weka.core.Instances train = new weka.core.Instances(insts, 0, insts.numInstances());   


      cl.buildClassifier(train); 

     weka.core.converters.ConverterUtils.DataSource ds2 = new weka.core.converters.ConverterUtils.DataSource(testFile); 

      weka.core.Instances instsTest = ds2.getDataSet(); 
      remove.setInputFormat(instsTest); 
      instsTest = weka.filters.Filter.useFilter(instsTest, remove); 
      instsTest.setClassIndex(instsTest.numAttributes() - 1);     

      Instances testInstances = new Instances(instsTest); 
      int numCorrect = 0; 

      weka.classifiers.Evaluation eval = new weka.classifiers.Evaluation(train); 
      eval.evaluateModel(cl, testInstances); 
      System.out.println(eval.toSummaryString()); 
      out.write(eval.toSummaryString()); 
      double roc = eval.areaUnderROC(0); 

由WEKA GUI产生的混淆矩阵和该代码不同。我在这里错过了什么。

+0

报告的数字有何不同? – Steve 2012-08-09 10:10:45

+0

混乱矩阵,如果我运行的训练集,它不是这样的分开。但它仍然不完全相同。如果我运行测试设置,它是分开的, 这是代码的结果:a b < - 归类为 104 47 | a = X 120 772 | b = Y For Weka UI a b < - 分类为 104 47 | a = X 41 851 | b = Y – Uno 2012-08-09 17:21:19

回答

2

首先检查在Weka GUI中执行的参数和过滤器是否与您在代码中执行的过程相同。 (查看在GUI中生成的日志)

第二个可能性是随机森林模型在其创建结构(为每个决策树选择数据集中的随机特征,请参阅here)中具有的随机组件。因此,在训练阶段,将生成不同的模型到相同的训练数据集,并且当您使用测试进行评估时会得到不同的结果。

相关问题