java - weka GUI 和 Java 代码给出不同的结果

标签 java weka

我正在使用 weka java API 进行网格搜索,以便找到 MultilayerPerceptron 的最佳参数。但是,我的 java 代码给出的 RMSE(我在这里做回归)与 weka GUI 给出的不同。这是代码:

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);并使用训练测试集拆分来进行评估。有人可以帮忙吗?非常感谢!

最佳答案

在您的 java 代码中使用 weka 安装文件夹中的 weka.jar。

关于java - weka GUI 和 Java 代码给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20460065/

相关文章:

java - xtext:检测鼠标悬停在编辑器中的标记上时

java - 通过编译参与者自定义编译器错误

java - 在图书馆管理系统上使用多线程

java - 提取用于 Weka 多层感知器标准化的值

r - 评估测试集中缺失值的 weka 分类器 J48,R RWeka

java - 在用于 SVM 分类的 Java 代码中使用哪些 Weka 和 LibSVM .jar 文件

java - 我们应该使用哪个 API 从 PDF 中提取文本和图像,但是提取的图像和文本应该按顺序排列?

java - 在 Intellij : ClassNotFoundException: org. apache.woden.WSDLException 中生成 WSDL 时出错

java - Weka J48 分类不遵循树

machine-learning - WEKA 中潜在语义分析的可扩展性