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

Posted

技术标签:

【中文标题】在 weka 中自动对 arff 文件运行多个分类器【英文标题】:Run multiple classifiers on arff files in weka automatically 【发布时间】:2016-03-06 04:55:13 【问题描述】:

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

请告诉我任何可能对我有帮助的方法。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果您有信心从自己的 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】:

您可以从命令行运行 Weka。您首先需要将 Weka.jar 添加到您的类路径中。然后就可以通过命令行开始读取文件、运行过滤器、分类器等。您可以从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

【讨论】:

【参考方案3】:

您可以为此使用 Weka Experimenter GUI。

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

要运行多种算法的实验,您必须点击那里的“新建”按钮,然后……哦,好吧……这个video about the experimenter 将帮助您开始。

【讨论】:

非常感谢。这对我帮助很大。

以上是关于在 weka 中自动对 arff 文件运行多个分类器的主要内容,如果未能解决你的问题,请参考以下文章

Fiji / Weka 生成的 arff 文件中的原始属性

ARFF (Weka) 中的缺失值

为 Weka 生成 Arff 文件

Weka - 如何查找分类器的输入格式

Weka 对实例进行分类

Weka中的实例分类