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

Faj*_*oto 5 java weka

嗨,我想在WEKA库中使用神经网络进行简单的培训和测试.

但是,我发现它并不是微不足道的,它与库中的NaiveBayes类不同.

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

Hit*_*ari 8

以下步骤可能会帮助您:

  1. 添加Weka库

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();
    }
    }
    
    Run Code Online (Sandbox Code Playgroud)

另一种设置参数的方法,

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

哪里,

L = Learning Rate
M = Momentum
N = Training Time or Epochs
H = Hidden Layers
etc.
Run Code Online (Sandbox Code Playgroud)
  1. 神经分类器训练验证

为了评估培训数据,

    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
Run Code Online (Sandbox Code Playgroud)

要应用K-Fold验证

    eval.crossValidateModel(mlp, train, kfolds, new Random(1));
Run Code Online (Sandbox Code Playgroud)
  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();
    
    Run Code Online (Sandbox Code Playgroud)