Ignore:
Timestamp:
05/03/16 10:30:09 (9 years ago)
Author:
sherbold
Message:
  • added the concept of result storages to the framework and implemented a very simple first prototype of a MySQLResultStorage (that currently only works with a locally running database)
Location:
trunk/CrossPare/src/de/ugoe/cs/cpdp
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrossPare/src/de/ugoe/cs/cpdp/ExperimentConfiguration.java

    r66 r68  
    3939import de.ugoe.cs.cpdp.dataselection.ISetWiseDataselectionStrategy; 
    4040import de.ugoe.cs.cpdp.eval.IEvaluationStrategy; 
     41import de.ugoe.cs.cpdp.eval.IResultStorage; 
    4142import de.ugoe.cs.cpdp.loader.IVersionLoader; 
    4243import de.ugoe.cs.cpdp.training.ISetWiseTestdataAwareTrainingStrategy; 
     
    116117 
    117118    /** 
    118      * setwise testdata aware trainers, i.e., trainers that require the selected training data to be separate from 
    119      * each other and the current testdata  
     119     * setwise testdata aware trainers, i.e., trainers that require the selected training data to be 
     120     * separate from each other and the current testdata 
    120121     */ 
    121122    private List<ISetWiseTestdataAwareTrainingStrategy> setwiseTestdataAwareTrainers; 
    122      
     123 
    123124    /** 
    124125     * data processors that are applied before the pointwise data selection 
     
    140141     */ 
    141142    private List<ITrainingStrategy> trainers; 
    142      
     143 
    143144    /** 
    144145     * normal trainers, i.e., trainers that require the selected training data in a single data set 
     
    150151     */ 
    151152    private List<IEvaluationStrategy> evaluators; 
     153 
     154    /** 
     155     * result storages used for experiments 
     156     */ 
     157    private List<IResultStorage> resultStorages; 
    152158 
    153159    /** 
     
    198204        testAwareTrainers = new LinkedList<>(); 
    199205        evaluators = new LinkedList<>(); 
     206        resultStorages = new LinkedList<>(); 
    200207 
    201208        if (file == null) { 
     
    347354        return setwiseTestdataAwareTrainers; 
    348355    } 
    349      
     356 
    350357    /** 
    351358     * returns the processors applied before the pointwise data selection 
     
    383390        return trainers; 
    384391    } 
    385      
     392 
    386393    /** 
    387394     * returns the test aware training algorithms 
     
    400407    public List<IEvaluationStrategy> getEvaluators() { 
    401408        return evaluators; 
     409    } 
     410 
     411    public List<IResultStorage> getResultStorages() { 
     412        return resultStorages; 
    402413    } 
    403414 
     
    435446            } 
    436447            else if (qName.equals("loader")) { 
    437                 final IVersionLoader loader = 
    438                     (IVersionLoader) Class.forName("de.ugoe.cs.cpdp.loader." + 
    439                                                        attributes.getValue("name")).newInstance(); 
     448                final IVersionLoader loader = (IVersionLoader) Class 
     449                    .forName("de.ugoe.cs.cpdp.loader." + attributes.getValue("name")).newInstance(); 
    440450                loader.setLocation(attributes.getValue("datalocation")); 
    441451                loaders.add(loader); 
     
    447457            } 
    448458            else if (qName.equals("versionfilter")) { 
    449                 final IVersionFilter filter = 
    450                     (IVersionFilter) Class.forName("de.ugoe.cs.cpdp.versions." + 
    451                                                        attributes.getValue("name")).newInstance(); 
     459                final IVersionFilter filter = (IVersionFilter) Class 
     460                    .forName("de.ugoe.cs.cpdp.versions." + attributes.getValue("name")) 
     461                    .newInstance(); 
    452462                filter.setParameter(attributes.getValue("param")); 
    453463                versionFilters.add(filter); 
    454464            } 
    455465            else if (qName.equals("testVersionfilter")) { 
    456                 final IVersionFilter filter = 
    457                     (IVersionFilter) Class.forName("de.ugoe.cs.cpdp.versions." + 
    458                                                        attributes.getValue("name")).newInstance(); 
     466                final IVersionFilter filter = (IVersionFilter) Class 
     467                    .forName("de.ugoe.cs.cpdp.versions." + attributes.getValue("name")) 
     468                    .newInstance(); 
    459469                filter.setParameter(attributes.getValue("param")); 
    460470                testVersionFilters.add(filter); 
    461471            } 
    462472            else if (qName.equals("trainVersionfilter")) { 
    463                 final IVersionFilter filter = 
    464                     (IVersionFilter) Class.forName("de.ugoe.cs.cpdp.versions." + 
    465                                                        attributes.getValue("name")).newInstance(); 
     473                final IVersionFilter filter = (IVersionFilter) Class 
     474                    .forName("de.ugoe.cs.cpdp.versions." + attributes.getValue("name")) 
     475                    .newInstance(); 
    466476                filter.setParameter(attributes.getValue("param")); 
    467477                trainingVersionFilters.add(filter); 
    468478            } 
    469479            else if (qName.equals("setwisepreprocessor")) { 
    470                 final ISetWiseProcessingStrategy processor = 
    471                     (ISetWiseProcessingStrategy) Class.forName("de.ugoe.cs.cpdp.dataprocessing." + 
    472                                                                    attributes.getValue("name")) 
    473                         .newInstance(); 
     480                final ISetWiseProcessingStrategy processor = (ISetWiseProcessingStrategy) Class 
     481                    .forName("de.ugoe.cs.cpdp.dataprocessing." + attributes.getValue("name")) 
     482                    .newInstance(); 
    474483                processor.setParameter(attributes.getValue("param")); 
    475484                setwisepreprocessors.add(processor); 
     
    477486            else if (qName.equals("setwiseselector")) { 
    478487                final ISetWiseDataselectionStrategy selection = 
    479                     (ISetWiseDataselectionStrategy) Class.forName("de.ugoe.cs.cpdp.dataselection." + 
    480                                                                       attributes.getValue("name")) 
     488                    (ISetWiseDataselectionStrategy) Class 
     489                        .forName("de.ugoe.cs.cpdp.dataselection." + attributes.getValue("name")) 
    481490                        .newInstance(); 
    482491                selection.setParameter(attributes.getValue("param")); 
     
    484493            } 
    485494            else if (qName.equals("setwisepostprocessor")) { 
    486                 final ISetWiseProcessingStrategy processor = 
    487                     (ISetWiseProcessingStrategy) Class.forName("de.ugoe.cs.cpdp.dataprocessing." + 
    488                                                                    attributes.getValue("name")) 
    489                         .newInstance(); 
     495                final ISetWiseProcessingStrategy processor = (ISetWiseProcessingStrategy) Class 
     496                    .forName("de.ugoe.cs.cpdp.dataprocessing." + attributes.getValue("name")) 
     497                    .newInstance(); 
    490498                processor.setParameter(attributes.getValue("param")); 
    491499                setwisepostprocessors.add(processor); 
    492500            } 
    493501            else if (qName.equals("setwisetrainer")) { 
    494                 final ISetWiseTrainingStrategy trainer = 
    495                     (ISetWiseTrainingStrategy) Class.forName("de.ugoe.cs.cpdp.training." + 
    496                                                                  attributes.getValue("name")) 
    497                         .newInstance(); 
     502                final ISetWiseTrainingStrategy trainer = (ISetWiseTrainingStrategy) Class 
     503                    .forName("de.ugoe.cs.cpdp.training." + attributes.getValue("name")) 
     504                    .newInstance(); 
    498505                trainer.setParameter(attributes.getValue("param")); 
    499506                setwiseTrainers.add(trainer); 
     
    501508            else if (qName.equals("setwisetestdataawaretrainer")) { 
    502509                final ISetWiseTestdataAwareTrainingStrategy trainer = 
    503                     (ISetWiseTestdataAwareTrainingStrategy) Class.forName("de.ugoe.cs.cpdp.training." + 
    504                                                                 attributes.getValue("name")) 
     510                    (ISetWiseTestdataAwareTrainingStrategy) Class 
     511                        .forName("de.ugoe.cs.cpdp.training." + attributes.getValue("name")) 
    505512                        .newInstance(); 
    506513                trainer.setParameter(attributes.getValue("param")); 
     
    510517            } 
    511518            else if (qName.equals("preprocessor")) { 
    512                 final IProcessesingStrategy processor = 
    513                     (IProcessesingStrategy) Class.forName("de.ugoe.cs.cpdp.dataprocessing." + 
    514                                                               attributes.getValue("name")) 
    515                         .newInstance(); 
     519                final IProcessesingStrategy processor = (IProcessesingStrategy) Class 
     520                    .forName("de.ugoe.cs.cpdp.dataprocessing." + attributes.getValue("name")) 
     521                    .newInstance(); 
    516522                processor.setParameter(attributes.getValue("param")); 
    517523                preprocessors.add(processor); 
     
    526532            } 
    527533            else if (qName.equals("postprocessor")) { 
    528                 final IProcessesingStrategy processor = 
    529                     (IProcessesingStrategy) Class.forName("de.ugoe.cs.cpdp.dataprocessing." + 
    530                                                               attributes.getValue("name")) 
    531                         .newInstance(); 
     534                final IProcessesingStrategy processor = (IProcessesingStrategy) Class 
     535                    .forName("de.ugoe.cs.cpdp.dataprocessing." + attributes.getValue("name")) 
     536                    .newInstance(); 
    532537                processor.setParameter(attributes.getValue("param")); 
    533538                postprocessors.add(processor); 
    534539            } 
    535540            else if (qName.equals("trainer")) { 
    536                 final ITrainingStrategy trainer = 
    537                     (ITrainingStrategy) Class.forName("de.ugoe.cs.cpdp.training." + 
    538                                                           attributes.getValue("name")) 
    539                         .newInstance(); 
     541                final ITrainingStrategy trainer = (ITrainingStrategy) Class 
     542                    .forName("de.ugoe.cs.cpdp.training." + attributes.getValue("name")) 
     543                    .newInstance(); 
    540544                trainer.setParameter(attributes.getValue("param")); 
    541545                trainers.add(trainer); 
    542546            } 
    543547            else if (qName.equals("testawaretrainer")) { 
    544                 final ITestAwareTrainingStrategy trainer = 
    545                     (ITestAwareTrainingStrategy) Class.forName("de.ugoe.cs.cpdp.training." + 
    546                                                           attributes.getValue("name")) 
    547                         .newInstance(); 
     548                final ITestAwareTrainingStrategy trainer = (ITestAwareTrainingStrategy) Class 
     549                    .forName("de.ugoe.cs.cpdp.training." + attributes.getValue("name")) 
     550                    .newInstance(); 
    548551                trainer.setParameter(attributes.getValue("param")); 
    549552                testAwareTrainers.add(trainer); 
    550553            } 
    551554            else if (qName.equals("eval")) { 
    552                 final IEvaluationStrategy evaluator = 
    553                     (IEvaluationStrategy) Class.forName("de.ugoe.cs.cpdp.eval." + 
    554                                                             attributes.getValue("name")) 
    555                         .newInstance(); 
     555                final IEvaluationStrategy evaluator = (IEvaluationStrategy) Class 
     556                    .forName("de.ugoe.cs.cpdp.eval." + attributes.getValue("name")).newInstance(); 
    556557                evaluators.add(evaluator); 
     558            } 
     559            else if (qName.equals("storage")) { 
     560                final IResultStorage resultStorage = (IResultStorage) Class 
     561                    .forName("de.ugoe.cs.cpdp.eval." + attributes.getValue("name")).newInstance(); 
     562                resultStorages.add(resultStorage); 
    557563            } 
    558564            else if (qName.equals("saveClassifier")) { 
     
    625631 
    626632        if (!executionStrategy.equals(other.executionStrategy)) { 
    627             throw new ExperimentConfigurationException( 
    628                                                        "Executionstrategies must be the same, if config files should be added."); 
     633            throw new ExperimentConfigurationException("Executionstrategies must be the same, if config files should be added."); 
    629634        } 
    630635 
     
    651656        builder.append("Results path: " + resultsPath + StringTools.ENDLINE); 
    652657        builder.append("Version filters: " + versionFilters.toString() + StringTools.ENDLINE); 
    653         builder.append("Test version filters: " + testVersionFilters.toString() + 
    654             StringTools.ENDLINE); 
     658        builder 
     659            .append("Test version filters: " + testVersionFilters.toString() + StringTools.ENDLINE); 
    655660        builder.append("Training version filters: " + trainingVersionFilters.toString() + 
    656661            StringTools.ENDLINE); 
     
    661666            StringTools.ENDLINE); 
    662667        builder.append("Setwise trainers: " + setwiseTrainers.toString() + StringTools.ENDLINE); 
    663         builder.append("Setwise Testdata Aware trainers: " + setwiseTestdataAwareTrainers.toString() + StringTools.ENDLINE); 
     668        builder.append("Setwise Testdata Aware trainers: " + 
     669            setwiseTestdataAwareTrainers.toString() + StringTools.ENDLINE); 
    664670        builder 
    665671            .append("Pointwise preprocessors: " + preprocessors.toString() + StringTools.ENDLINE); 
    666         builder.append("Pointwise selectors: " + pointwiseselectors.toString() + 
    667             StringTools.ENDLINE); 
    668         builder.append("Pointwise postprocessors: " + postprocessors.toString() + 
    669             StringTools.ENDLINE); 
     672        builder 
     673            .append("Pointwise selectors: " + pointwiseselectors.toString() + StringTools.ENDLINE); 
     674        builder 
     675            .append("Pointwise postprocessors: " + postprocessors.toString() + StringTools.ENDLINE); 
    670676        builder.append("Pointwise trainers: " + trainers.toString() + StringTools.ENDLINE); 
    671677        builder.append("Evaluators: " + evaluators.toString() + StringTools.ENDLINE); 
  • trunk/CrossPare/src/de/ugoe/cs/cpdp/eval/AbstractWekaEvaluation.java

    r63 r68  
    1919import java.io.PrintWriter; 
    2020import java.util.ArrayList; 
     21import java.util.Iterator; 
    2122import java.util.LinkedList; 
    2223import java.util.List; 
     
    4344 * <li>fscore</li> 
    4445 * <li>gscore</li> 
     46 * <li>MCC</li> 
    4547 * <li>AUC</li> 
    4648 * <li>AUCEC (weighted by LOC, if applicable; 0.0 if LOC not available)</li> 
    4749 * <li>tpr: true positive rate</li> 
    4850 * <li>tnr: true negative rate</li> 
     51 * <li>fpr: false positive rate</li> 
     52 * <li>fnr: false negative rate</li> 
    4953 * <li>tp: true positives</li> 
    5054 * <li>fp: false positives</li> 
    5155 * <li>tn: true negatives</li> 
    5256 * <li>fn: false negatives</li> 
    53  * <li>errortrain: training error</li> 
    54  * <li>recalltrain: training recall</li> 
    55  * <li>precisiontrain: training precision</li> 
    56  * <li>succHetrain: training success with recall>0.7 and precision>0.5 
    5757 * </ul> 
    5858 *  
     
    6767 
    6868    private boolean outputIsSystemOut = true; 
     69     
     70    private String configurationName = "default"; 
    6971 
    7072    /** 
    71      * Creates the weka evaluator. Allows the creation of the evaluator in different ways, e.g., for 
     73     * Creates the Weka evaluator. Allows the creation of the evaluator in different ways, e.g., for 
    7274     * cross-validation or evaluation on the test data. 
    7375     *  
     
    9092                      Instances traindata, 
    9193                      List<ITrainer> trainers, 
    92                       boolean writeHeader) 
     94                      boolean writeHeader, 
     95                      List<IResultStorage> storages) 
    9396    { 
    94         final List<Classifier> classifiers = new LinkedList<Classifier>(); 
     97        final List<Classifier> classifiers = new LinkedList<>(); 
     98        final List<ExperimentResult> experimentResults = new LinkedList<>(); 
     99        String productName = testdata.relationName(); 
     100         
    95101        for (ITrainer trainer : trainers) { 
    96102            if (trainer instanceof IWekaCompatibleTrainer) { 
    97103                classifiers.add(((IWekaCompatibleTrainer) trainer).getClassifier()); 
     104                experimentResults.add(new ExperimentResult(configurationName, productName, ((IWekaCompatibleTrainer) trainer).getName())); 
    98105            } 
    99106            else { 
     
    129136        } 
    130137 
    131         output.append(testdata.relationName()); 
     138        output.append(productName); 
    132139        output.append("," + testdata.numInstances()); 
    133140        output.append("," + traindata.numInstances()); 
    134141 
    135142        Evaluation eval = null; 
    136         //Evaluation evalTrain = null; 
    137         for (Classifier classifier : classifiers) { 
     143        Iterator<Classifier> classifierIter = classifiers.iterator(); 
     144        Iterator<ExperimentResult> resultIter = experimentResults.iterator(); 
     145        while (classifierIter.hasNext()) { 
     146            Classifier classifier = classifierIter.next(); 
    138147            eval = createEvaluator(testdata, classifier); 
    139             //evalTrain = createEvaluator(traindata, classifier); 
    140148 
    141149            double pf = 
     
    143151            double gmeasure = 2 * eval.recall(1) * (1.0 - pf) / (eval.recall(1) + (1.0 - pf)); 
    144152            double aucec = calculateReviewEffort(testdata, classifier); 
    145  
    146             if (eval.recall(1) >= 0.7 && eval.precision(1) >= 0.5) { 
    147                 output.append(",1"); 
    148             } 
    149             else { 
    150                 output.append(",0"); 
    151             } 
    152  
    153             if (eval.recall(1) >= 0.7 && eval.precision(1) >= 0.7) { 
    154                 output.append(",1"); 
    155             } 
    156             else { 
    157                 output.append(",0"); 
    158             } 
    159  
    160             if (gmeasure > 0.75) { 
    161                 output.append(",1"); 
    162             } 
    163             else { 
    164                 output.append(",0"); 
    165             } 
    166  
    167             if (gmeasure > 0.6) { 
    168                 output.append(",1"); 
    169             } 
    170             else { 
    171                 output.append(",0"); 
    172             } 
    173  
     153            double succHe = eval.recall(1) >= 0.7 && eval.precision(1) >= 0.5 ? 1.0 : 0.0; 
     154            double succZi = eval.recall(1) >= 0.7 && eval.precision(1) >= 0.7 ? 1.0 : 0.0; 
     155            double succG75 = gmeasure > 0.75 ? 1.0 : 0.0; 
     156            double succG60 = gmeasure > 0.6 ? 1.0 : 0.0; 
     157             
     158            output.append("," + succHe); 
     159            output.append("," + succZi); 
     160            output.append("," + succG75); 
     161            output.append("," + succG60);             
    174162            output.append("," + eval.errorRate()); 
    175163            output.append("," + eval.recall(1)); 
     
    188176            output.append("," + eval.numTrueNegatives(1)); 
    189177            output.append("," + eval.numFalsePositives(1)); 
     178             
     179            ExperimentResult result = resultIter.next(); 
     180            result.setSizeTestData(testdata.numInstances()); 
     181            result.setSizeTrainingData(traindata.numInstances()); 
     182            result.setSuccHe(succHe); 
     183            result.setSuccZi(succZi); 
     184            result.setSuccG75(succG75); 
     185            result.setSuccG60(succG60); 
     186            result.setError(eval.errorRate()); 
     187            result.setRecall(eval.recall(1)); 
     188            result.setPrecision(eval.precision(1)); 
     189            result.setFscore(eval.fMeasure(1)); 
     190            result.setGscore(gmeasure); 
     191            result.setMcc(eval.matthewsCorrelationCoefficient(1)); 
     192            result.setAuc(eval.areaUnderROC(1)); 
     193            result.setAucec(aucec); 
     194            result.setTpr(eval.truePositiveRate(1)); 
     195            result.setTnr(eval.trueNegativeRate(1)); 
     196            result.setFpr(eval.falsePositiveRate(1)); 
     197            result.setFnr(eval.falseNegativeRate(1)); 
     198            result.setTp(eval.numTruePositives(1)); 
     199            result.setFn(eval.numFalseNegatives(1)); 
     200            result.setTn(eval.numTrueNegatives(1)); 
     201            result.setFp(eval.numFalsePositives(1)); 
     202            for( IResultStorage storage : storages ) { 
     203                storage.addResult(result); 
     204            } 
    190205        } 
    191206 
     
    301316                output = new PrintWriter(new FileOutputStream(parameters)); 
    302317                outputIsSystemOut = false; 
     318                int filenameStart = parameters.lastIndexOf('/')+1; 
     319                int filenameEnd = parameters.lastIndexOf('.'); 
     320                configurationName = parameters.substring(filenameStart, filenameEnd); 
    303321            } 
    304322            catch (FileNotFoundException e) { 
  • trunk/CrossPare/src/de/ugoe/cs/cpdp/eval/IEvaluationStrategy.java

    r41 r68  
    4040     * @param writeHeader 
    4141     *            if true, a header line for the results file is written (may not be applicable) 
     42     * @param storages 
     43     *            result storages that shall additionally be used 
    4244     */ 
    43     void apply(Instances testdata, Instances traindata, List<ITrainer> trainers, boolean writeHeader); 
     45    void apply(Instances testdata, 
     46               Instances traindata, 
     47               List<ITrainer> trainers, 
     48               boolean writeHeader, 
     49               List<IResultStorage> storages); 
    4450} 
  • trunk/CrossPare/src/de/ugoe/cs/cpdp/execution/AbstractCrossProjectExperiment.java

    r67 r68  
    299299                            config.getExperimentName() + ".csv"); 
    300300                    } 
    301                     evaluator.apply(testdata, traindata, allTrainers, writeHeader); 
     301                    evaluator.apply(testdata, traindata, allTrainers, writeHeader, config.getResultStorages()); 
    302302                    writeHeader = false; 
    303303                } 
  • trunk/CrossPare/src/de/ugoe/cs/cpdp/execution/ClassifierCreationExperiment.java

    r41 r68  
    168168                        config.getExperimentName() + ".csv"); 
    169169                } 
    170                 evaluator.apply(testdata, traindata, allTrainers, writeHeader); 
     170                evaluator.apply(testdata, traindata, allTrainers, writeHeader, config.getResultStorages()); 
    171171                writeHeader = false; 
    172172            } 
Note: See TracChangeset for help on using the changeset viewer.