2012-08-08 129 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)中具有的隨機組件。因此,在訓練階段,將生成不同的模型到相同的訓練數據集,並且當您使用測試進行評估時會得到不同的結果。

相關問題