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

问题描述 投票:5回答:2

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

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

有人知道如何在Java代码中使用此类吗?

java weka
2个回答
8
投票

以下步骤可能会为您提供帮助:

  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-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
投票

我从互联网上阅读了一些资料,才意识到“如果要在WEKA库中使用NeuralNetwork分类器,则该方法不使用给定的NeuralNetwork类,而应使用“ MultilayerPerceptron”类”

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

我希望它对那些为此感到挣扎的人有用。

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

Ps。如果我错了,请纠正!

© www.soinside.com 2019 - 2024. All rights reserved.