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

Using Neural Network Class in WEKA in Java code

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

但是,我发现它不是微不足道的,它与库中的 NaiveBayes class 不同。

有人知道如何在 java 代码中使用这个 class 吗?

我在互联网上阅读了一些资料,然后才意识到 "if you want to use NeuralNetwork classifier in WEKA library, so the approach is NOT using the given NeuralNetwork class, but it should be "多层感知器"class"

有点棘手,耗费了我的时间。

我希望它对任何正在为此苦苦挣扎的人有用。

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

Ps。如有错误请指正!

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

  1. 添加 Weka 库

http://www.cs.waikato.ac.nz/ml/weka/downloading.html 下载 Weka。

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

Java 代码片段

  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();
    }
    }
    

另一种设置参数的方式,

    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. 神经分类器训练验证

为了评估训练数据,

    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 折验证

    eval.crossValidateModel(mlp, train, kfolds, new Random(1));
  1. Evaluating/Predicting 未标记数据

    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();