001 package jcolibri.test.test14; 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.method.retrieve.NNretrieval.similarity.global.Average; 013 import jcolibri.method.retrieve.NNretrieval.similarity.local.Interval; 014 import jcolibri.method.reuse.classification.KNNClassificationConfig; 015 import jcolibri.method.reuse.classification.SimilarityWeightedVotingMethod; 016 import jcolibri.method.revise.classification.BasicClassificationOracle; 017 import jcolibri.method.revise.classification.ClassificationOracle; 018 019 import org.apache.commons.logging.Log; 020 021 /** 022 * Evaluable application. It is a normal StandardCBRApplication that 023 * stores its results in the DetailedEvaluationReport 024 * object obtained from Evaluator.getEvaluationReport(). 025 * @author Lisa Cummins 026 * @version 1.0 027 */ 028 public class GlassEvaluableApp implements StandardCBRApplication 029 { 030 Connector _connector; 031 CBRCaseBase _caseBase; 032 KNNClassificationConfig glassSimConfig; 033 034 private Log log; 035 036 /** 037 * The name of the data series containing this application's stored results 038 */ 039 public static final String DATA_SERIES_NAME = "Glass Prediction Cost"; 040 041 /* (non-Javadoc) 042 * @see jcolibri.cbraplications.BasicCBRApplication#configure() 043 */ 044 public void configure() throws ExecutionException 045 { try 046 { _connector = new PlainTextConnector(); 047 _connector.initFromXMLfile(jcolibri.util.FileIO.findFile("jcolibri/test/test14/plaintextconfigGlass.xml")); 048 _caseBase = new CachedLinealCaseBase(); 049 050 // Configure KNN 051 glassSimConfig = new KNNClassificationConfig(); 052 053 glassSimConfig.setDescriptionSimFunction(new Average()); 054 glassSimConfig.addMapping(new Attribute("ri",GlassDescription.class), new Interval(0.02278)); 055 glassSimConfig.addMapping(new Attribute("na",GlassDescription.class), new Interval(6.65)); 056 glassSimConfig.addMapping(new Attribute("mg",GlassDescription.class), new Interval(4.49)); 057 glassSimConfig.addMapping(new Attribute("al",GlassDescription.class), new Interval(3.21)); 058 glassSimConfig.addMapping(new Attribute("si",GlassDescription.class), new Interval(5.6)); 059 glassSimConfig.addMapping(new Attribute("k",GlassDescription.class), new Interval(6.21)); 060 glassSimConfig.addMapping(new Attribute("ca",GlassDescription.class), new Interval(10.76)); 061 glassSimConfig.addMapping(new Attribute("ba",GlassDescription.class), new Interval(3.15)); 062 glassSimConfig.addMapping(new Attribute("fe",GlassDescription.class), new Interval(0.51)); 063 glassSimConfig.setClassificationMethod(new SimilarityWeightedVotingMethod()); 064 glassSimConfig.setK(3); 065 066 } catch (Exception e) 067 { throw new ExecutionException(e); 068 } 069 log = org.apache.commons.logging.LogFactory.getLog(this.getClass()); 070 } 071 072 /* (non-Javadoc) 073 * @see jcolibri.cbraplications.BasicCBRApplication#preCycle() 074 */ 075 public CBRCaseBase preCycle() throws ExecutionException 076 { _caseBase.init(_connector); 077 return _caseBase; 078 } 079 080 /* (non-Javadoc) 081 * @see jcolibri.cbraplications.BasicCBRApplication#cycle() 082 */ 083 public void cycle(CBRQuery query) throws ExecutionException 084 { log.info("Query: "+ query.getDescription()); 085 086 ClassificationOracle oracle = new BasicClassificationOracle(); 087 double predictionCost = oracle.getPredictionCost(query, _caseBase, glassSimConfig); 088 089 // Now we add the cost of the prediction to the series "Glass Prediction Cost". 090 Evaluator.getEvaluationReport().addDataToSeries(DATA_SERIES_NAME, predictionCost); 091 } 092 093 /* (non-Javadoc) 094 * @see jcolibri.cbraplications.BasicCBRApplication#postCycle() 095 */ 096 public void postCycle() throws ExecutionException 097 { _connector.close(); 098 } 099 }