package edu.hawaii.jmotif.experiment.synthetic; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import edu.hawaii.jmotif.performance.UCRUtils; import edu.hawaii.jmotif.text.CosineDistanceMatrix; import edu.hawaii.jmotif.text.SAXCollectionStrategy; import edu.hawaii.jmotif.text.TextUtils; import edu.hawaii.jmotif.text.WordBag; import edu.hawaii.jmotif.timeseries.TSException; /** * Helper-runner for CBF test. * * @author psenin * */ public class UCRSyntheticControlWebExample { // prefix for all of the output private static final String TRAINING_DATA = "data/synthetic_control/synthetic_control_TRAIN"; private static final String TEST_DATA = "data/synthetic_control/synthetic_control_TEST"; // SAX parameters to use // private static int WINDOW_SIZE = 40; private static int PAA_SIZE = 6; private static int ALPHABET_SIZE = 7; // 8,4,38 private static SAXCollectionStrategy strategy = SAXCollectionStrategy.EXACT; /** * @param args * @throws TSException * @throws IndexOutOfBoundsException * @throws IOException */ public static void main(String[] args) throws IndexOutOfBoundsException, TSException, IOException { // making training and test collections Map<String, List<double[]>> trainData = UCRUtils.readUCRData(TRAINING_DATA); Map<String, List<double[]>> testData = UCRUtils.readUCRData(TEST_DATA); // making training bags collection 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); int testSampleSize = 0; int positiveTestCounter = 0; 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++; } } double accuracy = (double) positiveTestCounter / (double) testSampleSize; double error = 1.0d - accuracy; System.out.println(WINDOW_SIZE + "," + PAA_SIZE + "," + ALPHABET_SIZE + "," + accuracy + "," + error); System.out.println(new CosineDistanceMatrix(tfidf).toString()); } }