package edu.hawaii.jmotif.experiment.cbf; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.ConsoleHandler; import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Logger; import org.hackystat.utilities.logger.HackystatLogger; import edu.hawaii.jmotif.performance.UCRUtils; import edu.hawaii.jmotif.text.SAXCollectionStrategy; import edu.hawaii.jmotif.text.TextUtils; import edu.hawaii.jmotif.text.WordBag; import edu.hawaii.jmotif.timeseries.TSException; import edu.hawaii.jmotif.util.BriefFormatter; /** * Helper-runner for CBF test. * * @author psenin * */ public class CBFPrecisionCLI { private static final int WINDOW_SIZE = 35; private static final int PAA_SIZE = 4; private static final int ALPHABET_SIZE = 12; private static final SAXCollectionStrategy strategy = SAXCollectionStrategy.NOREDUCTION; private static Logger consoleLogger; private static String LOGGING_LEVEL = "FINE"; static { consoleLogger = HackystatLogger.getLogger("debug.console", "preseries"); consoleLogger.setUseParentHandlers(false); for (Handler handler : consoleLogger.getHandlers()) { consoleLogger.removeHandler(handler); } ConsoleHandler handler = new ConsoleHandler(); Formatter formatter = new BriefFormatter(); handler.setFormatter(formatter); consoleLogger.addHandler(handler); HackystatLogger.setLoggingLevel(consoleLogger, LOGGING_LEVEL); } /** * @param args * @throws TSException * @throws IndexOutOfBoundsException * @throws IOException */ public static void main(String[] args) throws IndexOutOfBoundsException, TSException, IOException { Map<String, List<double[]>> trainData = UCRUtils.readUCRData(args[0]); Map<String, List<double[]>> testData = UCRUtils.readUCRData(args[1]); double error = 0D; long jmotifStart = 0L; long jmotifFinish = 0L; for (int i = 0; i < 2; i++) { jmotifStart = System.currentTimeMillis(); // classifying with JMotif // int testSampleSize = 0; int positiveTestCounter = 0; // building vectors // List<WordBag> bags = TextUtils.labeledSeries2WordBags(trainData, PAA_SIZE, ALPHABET_SIZE, WINDOW_SIZE, strategy); HashMap<String, HashMap<String, Double>> tfidf = TextUtils.computeTFIDF(bags); tfidf = TextUtils.normalizeToUnitVectors(tfidf); for (String label : tfidf.keySet()) { List<double[]> testD = testData.get(label); for (double[] series : testD) { positiveTestCounter = positiveTestCounter + TextUtils.classify(label, series, tfidf, PAA_SIZE, ALPHABET_SIZE, WINDOW_SIZE, strategy); testSampleSize++; } } // accuracy and error double accuracy = (double) positiveTestCounter / (double) testSampleSize; error = 1.0d - accuracy; jmotifFinish = System.currentTimeMillis(); } System.out.println("error: " + error + ", time " + String.valueOf(jmotifFinish - jmotifStart)); } }