package edu.hawaii.jmotif.experiment.twopatterns; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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; public class ContinousExperiment { public static void main(String[] args) throws IOException, IndexOutOfBoundsException, TSException { int trainLimit = Integer.valueOf(args[0]).intValue(); Map<String, List<double[]>> trainData = UCRUtils.readUCRData("2patterns_TRAIN.csv"); Map<String, List<double[]>> testData = UCRUtils.readUCRData("2patterns_TESTSHORT.csv"); double error = 0D; long jmotifStart = 0L; long jmotifFinish = 0L; int testSampleSize = 0; int positiveTestCounter = 0; Map<String, List<double[]>> trainSeries = subset(trainData, trainLimit); jmotifStart = System.currentTimeMillis(); // building vectors // List<WordBag> bags = TextUtils.labeledSeries2WordBags(trainSeries, 107, 12, 3, SAXCollectionStrategy.NOREDUCTION); 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, 107, 12, 3, SAXCollectionStrategy.NOREDUCTION); 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)); } private static Map<String, List<double[]>> subset(Map<String, List<double[]>> trainData, int trainLimit) { Map<String, List<double[]>> res = new HashMap<String, List<double[]>>(); List<double[]> uu = new ArrayList<double[]>(); int counter = 0; for (double[] a : trainData.get("uu")) { uu.add(a); counter++; if (counter > trainLimit) { break; } } res.put("uu", uu); List<double[]> du = new ArrayList<double[]>(); counter = 0; for (double[] a : trainData.get("du")) { du.add(a); counter++; if (counter > trainLimit) { break; } } res.put("du", du); List<double[]> ud = new ArrayList<double[]>(); counter = 0; for (double[] a : trainData.get("ud")) { ud.add(a); counter++; if (counter > trainLimit) { break; } } res.put("ud", ud); List<double[]> dd = new ArrayList<double[]>(); counter = 0; for (double[] a : trainData.get("dd")) { dd.add(a); counter++; if (counter > trainLimit) { break; } } res.put("dd", dd); return res; } }