在Java代码中使用WEKA中的神经网络类

时间:2015-02-24 11:45:47

标签: java weka

您好我想在WEKA库中使用神经网络进行简单的培训和测试。

但是,我发现它并不简单,它与库中的NaiveBayes类不同。

任何人都有例子如何在java代码中使用这个类?

2 个答案:

答案 0 :(得分:8)

以下步骤可能会对您有所帮助:

  1. 添加Weka库
  2. http://www.cs.waikato.ac.nz/ml/weka/downloading.html下载Weka。

    从包中找到'Weka.jar'并添加到项目中。

    Java Code Snippet

    1. 构建神经分类器

      public void simpleWekaTrain(String filepath)
      {
      try{
      //Reading training arff or csv file
      FileReader trainreader = new FileReader(filepath);
      Instances train = new Instances(trainreader);
      train.setClassIndex(train.numAttributes() – 1);
      //Instance of NN
      MultilayerPerceptron mlp = new MultilayerPerceptron();
      //Setting Parameters
      mlp.setLearningRate(0.1);
      mlp.setMomentum(0.2);
      mlp.setTrainingTime(2000);
      mlp.setHiddenLayers(“3?);
      mlp.buildClassifier(train);
      }
      catch(Exception ex){
      ex.printStackTrace();
      }
      }
      
    2. 设置参数的另一种方法,

          mlp.setOptions(Utils.splitOptions(“-L 0.1 -M 0.2 -N 2000 -V 0 -S 0 -E 20 -H 3?));
      

      其中,

      L = Learning Rate
      M = Momentum
      N = Training Time or Epochs
      H = Hidden Layers
      etc.
      
      1. 神经分类器培训验证
      2. 评估培训数据,

            Evaluation eval = new Evaluation(train);
            eval.evaluateModel(mlp, train);
            System.out.println(eval.errorRate()); //Printing Training Mean root squared Error
            System.out.println(eval.toSummaryString()); //Summary of Training
        

        应用K-Fold验证

            eval.crossValidateModel(mlp, train, kfolds, new Random(1));
        
        1. 评估/预测未标记数据

          Instances datapredict = new Instances(
          new BufferedReader(
          new FileReader(<Predictdatapath>)));
          datapredict.setClassIndex(datapredict.numAttributes() – 1);
          Instances predicteddata = new Instances(datapredict);
          //Predict Part
          for (int i = 0; i < datapredict.numInstances(); i++) {
          double clsLabel = mlp.classifyInstance(datapredict.instance(i));
          predicteddata.instance(i).setClassValue(clsLabel);
          }
          //Storing again in arff
          BufferedWriter writer = new BufferedWriter(
          new FileWriter(<Output File Path>));
          writer.write(predicteddata.toString());
          writer.newLine();
          writer.flush();
          writer.close();
          

答案 1 :(得分:1)

我在互联网上阅读了一些消息来源并意识到这一点 &#34;如果你想在WEKA库中使用NeuralNetwork分类器,那么这种方法不是使用给定的NeuralNetwork类,而应该是&#34; MultilayerPerceptron&#34;类&#34;

它有点棘手,耗费我的时间。哦WEKA为什么? T__T

希望它对任何正在努力解决这个问题的人都有用。

http://weka.8497.n7.nabble.com/Multi-layer-perception-td2896.html

聚苯乙烯。如果我错了,请纠正!