来自weka实验java

时间:2017-01-25 04:01:10

标签: java machine-learning classification weka supervised-learning

我正在努力获得自动化weka实验的学习曲线。我目前有以下java代码。

public static void EvaluateModel(AbstractClassifier cl, String datapath, String outfile) throws Exception {
    Experiment exp = new Experiment();
    ClassifierSplitEvaluator se = new ClassifierSplitEvaluator();
    se.setClassifier(cl);
    Classifier sec = ((ClassifierSplitEvaluator) se).getClassifier();
    CrossValidationResultProducer cvrp = new CrossValidationResultProducer();
    cvrp.setNumFolds(10);
    cvrp.setSplitEvaluator(se);
    PropertyNode[] propertyPath = new PropertyNode[2];
    try {
        propertyPath[0] = new PropertyNode(
        se, 
        new PropertyDescriptor("splitEvaluator",
            CrossValidationResultProducer.class),
            CrossValidationResultProducer.class);
        propertyPath[1] = new PropertyNode(sec, 
                new PropertyDescriptor("classifier", se.getClass()),
                se.getClass());
    } catch (IntrospectionException e) {
        e.printStackTrace();
    }
    exp.setResultProducer(cvrp);
    exp.setPropertyPath(propertyPath);
    exp.setPropertyArray(new Classifier[]{cl}); 

    DefaultListModel model = new DefaultListModel();
    model.addElement(new File(datapath));
    exp.setDatasets(model);

    InstancesResultListener irl = new InstancesResultListener();
    irl.setOutputFile(new File(outfile));
    exp.setResultListener(irl);

    System.out.println("Initializing...");
    exp.initialize();
    System.out.println("Running...");
    exp.runExperiment();
    System.out.println("Finishing...");
    exp.postProcess();
    System.out.println("Evaluating...");

    PairedTTester tester = new PairedCorrectedTTester();
    FileReader reader = new FileReader(irl.getOutputFile()); 
    Instances result = new Instances(reader); 
    tester.setInstances(result);
    tester.setSortColumn(-1);
    tester.setRunColumn(result.attribute("Key_Run").index());
    tester.setFoldColumn(result.attribute("Key_Fold").index());
    tester.setDatasetKeyColumns(
    new Range(
        "" 
        + (result.attribute("Key_Dataset").index() + 1)));
    tester.setResultsetKeyColumns(
    new Range(
        "" 
        + (result.attribute("Key_Scheme").index() + 1)
        + ","
        + (result.attribute("Key_Scheme_options").index() + 1)
        + ","
        + (result.attribute("Key_Scheme_version_ID").index() + 1)));
    tester.setResultMatrix(new ResultMatrixPlainText());
    tester.setDisplayedResultsets(null);       
    tester.setSignificanceLevel(0.05);
    tester.setShowStdDevs(true);
    // fill result matrix (but discarding the output)
    tester.multiResultsetFull(0, result.attribute("Percent_correct").index());
    // output results for reach dataset
    System.out.println("\nResult:");
    ResultMatrix matrix = tester.getResultMatrix();
    for (int i = 0; i < matrix.getColCount(); i++) {
      System.out.println(matrix.getColName(i));
      System.out.println("    Perc. correct: " + matrix.getMean(i, 0));
      System.out.println("    StdDev: " + matrix.getStdDev(i, 0));
    }
}

我想要做的是在此方法中保存或显示学习曲线。我找不到有关如何以编程方式执行此操作的信息。

0 个答案:

没有答案