/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package other_peoples_algorithms; import development.DataSets; import fileIO.OutFile; import utilities.ClassifierTools; import weka.classifiers.lazy.kNN; import weka.core.EuclideanDistance; import weka.core.Instances; import weka.core.elastic_distance_measures.BasicDTW; import weka.core.elastic_distance_measures.MSMDistance; public class StefanMSM extends RecreateResults{ /* Compares MSM to cDTW, DTW, ERP, Euclid*/ @Override public void recreatePublishedResults(String path){ OutFile of=new OutFile(path); String[] names= DataSets.stefan13movesplit; 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. cDTW: Need to know parameter! //5. ERP //6. MSM: For each of the 20 data sets, the value for c was chosen from the // set {0.01, 0.1, 1, 10, 100} k=new kNN(1); double[] paras={0.01, 0.1, 1, 10, 100}; MSMDistance msm= new MSMDistance(); int best=0; double bestAcc=0; for(int p=0;p<paras.length;p++){ msm.setC(paras[p]); k=new kNN(1); k.setDistanceFunction(msm); k.buildClassifier(train); double temp=ClassifierTools.accuracy(test, k); /* if(temp>best){ nuBest=p; lambdaBest=m; best=temp; } */ } } /* k.setDistanceFunction(msm); 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"); */ } @Override public void runOnAllDataSets(String path) { throw new UnsupportedOperationException("Not supported yet."); } }