package development;
import weka.core.elastic_distance_measures.BasicDTW;
import utilities.ClassifierTools;
import java.util.Random;
import fileIO.*;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import weka.core.*;
import weka.filters.*;
import weka.classifiers.Classifier;
import weka.classifiers.bayes.NaiveBayes;
import weka.classifiers.functions.SMO;
import weka.classifiers.functions.supportVector.PolyKernel;
import weka.classifiers.functions.supportVector.RBFKernel;
import weka.classifiers.lazy.DTW_kNN;
import weka.classifiers.lazy.IBk;
import weka.classifiers.lazy.kNN;
import weka.classifiers.meta.RotationForest;
import weka.classifiers.trees.J48;
import weka.classifiers.trees.RandomForest;
public class TimeSeriesClassification {
/*Data sets Eamonn lists
GOT
original format
C:\Research\Data\TimeSeriesData\Time Series Classification
/* Synthetic Control : ControlChart
Gun-Point : GunX
CBF : CBF
Face (all) : facedbase_norm
OSU Leaf : Leaf
Lightning-2 : lighting
Lightning-7
Two Patterns : Two Pat
Trace Roverso : Trace
Wafer : wafer
50Words : WordSpotting
ECG : ecg
: Pulse?
:haptic?
listed, not gots
PlaneHandImages
Car
*/
// public static String dropboxPath="C:\\Research\\Data\\Time Series Classification\\";
//public static String path="C:\\Users\\ajb\\Dropbox\\TSC Problems\\";
//Aarons filePath local build.
public static String path = "C:\\LocalData\\Dropbox\\TSC Problems\\";
public static String dropboxPath=path;
public static String clusterPath="";
//Train Size, Test Size, Series Length, Number of Classes
public static String[] fileNames={
"Adiac", // 390,391,176,37
"ArrowHead",
"ARSim", // 2000,2000,500,2
"Beef", // 30,30,470,5
"BeetleFly", // 20,20,512,2
"BirdChicken", // 20,20,512,2
"Car",
"CBF", // 30,900,128,3
"ChlorineConcentration", // 467,3840,166,3
"CinC_ECG_torso", // 40,1380,1639,4
"Coffee", // 28,28,286,2
"Computers",
"Cricket_X", // 390,390,300,12
"Cricket_Y", // 390,390,300,12
"Cricket_Z", // 390,390,300,12
"DiatomSizeReduction", // 16,306,345,4
"DistalPhalanxOutlineCorrect",
"DistalPhalanxOutlineAgeGroup",
// "DistalPhalanxOIntensityAgeGroup",
"DistalPhalanxTW",
"Earthquakes", // 322,139,512,2
"ECG200", //This problem is flawed and can be 100% classified using the sum of squares!
"ECGFiveDays", // 23,861,136,2
"ElectricDevices", // 8953,7745,96,7
"FaceAll", // 560,1690,131,14
"FaceFour", // 24,88,350,4
"FacesUCR", // 200,2050,131,14
"fiftywords", // 450,455,270,50
"fish", // 175,175,463,7
"FordA", // 3601,1320,500,2
"FordB", // 3636,810,500,2
"GunPoint", // 50,150,150,2
"HandOutlines", // 1000,370,512,2
"Herring", // 64,64,512,2
"Haptics", // 155,308,1092,5
"InlineSkate", // 100,550,1882,7
"ItalyPowerDemand", // 67,1029,24,2
"LargeKitchenAppliances",
"Lightning2", // 60,61,637,2
"Lightning7", // 70,73,319,7
"MALLAT", // 55,2345,1024,8
"MedicalImages", // 381,760,99,10
"MiddlePhalanxOutlineCorrect",
"MiddlePhalanxOutlineAgeGroup",
"MiddlePhalanxTW",
"MoteStrain", // 20,1252,84,2
"NonInvasiveFatalECG_Thorax1",
"NonInvasiveFatalECG_Thorax2",
"OliveOil", // 30,30,570,4
"OSULeaf", // 200,242,427,6
"PhalangesOutlinesCorrect",
// "PassGraphs,
"Plane",
"ProximalPhalanxOutlineCorrect",
"ProximalPhalanxOutlineAgeGroup",
"ProximalPhalanxTW",
"RefrigerationDevices",
"ScreenType",
"ShapeletSim", //Previouslt Synthetic data
"ShapesAll", // 600,600,512,60
"SmallKitchenAppliances",
"SonyAIBORobotSurface", // 20,601,70,2
"SonyAIBORobotSurfaceII",
"StarLightCurves", // 1000,8236,1024,3
"SwedishLeaf", // 500,625,128,15
"Symbols", // 25,995,398,6
"SyntheticControl", // 300,300,60,6
"ToeSegmentation1",
"ToeSegmentation2",
"Trace", // 100,100,275,4
"TwoLeadECG", // 23,1139,82,2
"TwoPatterns", // 1000,4000,128,4
"UWaveGestureLibrary_X", // 896,3582,315,8
"UWaveGestureLibrary_Y", // 896,3582,315,8
"UWaveGestureLibrary_Z", // 896,3582,315,8
"UWaveGestureLibraryAll", // 896,3582,945,8
"wafer", // 1000,6164,152,2
"WordSynonyms",
"yoga"
};
public static String[] fileNamesLengthSorted={
"ItalyPowerDemand", // 67,1029,24,2
"SyntheticControl", // 300,300,60,6
"SonyAIBORobotSurfaceII", // 27,953,65,2
"SonyAIBORobotSurface", // 20,601,70,2
"TwoLeadECG", // 23,1139,82,2
"MoteStrain", // 20,1252,84,2
"ECG200", // 100,100,96,2
"ElectricDevices", // 8953,7745,96,7
"MedicalImages", // 381,760,99,10
"CBF", // 30,900,128,3
"SwedishLeaf", // 500,625,128,15
"TwoPatterns", // 1000,4000,128,4
"FaceAll", // 560,1690,131,14
"FacesUCR", // 200,2050,131,14
"ECGFiveDays", // 23,861,136,2
"Plane", // 105,105,144,7
"GunPoint", // 50,150,150,2
"wafer", // 1000,6164,152,2
"ChlorineConcentration", // 467,3840,166,3
"Adiac", // 390,391,176,37
"DP_Little", // 400,645,250,3
"DP_Middle", // 400,645,250,3
"DP_Thumb", // 400,645,250,3
"MP_Little", // 400,645,250,3
"MP_Middle", // 400,645,250,3
"PP_Little", // 400,645,250,3
"PP_Middle", // 400,645,250,3
"PP_Thumb", // 400,645,250,3
"fiftywords", // 450,455,270,50
"WordSynonyms", // 267,638,270,25
"Trace", // 100,100,275,4
"Coffee", // 28,28,286,2
"Cricket_X", // 390,390,300,12
"Cricket_Y", // 390,390,300,12
"Cricket_Z", // 390,390,300,12
"UWaveGestureLibrary_X", // 896,3582,315,8
"UWaveGestureLibrary_Y", // 896,3582,315,8
"UWaveGestureLibrary_Z", // 896,3582,315,8
"Lighting7", // 70,73,319,7
"DiatomSizeReduction", // 16,306,345,4
"FaceFour", // 24,88,350,4
"Symbols", // 25,995,398,6
"yoga", // 300,3000,426,2
"OSULeaf", // 200,242,427,6
"fish", // 175,175,463,7
"Beef", // 30,30,470,5
"ARSim", // 2000,2000,500,2
"FordA", // 3601,1320,500,2
"FordB", // 3636,810,500,2
"BeetleFly", // 20,20,512,2
"BirdChicken", // 20,20,512,2
"Earthquakes", // 322,139,512,2
"Herring", // 64,64,512,2
"ShapesAll", // 600,600,512,60
"OliveOil", // 30,30,570,4
"Car", // 60,60,577,4
"Lighting2", // 60,61,637,2
"NonInvasiveFatalECG_Thorax1", // 1800,1965,750,42
"NonInvasiveFatalECG_Thorax2", // 1800,1965,750,42
"CricketAll", // 390,390,900,12
"UWaveGestureLibraryAll", // 896,3582,945,8
"MALLAT", // 55,2345,1024,8
"StarLightCurves", // 1000,8236,1024,3
"Haptics", // 155,308,1092,5
"CinC_ECG_torso", // 40,1380,1639,4
"InlineSkate", // 100,550,1882,7
"HandOutlines", // 1000,370,2709,2
};
public static String[] fileNamesTotalSizeSorted={
"SonyAIBORobotSurface", // 20,601,70,2
"ItalyPowerDemand", // 67,1029,24,2
"MoteStrain", // 20,1252,84,2
"SonyAIBORobotSurfaceII", // 27,953,65,2
"TwoLeadECG", // 23,1139,82,2
"ECGFiveDays", // 23,861,136,2
"CBF", // 30,900,128,3
"DiatomSizeReduction", // 16,306,345,4
"GunPoint", // 50,150,150,2
"Coffee", // 28,28,286,2
"FaceFour", // 24,88,350,4
"ECG200", // 100,100,96,2
"Symbols", // 25,995,398,6
"BeetleFly", // 20,20,512,2
"BirdChicken", // 20,20,512,2
"Beef", // 30,30,470,5
"Plane", // 105,105,144,7
"OliveOil", // 30,30,570,4
"SyntheticControl", // 300,300,60,6
"Lighting7", // 70,73,319,7
"FacesUCR", // 200,2050,131,14
"Trace", // 100,100,275,4
"Herring", // 64,64,512,2
"Car", // 60,60,577,4
"MedicalImages", // 381,760,99,10
"Lighting2", // 60,61,637,2
"MALLAT", // 55,2345,1024,8
"SwedishLeaf", // 500,625,128,15
"CinC_ECG_torso", // 40,1380,1639,4
"Adiac", // 390,391,176,37
"WordSynonyms", // 267,638,270,25
"FaceAll", // 560,1690,131,14
"ChlorineConcentration", // 467,3840,166,3
"fish", // 175,175,463,7
"OSULeaf", // 200,242,427,6
"DP_Little", // 400,645,250,3
"DP_Middle", // 400,645,250,3
"DP_Thumb", // 400,645,250,3
"MP_Little", // 400,645,250,3
"MP_Middle", // 400,645,250,3
"PP_Little", // 400,645,250,3
"PP_Middle", // 400,645,250,3
"PP_Thumb", // 400,645,250,3
"Cricket_X", // 390,390,300,12
"Cricket_Y", // 390,390,300,12
"Cricket_Z", // 390,390,300,12
"fiftywords", // 450,455,270,50
"yoga", // 300,3000,426,2
"TwoPatterns", // 1000,4000,128,4
"wafer", // 1000,6164,152,2
"Earthquakes", // 322,139,512,2
"Haptics", // 155,308,1092,5
"InlineSkate", // 100,550,1882,7
"UWaveGestureLibrary_X", // 896,3582,315,8
"UWaveGestureLibrary_Y", // 896,3582,315,8
"UWaveGestureLibrary_Z", // 896,3582,315,8
"ShapesAll", // 600,600,512,60
"UWaveGestureLibraryAll", // 896,3582,945,8
"ElectricDevices", // 8953,7745,96,7
"ARSim", // 2000,2000,500,2
"StarLightCurves", // 1000,8236,1024,3
"NonInvasiveFatalECG_Thorax1", // 1800,1965,750,42
"NonInvasiveFatalECG_Thorax2", // 1800,1965,750,42
"FordA", // 3601,1320,500,2
"FordB", // 3636,810,500,2
"HandOutlines",
};
public static String[] fileNamesTrainSizeSorted={
"DiatomSizeReduction", // 16,306,345,4
"SonyAIBORobotSurface", // 20,601,70,2
"MoteStrain", // 20,1252,84,2
"TwoLeadECG", // 23,1139,82,2
"ECGFiveDays", // 23,861,136,2
"FaceFour", // 24,88,350,4
"Symbols", // 25,995,398,6
"Coffee", // 28,28,286,2
"CBF", // 30,900,128,3
"Beef", // 30,30,470,5
"OliveOil", // 30,30,570,4
"CinC_ECG_torso", // 40,1380,1639,4
"GunPoint", // 50,150,150,2
"MALLAT", // 55,2345,1024,8
"Lighting2", // 60,61,637,2
"Lighting2", // 60,61,637,2
"ItalyPowerDemand", // 67,1029,24,2
"Lighting7", // 70,73,319,7
"Lighting7", // 70,73,319,7
"Trace", // 100,100,275,4
"InlineSkate", // 100,550,1882,7
"Haptics", // 155,308,1092,5
"fish", // 175,175,463,7
"FacesUCR", // 200,2050,131,14
"OSULeaf", // 200,242,427,6
"SyntheticControl", // 300,300,60,6
"Earthquakes", // 322,139,512,2
"MedicalImages", // 381,760,99,10
"Adiac", // 390,391,176,37
"fiftywords", // 450,455,270,50
"ChlorineConcentration", // 467,3840,166,3
"SwedishLeaf", // 500,625,128,15
"FaceAll", // 560,1690,131,14
"TwoPatterns", // 1000,4000,128,4
"wafer", // 1000,6164,152,2
"StarLightCurves", // 1000,8236,1024,3
"HandOutlines", // 1000,370,2709,2
"ARSim", // 2000,2000,500,2
"FordA", // 3601,1320,500,2
"FordB", // 3636,810,500,2
"ElectricDevices", // 8953,7745,96,7
};
//Small defined as a data set size less than 250 instances
public static String[] smallProblems={
"Lighting2",//60,61,637,2
"Lighting7",//70,73,319,7
"Adiac",//390,391,176,37
"FaceFour",//24,88,350,4
"50words",//450,455,270,50
"CBF",//30,900,128,3
"fish",//175,175,463,7
"Gun_Point",//50,150,150,2
"OSULeaf", //200,242,427,6
"SwedishLeaf", //500,625,128,15
"synthetic_control", //300,300,60,6
"Trace",//100,100,275,4
//Index 18, after this the data has not been normalised.
"Beef", //30,30,470,5
"Coffee", //28,28,286,2
"OliveOil"
};
//Sort by series length
//Sorted by training set size
public static String[] UCRProblems={
"Adiac", // 390,391,176,37
"Beef", // 30,30,470,5
"Car",
"CBF", // 30,900,128,3
"ChlorineConcentration", // 467,3840,166,3
"CinC_ECG_torso", // 40,1380,1639,4
"Coffee", // 28,28,286,2
"Cricket_X", // 390,390,300,12
"Cricket_Y", // 390,390,300,12
"Cricket_Z", // 390,390,300,12
"DiatomSizeReduction", // 16,306,345,4
"ECG200", //This problem is flawed and can be 100% classified using the sum of squares!
"ECGFiveDays", // 23,861,136,2
"FaceAll", // 560,1690,131,14
"FaceFour", // 24,88,350,4
"FacesUCR", // 200,2050,131,14
"fiftywords", // 450,455,270,50
"fish", // 175,175,463,7
"GunPoint", // 50,150,150,2
"Haptics", // 155,308,1092,5
"InlineSkate", // 100,550,1882,7
"ItalyPowerDemand", // 67,1029,24,2
"Lighting2", // 60,61,637,2
"Lighting7", // 70,73,319,7
"MALLAT", // 55,2345,1024,8
"MedicalImages", // 381,760,99,10
"MoteStrain", // 20,1252,84,2
"NonInvasiveFatalECG_Thorax1",
"NonInvasiveFatalECG_Thorax2",
"OliveOil", // 30,30,570,4
"OSULeaf", // 200,242,427,6
"Plane",
"SonyAIBORobotSurface", // 20,601,70,2
"SonyAIBORobotSurfaceII",
"StarLightCurves", // 1000,8236,1024,3
"SwedishLeaf", // 500,625,128,15
"Symbols", // 25,995,398,6
"SyntheticControl", // 300,300,60,6
"Trace", // 100,100,275,4
"TwoLeadECG", // 23,1139,82,2
"TwoPatterns", // 1000,4000,128,4
"UWaveGestureLibrary_X", // 896,3582,315,8
"UWaveGestureLibrary_Y", // 896,3582,315,8
"UWaveGestureLibrary_Z", // 896,3582,315,8
"wafer", // 1000,6164,152,2
"WordSynonyms",
"yoga"
};
//Reported Errors for 1-NN, DTW full and TO FOLLOW: DTW with window set through CV
static public double[] ucrError1NN={0.389,0.467,0.267,0.148,0.35,0.103,0.25,0.426,0.356,0.38,0.065,0.12,0.203,0.286,0.216,0.231,0.369,0.217,0.087,0.63,0.658,0.045,0.246,0.425,0.086,0.316,0.121,0.171,0.12,0.133,0.483,0.038,0.305,0.141,0.151,0.213,0.1,0.12,0.24,0.253,0.09,0.261,0.338,0.35,0.005,0.382,0.17};
static public double[] ucrErrorDTWFull={0.396,0.5,0.267,0.003,0.352,0.349,0.179,0.223,0.208,0.208,0.033,0.23,0.232,0.192,0.17,0.0951,0.31,0.167,0.093,0.623,0.616,0.05,0.131,0.274,0.066,0.263,0.165,0.209,0.135,0.133,0.409,0,0.275,0.169,0.093,0.21,0.05,0.007,0,0.096,0,0.273,0.366,0.342,0.02,0.351,0.164};
public static Classifier[] setDefaultSingleClassifiers(ArrayList<String> names){
ArrayList<Classifier> sc2=new ArrayList<>();
sc2.add(new kNN(1));
names.add("NN");
Classifier c;
sc2.add(new NaiveBayes());
names.add("NB");
sc2.add(new J48());
names.add("C45");
c=new SMO();
PolyKernel kernel = new PolyKernel();
kernel.setExponent(1);
((SMO)c).setKernel(kernel);
sc2.add(c);
names.add("SVML");
c=new SMO();
kernel = new PolyKernel();
kernel.setExponent(2);
((SMO)c).setKernel(kernel);
sc2.add(c);
names.add("SVMQ");
c=new RandomForest();
((RandomForest)c).setNumTrees(100);
sc2.add(c);
names.add("RandF100");
c=new RotationForest();
sc2.add(c);
names.add("RotF10");
Classifier[] sc=new Classifier[sc2.size()];
for(int i=0;i<sc.length;i++)
sc[i]=sc2.get(i);
return sc;
}
public static void recreateUCR_1NN_Results(String resultsPath){
DecimalFormat df = new DecimalFormat("###.###");
OutFile of = new OutFile(resultsPath);
try{
System.out.println("************** EUCLIDEAN DISTANCE*******************");
System.out.println("\t\t UCR \t 1NN \t IBk(1) \t kNN ");
of.writeLine("Problem,UCR1NN,UEA1NN,IBk(1),kNN");
for(int i=0;i<UCRProblems.length;i++)
{
Instances test=utilities.ClassifierTools.loadData(TimeSeriesClassification.path+UCRProblems[i]+"\\"+TimeSeriesClassification.UCRProblems[i]+"_TEST");
Instances train=utilities.ClassifierTools.loadData(TimeSeriesClassification.path+UCRProblems[i]+"\\"+TimeSeriesClassification.UCRProblems[i]+"_TRAIN");
kNN a=new kNN(1);
a.normalise(false);
a.buildClassifier(train);
double acc1=utilities.ClassifierTools.accuracy(test,a);
Classifier b=new IBk(1);
b.buildClassifier(train);
double acc2=utilities.ClassifierTools.accuracy(test,b);
kNN knn = new kNN(100);
knn.normalise(false);
knn.setCrossValidate(true);
knn.buildClassifier(train);
double acc3=utilities.ClassifierTools.accuracy(test,knn);
System.out.println(UCRProblems[i]+"\t"+df.format(ucrError1NN[i])+"\t"+df.format((1-acc1))+"\t"+df.format((1-acc2))+"\t"+df.format((1-acc3))+"\t");
of.writeLine(UCRProblems[i]+","+df.format(ucrError1NN[i])+","+df.format((1-acc1))+","+df.format((1-acc2))+","+df.format((1-acc3)));
/*
b.buildClassifier(train);
double acc2=utilities.ClassifierTools.accuracy(test,b);
System.out.println(eamonnFiles[i]+" : 1NN Full DTW Error ="+(1-acc2)+" From website ="+TimeSeriesClassification.eamonnEuclidErrors[i]+" Difference ="+((1-acc1)-TimeSeriesClassification.eamonnDTW_FullErrors[i]));
Classifier[] sc=new Classifier[1];
*/
}
}catch(Exception e){
System.out.println(" Error in accuracy ="+e);
e.printStackTrace();
System.exit(0);
}
}
public static void recreateUCR_FullDTW_Results(String resultsPath){
DecimalFormat df = new DecimalFormat("###.###");
OutFile of = new OutFile(resultsPath);
try{
System.out.println("************** DTW DISTANCE*******************");
System.out.println("\t\t UCR \t DTW_1NN ");
of.writeLine("Problem,UCR_DTW_1NN_FULL,UEA_DTW_1NN_FULL");
for(int i=0;i<UCRProblems.length;i++)
{
Instances test=utilities.ClassifierTools.loadData(TimeSeriesClassification.path+UCRProblems[i]+"\\"+TimeSeriesClassification.UCRProblems[i]+"_TEST");
Instances train=utilities.ClassifierTools.loadData(TimeSeriesClassification.path+UCRProblems[i]+"\\"+TimeSeriesClassification.UCRProblems[i]+"_TRAIN");
kNN a=new kNN(1);
a.normalise(false);
BasicDTW dtw = new BasicDTW(true);
a.setDistanceFunction(dtw);
a.buildClassifier(train);
double acc1=utilities.ClassifierTools.accuracy(test,a);
System.out.println(UCRProblems[i]+"\t"+df.format(ucrErrorDTWFull[i])+"\t"+df.format((1-acc1)));
of.writeLine(UCRProblems[i]+","+df.format(ucrError1NN[i])+","+df.format((1-acc1)));
/*
b.buildClassifier(train);
double acc2=utilities.ClassifierTools.accuracy(test,b);
System.out.println(eamonnFiles[i]+" : 1NN Full DTW Error ="+(1-acc2)+" From website ="+TimeSeriesClassification.eamonnEuclidErrors[i]+" Difference ="+((1-acc1)-TimeSeriesClassification.eamonnDTW_FullErrors[i]));
Classifier[] sc=new Classifier[1];
*/
}
}catch(Exception e){
System.out.println(" Error in accuracy ="+e);
e.printStackTrace();
System.exit(0);
}
}
public static void main(String[] args){
// formatCricket();
// formatUWave();
// recreateUCR_1NN_Results("C:\\Users\\ajb\\Dropbox\\Results\\TimeDomain\\1NN_UCR_Comparison.csv");
// recreateUCR_FullDTW_Results("C:\\Users\\ajb\\Dropbox\\Results\\TimeDomain\\CTW_1NN_UCR_Comparison.csv");
dataDescription();
}
public static class MetaData implements Comparable<MetaData>{
String fileName;
int trainSetSize;
int testSetSize;
int seriesLength;
int nosClasses;
public MetaData(String n, int t1, int t2, int s, int c){
fileName=n;
trainSetSize=t1;
testSetSize=t2;
seriesLength=s;
nosClasses=c;
}
public String toString(){
return "\t\t\t\""+fileName+"\", // "+trainSetSize+","+testSetSize+","+seriesLength+","+nosClasses;
}
@Override
public int compareTo(MetaData o) {
return seriesLength-o.seriesLength;
}
public static class CompareByTrain implements Comparator<MetaData>{
@Override
public int compare(MetaData a, MetaData b) {
return a.trainSetSize-b.trainSetSize;
}
}
public static class CompareByTrainSetSize implements Comparator<MetaData>{
@Override
public int compare(MetaData a, MetaData b) {
return a.trainSetSize-b.trainSetSize;
}
}
public static class CompareByClasses implements Comparator<MetaData>{
@Override
public int compare(MetaData a, MetaData b) {
return a.nosClasses-b.nosClasses;
}
}
public static class CompareByTotalSize implements Comparator<MetaData>{
@Override
public int compare(MetaData a, MetaData b) {
return a.seriesLength*a.trainSetSize-b.seriesLength*b.trainSetSize;
}
}
}
public static void dataDescription(){
//Produce summary descriptions
OutFile f=new OutFile(dropboxPath+"DataDimensions.csv");
MetaData[] all=new MetaData[fileNames.length];
try{
for(int i=0;i<fileNames.length;i++){
Instances test=ClassifierTools.loadData(dropboxPath+fileNames[i]+"\\"+fileNames[i]+"_TEST");
Instances train=ClassifierTools.loadData(dropboxPath+fileNames[i]+"\\"+fileNames[i]+"_TRAIN");
Instances allData =new Instances(test);
for(int j=0;j<train.numInstances();j++)
allData.add(train.instance(j));
allData.randomize(new Random());
OutFile combo=new OutFile(dropboxPath+fileNames[i]+"\\"+fileNames[i]+".arff");
combo.writeString(allData.toString());
f.writeLine("\t\t\t\""+fileNames[i]+"\", // "+train.numInstances()+","+test.numInstances()+","+(train.numAttributes()-1)+","+train.numClasses());
all[i]=new MetaData(fileNames[i],train.numInstances(),test.numInstances(),test.numAttributes()-1,test.numClasses());
}
}catch(Exception e){
System.out.println(" ERRROR"+e);
}
Arrays.sort(all);
f=new OutFile(dropboxPath+"DataDimensionsBySeriesLength.csv");
for(MetaData m: all)
f.writeLine(m.toString());
Arrays.sort(all, new MetaData.CompareByTrain());
f=new OutFile(dropboxPath+"DataDimensionsByTrainSize.csv");
for(MetaData m: all)
f.writeLine(m.toString());
Arrays.sort(all, new MetaData.CompareByClasses());
f=new OutFile(dropboxPath+"DataDimensionsByNosClasses.csv");
for(MetaData m: all)
f.writeLine(m.toString());
Arrays.sort(all, new MetaData.CompareByTotalSize());
f=new OutFile(dropboxPath+"DataDimensionsByTotalSize.csv");
for(MetaData m: all)
f.writeLine(m.toString());
}
public static Classifier[] setSingleClassifiers(ArrayList<String> names){
ArrayList<Classifier> sc2=new ArrayList<>();
sc2.add(new kNN(1));
names.add("NN");
Classifier c;
// c=new DTW_kNN(1);
// ((DTW_kNN)c).setMaxR(0.1);
// ((DTW_kNN)c).optimiseWindow(false);
// sc2.add(c);
// names.add("NNDTW");
sc2.add(new NaiveBayes());
names.add("NB");
sc2.add(new J48());
names.add("C45");
c=new SMO();
PolyKernel kernel = new PolyKernel();
kernel.setExponent(1);
((SMO)c).setKernel(kernel);
sc2.add(c);
names.add("SVML");
c=new SMO();
kernel = new PolyKernel();
kernel.setExponent(2);
((SMO)c).setKernel(kernel);
sc2.add(c);
names.add("SVMQ");
c=new RandomForest();
((RandomForest)c).setNumTrees(30);
sc2.add(c);
names.add("RandF30");
c=new RandomForest();
((RandomForest)c).setNumTrees(100);
sc2.add(c);
names.add("RandF100");
c=new RotationForest();
sc2.add(c);
names.add("RotF30");
Classifier[] sc=new Classifier[sc2.size()];
for(int i=0;i<sc.length;i++)
sc[i]=sc2.get(i);
return sc;
}
public static Classifier[] setSimpleClassifiers(ArrayList<String> names){
ArrayList<Classifier> sc2=new ArrayList<>();
sc2.add(new kNN(1));
names.add("NN");
Classifier c;
c=new DTW_kNN(1);
((DTW_kNN)c).setMaxR(1);
((DTW_kNN)c).optimiseWindow(false);
// sc2.add(c);
// names.add("NNDTW");
// sc2.add(new NaiveBayes());
// names.add("NB");
sc2.add(new J48());
names.add("C45");
// c=new SMO();
// PolyKernel kernel = new PolyKernel();
// kernel.setExponent(1);
// ((SMO)c).setKernel(kernel);
// sc2.add(c);
// names.add("SVML");
Classifier[] sc=new Classifier[sc2.size()];
for(int i=0;i<sc.length;i++)
sc[i]=sc2.get(i);
return sc;
}
//Method to apply a BatchFilter to a Instances
public static double assessFilter(Instances train, Instances test, SimpleBatchFilter s, Classifier c){
double a=0;
try{
// Instances trainNew=s.process(train);
// Instances testNew=s.process(test);
s.setInputFormat(train);
Instances trainNew=Filter.useFilter(train, s);
s.setInputFormat(test);
Instances testNew=Filter.useFilter(test, s);
c.buildClassifier(trainNew);
a=ClassifierTools.accuracy(testNew,c);
}catch(Exception e){
System.out.println("\n Error: ="+e);
e.printStackTrace();
System.exit(0);
}
return a;
}
public static void formatUWave(){
Instances x=ClassifierTools.loadData("C:\\Users\\ajb\\Dropbox\\TSC Problems\\UWaveGestureLibrary_X\\UWaveGestureLibrary_X_TEST");
Instances y=ClassifierTools.loadData("C:\\Users\\ajb\\Dropbox\\TSC Problems\\UWaveGestureLibrary_Y\\UWaveGestureLibrary_Y_TEST");
Instances z=ClassifierTools.loadData("C:\\Users\\ajb\\Dropbox\\TSC Problems\\UWaveGestureLibrary_Z\\UWaveGestureLibrary_Z_TEST");
//TEST
x.setClassIndex(-1);
x.deleteAttributeAt(x.numAttributes()-1);
y.setClassIndex(-1);
y.deleteAttributeAt(y.numAttributes()-1);
Instances all=Instances.mergeInstances(x,Instances.mergeInstances(y,z));
OutFile of=new OutFile("C:\\Users\\ajb\\Dropbox\\TSC Problems\\UWaveGestureLibraryAll\\UWaveGestureLibraryAll_TEST.arff");
of.writeLine(all.toString());
//TRAIN
Instances z2=ClassifierTools.loadData("C:\\Users\\ajb\\Dropbox\\TSC Problems\\UWaveGestureLibrary_Z\\UWaveGestureLibrary_Z_TRAIN");
Instances x2=ClassifierTools.loadData("C:\\Users\\ajb\\Dropbox\\TSC Problems\\UWaveGestureLibrary_X\\UWaveGestureLibrary_X_TRAIN");
Instances y2=ClassifierTools.loadData("C:\\Users\\ajb\\Dropbox\\TSC Problems\\UWaveGestureLibrary_Y\\UWaveGestureLibrary_Y_TRAIN");
x2.setClassIndex(-1);
x2.deleteAttributeAt(x2.numAttributes()-1);
y2.setClassIndex(-1);
y2.deleteAttributeAt(y2.numAttributes()-1);
Instances all2=Instances.mergeInstances(x2,Instances.mergeInstances(y2,z2));
OutFile of2=new OutFile("C:\\Users\\ajb\\Dropbox\\TSC Problems\\UWaveGestureLibraryAll\\UWaveGestureLibraryAll_TRAIN.arff");
of2.writeLine(all2.toString());
}
}