/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package applications;
import utilities.ClassifierTools;
import utilities.ThreadedClassifierExperiment;
import weka.classifiers.Classifier;
import weka.classifiers.functions.SMO;
import weka.classifiers.functions.supportVector.PolyKernel;
import weka.classifiers.lazy.DTW_kNN;
import weka.classifiers.lazy.IBk;
import weka.classifiers.lazy.kNN;
import weka.core.Instances;
import weka.core.shapelet.QualityMeasures;
import weka.filters.NormalizeCase;
import weka.filters.timeseries.shapelet_transforms.FullShapeletTransform;
import weka.filters.timeseries.shapelet_transforms.ShapeletTransformDistCaching;
/**
*
* @author ajb
*/
public class FoodSpectrograms {
public static Instances[] train, test;
public static Instances strawberryTrain, strawberryTest;
public static Instances wineTrain, wineTest;
public static Instances hamTrain, hamTest;
public static String path="C:\\Users\\ajb\\Dropbox\\TSC Problems\\";
public static String[] names={"Meat","Wine","Ham","Strawberry"};
public static void loadData(){
train=new Instances[4];
test=new Instances[4];
train[0]=ClassifierTools.loadData(path+"Meat\\Meat_TRAIN");
test[0]=ClassifierTools.loadData(path+"Meat\\Meat_TEST");
train[1]=ClassifierTools.loadData(path+"Wine\\Wine_TRAIN");
test[1]=ClassifierTools.loadData(path+"Wine\\Wine_TEST");
train[2]=ClassifierTools.loadData(path+"Ham\\Ham_TRAIN");
test[2]=ClassifierTools.loadData(path+"Ham\\Ham_TEST");
train[3]=ClassifierTools.loadData(path+"Strawberry\\Strawberry_TRAIN");
test[3]=ClassifierTools.loadData(path+"Strawberry\\Strawberry_TEST");
NormalizeCase nc =new NormalizeCase();
for(int i=0;i<test.length;i++){
try{
train[i]=nc.process(train[i]);
test[i]=nc.process(test[i]);
}catch(Exception e){
System.out.println(" Errereere");
System.exit(0);
}
}
}
public static void shapeletClassifier(){
int nosExp=3;
ThreadedClassifierExperiment[] runs= new ThreadedClassifierExperiment[nosExp];
Thread[] threads=new Thread[nosExp];
for(int i=0;i<nosExp;i++){
Classifier c=new SMO();
PolyKernel kernel = new PolyKernel();
kernel.setExponent(1);
((SMO)c).setKernel(kernel);
FullShapeletTransform s = new FullShapeletTransform();
s.setDebug(false);
s.setNumberOfShapelets(train[i].numAttributes()/2);
int minLength=5;
int maxLength=train[i].numAttributes()/4;
// int maxLength=(train.numAttributes()-1)/10;
s.setShapeletMinAndMax(minLength, maxLength);
s.setQualityMeasure(QualityMeasures.ShapeletQualityChoice.F_STAT);
s.turnOffLog();
runs[i]=new ThreadedClassifierExperiment(train[i],test[i],c);
runs[i].setTransform(s);
threads[i]=new Thread(runs[i]);
}
for(int i=0;i<nosExp;i++)
threads[i].start();
try{
for(int i=0;i<nosExp;i++)
threads[i].join();
}catch(InterruptedException e){
System.out.println(" Interrupted!!");
}
for(int i=0;i<nosExp;i++)
System.out.println(" ED Accuracy for "+names[i]+" is "+runs[i].getTestAccuracy());
}
public static void baselineClassifier(){
int nosExp=4;
ThreadedClassifierExperiment[] runs= new ThreadedClassifierExperiment[nosExp];
Thread[] threads=new Thread[nosExp];
for(int i=0;i<nosExp;i++){
DTW_kNN c=new DTW_kNN();
c.setMaxR(1);
c.optimiseWindow(true);
runs[i]=new ThreadedClassifierExperiment(train[i],test[i],c);
threads[i]=new Thread(runs[i]);
}
for(int i=0;i<nosExp;i++)
threads[i].start();
try{
for(int i=0;i<nosExp;i++)
threads[i].join();
}catch(InterruptedException e){
System.out.println(" Interrupted!!");
}
for(int i=0;i<nosExp;i++)
System.out.println(" DTWCV Accuracy for "+names[i]+" is "+runs[i].getTestAccuracy());
}
public static void main(String[] args){
loadData();
// baselineClassifier();
shapeletClassifier();
}
}