在weka中的arff文件上自动运行多个分类器

时间:2015-12-02 03:34:31

标签: machine-learning classification weka arff

我必须在weka中运行许多arff文件,并且对于它们中的每一个,我必须运行多个分类器 - MLP,RandomForest,FURIA等,每个都有不同的测试选项,并存储每个结果。手动执行每个操作非常耗时。我正在寻找一些方法,或一些可以自动化该过程的脚本。  我必须承认我是机器学习的新手,并且不了解脚本。我找到了这个 - https://sites.google.com/site/svaisipour/utilities/cs-for-biologist/weka-runner,虽然我知道如何在这里操作分类器,但是我无法理解如何将测试选项从交叉验证更改为百分比分割。

请告诉我任何可能对我有帮助的方法。任何帮助都将深表感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用Weka Experimenter GUI。

enter image description here

接下来会出现一个大对话框。

要使用多种算法进行运行实验,您必须单击那里的“新建”按钮,然后......哦,好吧......这个video about the experimenter将帮助您入门。

答案 1 :(得分:0)

如果您有信心从自己的Java代码运行Weka,您可以创建所选分类器和文件的数组,并循环执行测试。代码将是这样的(对于培训和测试之间的80/20分割):

    String[] filePaths = {"/some/data1.arff", "/some/data2.arff", "/some/data3.arff"};
    for (String path : filePaths) {
        DataSource source = new DataSource(path);
        Instances data = source.getDataSet();
        if (data.classIndex() == -1) {
            data.setClassIndex(data.numAttributes() - 1);
        }

        data.randomize(new java.util.Random(0));
        int trainSize = (int) Math.round(data.numInstances() * 0.8);
        int testSize = data.numInstances() - trainSize;
        Instances train = new Instances(data, 0, trainSize);
        Instances test = new Instances(data, trainSize, testSize);

        Classifier[] classifiers = {new NaiveBayes, new J48, new MultilayerPerceptron};

        for (Classifier c : classifiers) {
            Classifier cls = c;
            cls.buildClassifier(train);
            Evaluation eval = new Evaluation(train);
            eval.evaluateModel(cls, test);
            System.out.println(eval.toSummaryString("\nResults\n======\n", false));
        }
    }

答案 2 :(得分:0)

您可以从命令行运行Weka。您首先需要将Weka.jar添加到classpath中。然后,您可以通过命令行开始读取文件,运行过滤器,分类器等。您可以轻松地从Weka Primer开始。

例如,您可以使用以下命令运行randomForest:

java weka.classifiers.trees.RandomForest -I 10 -S 1 -t data.arff -x 10

其中:

-I <number of trees> Specifies the number of trees to build.
-S <seed number>  Specifies the seed for random number generator.
-t <name of training file> Sets training file.
-x <number of folds> Sets number of folds for cross-validation   

您可以找到详细的规范here

如果您想使用拆分百分比而不是交叉验证,只需替换

即可
-x <number of folds> 

-split-percentage <percentage>

或者,您可以通过-T:

指定单独的测试集
-T <name of test file> Sets test file. 

如果按照说明运行命令,结果将打印在命令行中。如果您想将它们保存在单独的文件中,您可以按照建议here

进行操作