2013-12-08 85 views
2

我使用weka java API來進行網格搜索,以便找到MultilayerPerceptron的最佳參數。然而,我的java代碼給出的RMSE(我在這裏做迴歸)與weka GUI給出的不同。下面是代碼:weka GUI和Java代碼給出不同的結果

public class ANN { 
/** 
* @param args 
*/ 
public static void main(String[] args) throws Exception{ 
    DataSource source = new DataSource("/home/yongfeng/ML/Project/choose_openning_price/holdout.arff"); 
    Instances raw = source.getDataSet(); 
    int trainSize = (int) Math.round(raw.numInstances()*0.666666666); 
    int testSize = raw.numInstances() - trainSize; 
    Instances train = new Instances(raw, 0, trainSize); 
    Instances test = new Instances(raw, trainSize, testSize); 
    train.setClassIndex(0); 
    test.setClassIndex(0); 
    final int sizeOfSearch = 15; 
    double[][] resultsArray = new double[sizeOfSearch][sizeOfSearch]; 

    for (int i=0;i < sizeOfSearch;i++){ 
     for (int j=0;j < sizeOfSearch;j++){ 
      double m = i; 
      double k = j; 
      double learningRate = (m+1)/1000; 
      double momentum = (k+1)/100; 
      MultilayerPerceptron ann = new MultilayerPerceptron(); 
      String options = String.format("-L %f -M %f -N 500 -V 0 -S 0 -E 20 -H a", learningRate, momentum); 
      ann.setOptions(weka.core.Utils.splitOptions(options)); 
      ann.buildClassifier(train); 
      Evaluation eval = new Evaluation(train); 
      eval.evaluateModel(ann, test); 
      double error = eval.rootMeanSquaredError(); 
      System.out.println("learningRate: " + learningRate + "\tMomentum: " + momentum + "\tError: " + error); 
      printOptions(ann.getOptions()); 
      resultsArray[i][j] = error; 
      ann = null; 
      eval = null; 
      } 
     } 
      } 
} 

我即使在每次迭代中打印出的選項和它們原來是相同的那些WEKA GUI。要預測的屬性是第一個,所以setClassIndex(0);並使用列車測試集進行評估。任何人都可以幫忙嗎?非常感謝!

回答

0

在您的java代碼的weka安裝文件夾中使用weka.jar。

相關問題