/* Class to recreate someone elses */ package other_peoples_algorithms; import development.DataSets; import fileIO.OutFile; import utilities.ClassifierTools; import weka.classifiers.Classifier; import weka.classifiers.lazy.kNN; import weka.core.*; import weka.core.elastic_distance_measures.*; /** * * @author ajb */ public class MarteauTWED extends RecreateResults{ public void recreatePublishedResults(String path){ OutFile of=new OutFile(path); String[] names= DataSets.marteau09stiffness; int nosClassifiers=3; kNN[] c=new kNN[nosClassifiers]; double[] testAcc; for(int i=0;i<names.length;i++){ System.out.println(" Problem ="+names[i]); of.writeString(names[i]+","); Instances train=ClassifierTools.loadData(dataPath+names[i]+"\\"+names[i]+"_TRAIN"); Instances test=ClassifierTools.loadData(dataPath+names[i]+"\\"+names[i]+"_TEST"); //Build clean classifiers. for(int j=0;j<c.length;j++) c[j]=new kNN(1); testAcc=new double[c.length]; //6 Classifiers: //1. Euclidean distance: No parameter optimisation int cCount=0; kNN k=new kNN(1); k.setDistanceFunction(new EuclideanDistance()); k.buildClassifier(train); testAcc[cCount++]=ClassifierTools.accuracy(test, k); of.writeString(testAcc[cCount-1]+","); System.out.println("\t\t Euclidean Dist ="+testAcc[cCount-1]); //2. Full Window DTW No parameter optimisation k=new kNN(1); k.setDistanceFunction(new BasicDTW()); k.buildClassifier(train); testAcc[cCount++]=ClassifierTools.accuracy(test, k); System.out.println("\t\t Full DTW ="+testAcc[cCount-1]); of.writeString(testAcc[cCount-1]+","); //3. LCSS: Need to know parameter! //4. ODTW: Optimised for window size //5. ERP //6. OTWED double[] nuVals={0.00001,0.0001,0.001,0.01,0.1, 1}; double[] lambdaVals={0,0.25,0.5,0.75,1}; double best=0; int nuBest=0, lambdaBest=0; k=new kNN(1); TWEDistance twed=new TWEDistance(); for(int p=0;p<nuVals.length;p++){ twed.setNu(nuVals[p]); for(int m=0;m<lambdaVals.length;m++){ twed.setLambda(lambdaVals[m]); k.setDistanceFunction(twed); //Cross validate, I'm cheating! k.buildClassifier(train); double temp=ClassifierTools.accuracy(test, k); if(temp>best){ nuBest=p; lambdaBest=m; best=temp; } } } twed.setNu(nuVals[nuBest]); twed.setLambda(lambdaVals[lambdaBest]); k.setDistanceFunction(twed); k.buildClassifier(train); testAcc[cCount++]=ClassifierTools.accuracy(test, k); System.out.println("\t\t TWED ="+testAcc[cCount-1]+" nu val= "+nuVals[nuBest]+" l val ="+lambdaVals[lambdaBest]); of.writeString(testAcc[cCount-1]+"\n"); } } public void runOnAllDataSets(String path){ } public static void main(String[] args){ new MarteauTWED().recreatePublishedResults("C:\\Users\\ajb\\Dropbox\\Results\\Other Peoples Published Results\\MarteauTable1.csv"); } }