diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningHandlerFactory.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningHandlerFactory.java index aa98f3508dfb635dee1bb986153a9f1aa1630855..5d982f3447bacf475bfba840497aef41b0df6445 100644 --- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningHandlerFactory.java +++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MachineLearningHandlerFactory.java @@ -38,4 +38,12 @@ public abstract class MachineLearningHandlerFactory implements MachineLearningSe result.setDecoder(createDecoder()); return result; } + + /** + * Shuts down this factory, and free held resources, if any. + * Subclasses should override the default empty implementation, if needed. + */ + public void shutdown() { + // empty by default + } } diff --git a/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java b/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java index 3e775d2e9a5d54219d280508868883cfbc75f5f9..37b1f52f61e4025b7ec1b3147ca865a431797903 100644 --- a/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java +++ b/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java @@ -209,6 +209,8 @@ public class EraserStarter { if (analyze != null) { analyze.stop(); } + activityFactory.shutdown(); + preferenceFactory.shutdown(); InfluxAdapter influxAdapter = root.getInfluxRoot().influxAdapter(); if (influxAdapter != null) { try { diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/CsvTransfer.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/CsvTransfer.java deleted file mode 100644 index 1c08268d59dd4003149e551d2e3e60895d30e3f6..0000000000000000000000000000000000000000 --- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/CsvTransfer.java +++ /dev/null @@ -1,60 +0,0 @@ -package de.tudresden.inf.st.eraser.feedbackloop.learner_backup; - -import java.io.*; -import java.util.*; - -import com.opencsv.CSVReader; -import com.opencsv.CSVWriter; - - -public class CsvTransfer { - public static void main(String[] args){ - Learner learner=new Learner(); - learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv"); - } - - //learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv"); - /**private static final String CSV_FILE_PATH - = "datasets/backup/activity_data_example.csv"; - private static final String OUTPUT_FILE_PATH - = "datasets/backup/activity_data.csv"; - public static void main(String[] args) - { - addDataToCSV(CSV_FILE_PATH, OUTPUT_FILE_PATH); - } - public static void addDataToCSV(String input, String output) - { - File input_file = new File(input); - File output_file = new File(output); - try { - // create FileWriter object with file as parameter - FileReader reader = new FileReader(input_file); - CSVReader csv_reader = new CSVReader(reader); - String[] nextRecord; - FileWriter writer = new FileWriter(output_file); - CSVWriter csv_writer = new CSVWriter(writer, ',', - CSVWriter.NO_QUOTE_CHARACTER, - CSVWriter.DEFAULT_ESCAPE_CHARACTER, - CSVWriter.DEFAULT_LINE_END); - List<String[]> data = new ArrayList<String[]>(); - - while ((nextRecord = csv_reader.readNext()) != null) { - data.add(nextRecord); - - for (String cell : nextRecord) { - System.out.print(cell + "\t"); - } - System.out.println(); - } - csv_writer.writeAll(data); - writer.close(); - csv_reader.close(); - } - catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - }*/ -} - - diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java index 855db2bfaf6574ef5619898098ffc103c3d50e46..c9d33ba6809abbdfce3939c3d4b2951403e9ca79 100644 --- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java +++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Learner.java @@ -3,7 +3,6 @@ package de.tudresden.inf.st.eraser.feedbackloop.learner_backup; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.encog.Encog; -import org.encog.ml.MLClassification; import org.encog.ml.data.MLData; import org.encog.ml.data.versatile.NormalizationHelper; import org.encog.ml.data.versatile.VersatileMLDataSet; @@ -36,8 +35,8 @@ public class Learner { private EncogModel p_model; private NormalizationHelper activity_helper; private NormalizationHelper preference_helper; - private MLClassification a_best_method; - private MLClassification p_best_method; + private BasicNetwork a_best_method; + private BasicNetwork p_best_method; private final Logger logger = LogManager.getLogger(Learner.class); public Learner() { @@ -104,21 +103,14 @@ public class Learner { preference_helper = p_data.getNormHelper(); } - void train(String activity_url, String preference_url) { - activity_train(activity_url); - preference_train(preference_url); - Encog.getInstance().shutdown(); - } - void activity_train(String activity_csv_url) { logger.info("Activity training is beginning ... ..."); activityDataAnalyser(activity_csv_url); a_model.holdBackValidation(0.3, true, 1001); a_model.selectTrainingType(a_data); - a_best_method = (MLClassification) a_model.crossvalidate(5, true); + a_best_method = (BasicNetwork) a_model.crossvalidate(5, true); saveEncogModel(save_activity_model_file); logger.info("Activity training is finished ... ..."); - Encog.getInstance().shutdown(); } void preference_train(String prefence_csv_url) { @@ -126,56 +118,29 @@ public class Learner { preferenceDataAnalyser(prefence_csv_url); p_model.holdBackValidation(0.3, true, 1001); p_model.selectTrainingType(p_data); - p_best_method = (MLClassification) p_model.crossvalidate(5, true); + p_best_method = (BasicNetwork) p_model.crossvalidate(5, true); saveEncogModel(save_preference_model_file); logger.info("Preference training is finished ... ..."); - Encog.getInstance().shutdown(); - } - - String[] predictor(String[] new_data) { - String[] preference_data = new String[2]; - String[] result = new String[3]; - String[] activity_data = new String[12]; - for (int i = 0; i < new_data.length; i++) { - activity_data[i] = new_data[i]; - } - result[0] = activity_predictor(activity_data); - preference_data[0] = result[0]; - preference_data[1] = new_data[12]; - // FIXME should be done with array copy - String[] tmp = preference_predictor(preference_data); - result[1] = tmp[0]; - result[2] = tmp[1]; - Encog.getInstance().shutdown(); - return result; } String activity_predictor(String[] new_data) { -// logger.info("Activity predicting ... ..."); String activity_result; - activityDataAnalyser("../datasets/backup/activity_data.csv"); - BasicNetwork activity_method = (BasicNetwork) loadObject(save_activity_model_file); MLData input = activity_helper.allocateInputVector(); activity_helper.normalizeInputVector(new_data, input.getData(), false); - MLData output = activity_method.compute(input); + MLData output = a_best_method.compute(input); activity_result = activity_helper.denormalizeOutputVectorToString(output)[0]; - Encog.getInstance().shutdown(); logger.debug("Activity Predictor result is: {}", activity_result); return activity_result; } String[] preference_predictor(String[] new_data) { -// logger.info("Preference predicting ... ..."); - String[] preference_result; - preference_result = new String[2]; - preferenceDataAnalyser("../datasets/backup/preference_data.csv"); - BasicNetwork preference_method = (BasicNetwork) loadObject(save_preference_model_file); MLData input = preference_helper.allocateInputVector(); preference_helper.normalizeInputVector(new_data, input.getData(), false); - MLData output = preference_method.compute(input); - preference_result[0] = preference_helper.denormalizeOutputVectorToString(output)[0]; - preference_result[1] = preference_helper.denormalizeOutputVectorToString(output)[1]; - Encog.getInstance().shutdown(); + MLData output = p_best_method.compute(input); + String[] preference_result = new String[] { + preference_helper.denormalizeOutputVectorToString(output)[0], + preference_helper.denormalizeOutputVectorToString(output)[1] + }; logger.debug("Preference Predictor result, Color: {}, brightness: {}", Math.round(Float.parseFloat(preference_result[0])), Math.round(Float.parseFloat(preference_result[1]))); return preference_result; @@ -187,6 +152,9 @@ public class Learner { } else { saveObject(modelFile, this.p_best_method); } + } + void shutdown() { + Encog.getInstance().shutdown(); } } diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningHandlerFactoryImpl.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningHandlerFactoryImpl.java index 6b487d6f6d5becc53da3f9b98cf2d3c514b81b6b..3d4500e5d1005b84f3b4dc0fff19e8e2f170ad91 100644 --- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningHandlerFactoryImpl.java +++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningHandlerFactoryImpl.java @@ -43,4 +43,8 @@ public class MachineLearningHandlerFactoryImpl extends MachineLearningHandlerFac public MachineLearningDecoder createDecoder() { return handler; } + + public void shutdown() { + learner.shutdown(); + } } diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java index 2759c6a8fd8ec2bdb14035e04f72a9041d4c8fcb..ee281c9b5171fe8d2864115fc2e62cfef3f4128d 100644 --- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java +++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/Main.java @@ -8,134 +8,30 @@ import java.util.Arrays; public class Main { public static void main(String[] args) { - /** - * new data from KB - * */ + /* + new data from KB + */ //ReaderCSV reader = new ReaderCSV("datasets/backup/activity_data.csv","preference"); //reader.updater(); //Learner learner=new Learner(); //learner.preference_train("../datasets/backup/preference_data.csv"); //learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv"); activity_validation_learner(); - //0.5793968,1.2126632,-4.6244006,-0.030779,0.801127,0.590978,-3.1411927,-0.93373865,-0.31124622,-0.35992432,0.33746338,-0.79608154,dancing - /*String[] new_data = new String[12]; - new_data[0]="0.5793968"; - new_data[1]="1.2126632"; - new_data[2]="-4.6244006"; - new_data[3]="-0.030779"; - new_data[4]="0.801127"; - new_data[5]="0.590978"; - new_data[6]="-3.1411927"; - new_data[7]="-0.93373865"; - new_data[8]="-0.31124622"; - new_data[9]="-0.35992432"; - new_data[10]="0.33746338"; - new_data[11]="-0.79608154"; - - String result =learner.activity_predictor(new_data); - System.out.println(result); - - String[] new_data_1={result,"medium"}; - learner.preference_predictor(new_data_1); - - //List k=new ArrayList(); - - //k.add(new_data);*/ - - //learner.preference_train("datasets/backup/preference_data.csv"); - //learner.train("datasets/backup/activity_data.csv","datasets/backup/preference_data.csv"); - //walking,medium,120,70 - //reading,bright,180,0 - - //activity_validation_learner(); - //0.10654198,8.6574335,4.414908,0.040269,0.516884,0.853285,1.2066777,-1.1444284,9.648633,1.2207031E-4,-0.055358887,0.5834961 working - /**String[] new_data = new String[12]; - new_data[0]="0.010773907"; - new_data[1]="8.610746"; - new_data[2]="4.4963107"; - new_data[3]="0.047136"; - new_data[4]="0.515427"; - new_data[5]="0.852877"; - new_data[6]="0.9720459"; - new_data[7]="-1.3694834"; - new_data[8]="9.696517"; - new_data[9]="-0.0056152344"; - new_data[10]="-0.049438477"; - new_data[11]="0.5576782"; - //0.010773907,8.610746,4.4963107,0.047136,0.515427,0.852877,0.9720459,-1.3694834,9.696517,-0.0056152344,-0.049438477,0.5576782 working - //0.9999999988939648,-0.9995820798966354,-0.9999999999999997,-0.9999988062118802,-0.9974031940544938,-1.0 - - //String result =learner.activity_predictor(new_data); - //System.out.println(result); - - /**String[] new_data_1 =new String[12]; - //-2.6252422,8.619126,-2.7030537,0.552147,0.5078,0.450302,-8.1881695,-1.2641385,0.038307227,-0.34222412,0.49102783,-0.016540527,walking - new_data_1[0]="-2.6252422"; - new_data_1[1]="8.619126"; - new_data_1[2]="-2.7030537"; - new_data_1[3]="0.552147"; - new_data_1[4]="0.5078"; - new_data_1[5]="0.450302"; - new_data_1[6]="-8.1881695"; - new_data_1[7]="-1.2641385"; - new_data_1[8]="0.038307227"; - new_data_1[9]="-0.34222412"; - new_data_1[10]="0.49102783"; - new_data_1[11]="-0.016540527"; - String result1 =learner.activity_predictor(new_data_1); - System.out.println(result1); - /** - * learner.train(activity_csv_url, preference_data_url) - * learner.predictor get the result from predictor for new data - * */ - /**String[] new_data_2 = new String[12]; - //-6.5565214,5.717354,5.6658783,0.185591,0.464146,0.413321,-20.580557,3.8498764,-0.4261679,0.7647095,-0.4713745,0.23999023,dancing - new_data_2[0]="-6.5565214"; - new_data_2[1]="5.717354"; - new_data_2[2]="5.6658783"; - new_data_2[3]="0.185591"; - new_data_2[4]="0.464146"; - new_data_2[5]="0.413321"; - new_data_2[6]="-20.580557"; - new_data_2[7]="3.8498764"; - new_data_2[8]="-0.4261679"; - new_data_2[9]="0.7647095"; - new_data_2[10]="-0.4713745"; - new_data_2[11]="0.23999023"; - - String[] new_data_3 = new String[12]; - new_data_3[0]="-5.3881507"; - new_data_3[1]="0.25378537"; - new_data_3[2]="7.69257"; - new_data_3[3]="-0.122974"; - new_data_3[4]="0.247411"; - new_data_3[5]="0.439031"; - new_data_3[6]="4.9224787"; - new_data_3[7]="-10.601525"; - new_data_3[8]="-4.927267"; - new_data_3[9]="0.7946167"; - new_data_3[10]="0.35272217"; - new_data_3[11]="0.16192627"; - //"-5.3881507","0.25378537","7.69257","-0.122974","0.247411","0.439031","4.9224787","-10.601525","-4.927267","0.7946167","0.35272217","0.16192627","lying" - Learner learner=new Learner(); - //learner.train("datasets/backup/activity_data.csv", "datasets/preference_data.csv"); - String[] result = learner.predictor(new_data_3); - System.out.println("activity is:" + result[0]); - //System.out.println("perference is: "+ result[1]);**/ } - public static void activity_validation_learner(){ + + private static void activity_validation_learner() { ReadCSV csv = new ReadCSV("../datasets/backup/activity_data.csv", true, CSVFormat.DECIMAL_POINT); String[] line = new String[11]; Learner learner = new Learner(); - learner.train("../datasets/backup/activity_data.csv","../datasets/backup/preference_data.csv"); - int wrong=0; - int right=0; - int i =0; - while(csv.next()) { - if(i==0){ + learner.activity_train("../datasets/backup/activity_data.csv"); + learner.preference_train("../datasets/backup/preference_data.csv"); + int wrong = 0; + int right = 0; + int i = 0; + while (csv.next()) { + if (i == 0) { i++; - - }else { + } else { StringBuilder result = new StringBuilder(); line[0] = csv.get(0); line[1] = csv.get(1); @@ -150,27 +46,28 @@ public class Main { line[10] = csv.get(10); //line[11] = csv.get(11); String correct = csv.get(11); - String irisChosen = learner.predictor(line)[0]; + String irisChosen = learner.activity_predictor(line); result.append(Arrays.toString(line)); result.append(" -> predicted: "); result.append(irisChosen); result.append("(correct: "); result.append(correct); result.append(")"); - if (irisChosen.equals(correct)!=true){ + if (!irisChosen.equals(correct)) { System.out.println(correct); System.out.println(irisChosen); ++wrong; - }else{ + } else { ++right; } System.out.println(result.toString()); } - System.out.println("wrong number"+wrong); - System.out.println("right number"+right);} - + System.out.println("wrong number" + wrong); + System.out.println("right number" + right); + } - //double validation = (double(right))/(double(wrong+right)); - //System.out.println("%.2f"+validation); + learner.shutdown(); + //double validation = (double(right))/(double(wrong+right)); + //System.out.println("%.2f"+validation); } } diff --git a/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/LearnerSubjectUnderTest.java b/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/LearnerSubjectUnderTest.java index 2b6fbb167456d14f5045d10ab5c0eee01a0ad69f..5743f0a94f79a234e063a26771b4069546cd5975 100644 --- a/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/LearnerSubjectUnderTest.java +++ b/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/LearnerSubjectUnderTest.java @@ -29,4 +29,8 @@ class LearnerSubjectUnderTest { encoder = factory.createEncoder(); decoder = factory.createDecoder(); } + + void shutdown() { + factory.shutdown(); + } } diff --git a/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/LearnerTest.java b/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/LearnerTest.java index e81b04345dcc54c715864d8ca2063ad4a24a0834..b82c6d3fdd9a84af22a44a9052bd60b3c25234a0 100644 --- a/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/LearnerTest.java +++ b/feedbackloop.learner_backup/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/learner_backup/LearnerTest.java @@ -1,9 +1,8 @@ package de.tudresden.inf.st.eraser.feedbackloop.learner_backup; import de.tudresden.inf.st.eraser.jastadd.model.*; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; +import org.encog.Encog; +import org.junit.*; import java.net.MalformedURLException; import java.net.URL; @@ -76,4 +75,9 @@ public class LearnerTest { PREFERENCE_LEARNING, true); } + @After + public void shutdownLearner() { + sut.shutdown(); + } + }