001 package jcolibri.test.test15; 002 003 import jcolibri.casebase.CachedLinealCaseBase; 004 import jcolibri.cbraplications.StandardCBRApplication; 005 import jcolibri.cbrcore.Attribute; 006 import jcolibri.cbrcore.CBRCaseBase; 007 import jcolibri.cbrcore.CBRQuery; 008 import jcolibri.cbrcore.Connector; 009 import jcolibri.connector.PlainTextConnector; 010 import jcolibri.evaluation.Evaluator; 011 import jcolibri.exception.ExecutionException; 012 import jcolibri.extensions.maintenance_evaluation.DetailedEvaluationReport; 013 import jcolibri.method.retrieve.NNretrieval.similarity.global.Average; 014 import jcolibri.method.retrieve.NNretrieval.similarity.local.Interval; 015 import jcolibri.method.reuse.classification.KNNClassificationConfig; 016 import jcolibri.method.reuse.classification.SimilarityWeightedVotingMethod; 017 import jcolibri.method.revise.classification.BasicClassificationOracle; 018 import jcolibri.method.revise.classification.ClassificationOracle; 019 020 import org.apache.commons.logging.Log; 021 022 /** 023 * Evaluable application. It is a normal StandardCBRApplication that 024 * stores its results in the DetailedEvaluationReport 025 * object obtained from Evaluator.getEvaluationReport(). 026 * @author Lisa Cummins 027 * @version 1.0 028 */ 029 public class IrisEvaluableApp implements StandardCBRApplication 030 { 031 Connector _connector; 032 CBRCaseBase _caseBase; 033 KNNClassificationConfig irisSimConfig; 034 035 private Log log; 036 037 /** 038 * The name of the data series containing this application's stored results 039 */ 040 public static final String DATA_SERIES_NAME = "Iris Prediction Cost"; 041 042 /* (non-Javadoc) 043 * @see jcolibri.cbraplications.BasicCBRApplication#configure() 044 */ 045 public void configure() throws ExecutionException 046 { try 047 { _connector = new PlainTextConnector(); 048 _connector.initFromXMLfile(jcolibri.util.FileIO.findFile("jcolibri/test/test15/plaintextconfig.xml")); 049 _caseBase = new CachedLinealCaseBase(); 050 051 // Configure KNN 052 irisSimConfig = new KNNClassificationConfig(); 053 054 irisSimConfig.setDescriptionSimFunction(new Average()); 055 irisSimConfig.addMapping(new Attribute("sepalLength",IrisDescription.class), new Interval(3.6)); 056 irisSimConfig.addMapping(new Attribute("sepalWidth",IrisDescription.class), new Interval(2.4)); 057 irisSimConfig.addMapping(new Attribute("petalLength",IrisDescription.class), new Interval(5.9)); 058 irisSimConfig.addMapping(new Attribute("petalWidth", IrisDescription.class), new Interval(2.4)); 059 irisSimConfig.setClassificationMethod(new SimilarityWeightedVotingMethod()); 060 irisSimConfig.setK(3); 061 062 } catch (Exception e) 063 { throw new ExecutionException(e); 064 } 065 log = org.apache.commons.logging.LogFactory.getLog(this.getClass()); 066 } 067 068 069 /* (non-Javadoc) 070 * @see jcolibri.cbraplications.BasicCBRApplication#preCycle() 071 */ 072 public CBRCaseBase preCycle() throws ExecutionException 073 { _caseBase.init(_connector); 074 return _caseBase; 075 } 076 077 /* (non-Javadoc) 078 * @see jcolibri.cbraplications.BasicCBRApplication#cycle() 079 */ 080 public void cycle(CBRQuery query) throws ExecutionException 081 { log.info("Query: "+ query.getDescription()); 082 083 ClassificationOracle oracle = new BasicClassificationOracle(); 084 double predictionCost = oracle.getPredictionCost(query, _caseBase, irisSimConfig); 085 086 // Now we add the cost of the prediction to the series DATA_SERIES_NAME. 087 ((DetailedEvaluationReport)(Evaluator.getEvaluationReport())). 088 addDataToSeries(DATA_SERIES_NAME, query, predictionCost); 089 } 090 091 /* (non-Javadoc) 092 * @see jcolibri.cbraplications.BasicCBRApplication#postCycle() 093 */ 094 public void postCycle() throws ExecutionException 095 { _connector.close(); 096 } 097 }