package org.cglr.fsdc; import tr.gov.ulakbim.jDenetX.classifiers.HoeffdingOptionTreeNB; import tr.gov.ulakbim.jDenetX.classifiers.HoeffdingOptionTreeNBAdaptive; import tr.gov.ulakbim.jDenetX.classifiers.HoeffdingTreeNBAdaptive; import tr.gov.ulakbim.jDenetX.options.ClassOption; import weka.classifiers.meta.MOA; import weka.core.Instance; import weka.core.Instances; import weka.core.converters.ArffLoader; import weka.core.converters.ConverterUtils.DataSource; import java.io.File; import java.io.IOException; public class Test { //private static ArffLoader loader; public static DataSource getDataSource(String fileName) throws Exception { DataSource source = new DataSource(fileName); return source; } public static Instances getInstances(String fileName) throws Exception { DataSource source = getDataSource(fileName); Instances data = source.getDataSet(); return data; } public static ArffLoader getLoader(String fileName) throws IOException { ArffLoader loader = new ArffLoader(); loader.setFile(new File(fileName)); return loader; } public static Instances loadData(String fileName) throws IOException { // load data ArffLoader loader = getLoader(fileName); Instances structure = loader.getStructure(); structure.setClassIndex(structure.numAttributes() - 1); return structure; } public static void test1() throws Exception { System.out.println("======================="); System.out.println("Starting test1"); HoeffdingOptionTreeNBAdaptive hotNBAdap = new HoeffdingOptionTreeNBAdaptive(); //hotNBAdap.splitCriterionOption(ClassOption.) String trainingFile = "/home/caglar/Documents/Datasets/GN3_TrafficClassification/gtvs/Day1.TCP.arff"; String testFile = "/home/caglar/Documents/Datasets/GN3_TrafficClassification/gtvs/Day2.TCP.arff"; //Instances training = loadData(trainingFile); int i = 0; Instance current; //ArffLoader trainingLoader = getLoader(trainingFile); MOA moa = new MOA(); ClassOption classifierOption = new ClassOption("classOption", 'c', "classifier_to_use", HoeffdingOptionTreeNBAdaptive.class, "HoeffdingOptionTreeNBAdaptive"); moa.setClassifier(classifierOption); //System.out.println(moa.listOptions()); //System.out.println(classifierOption.getRequiredType()); /*ArffLoader trainingLoader = new ArffLoader(); trainingLoader.setFile(new File(trainingFile)); Instances trainingStructure = trainingLoader.getStructure(); trainingStructure.setClassIndex(trainingStructure.numAttributes() - 1);*/ Instances trainingStructure = getInstances(trainingFile); trainingStructure.setClassIndex(trainingStructure.numAttributes() - 1); System.out.println("Number of instances " + trainingStructure.numInstances()); moa.buildClassifier(trainingStructure); //IntOption gracePeriodOption = new IntOption(); //System.out.println(trainingLoader.getNextInstance(trainingStructure)); /*hotNBAdap.splitCriterionOption = new ClassOption("splitCriterion", 's', "Split criterion to use.", SplitCriterion.class, "InfoGainSplitCriterion"); while((current = (Instance) trainingLoader.getNextInstance(trainingStructure)) != null){ System.out.println( "Index is: " + i + "\n" ); //System.out.println(current.toString()); hotNBAdap.trainOnInstanceImpl(current); i++; }*/ ArffLoader testLoader = new ArffLoader(); testLoader.setFile(new File(testFile)); Instances testStructure = testLoader.getStructure(); testStructure.setClassIndex(testStructure.numAttributes() - 1); double category = 0.0; int correctlyClassified = 0; int totalNumberOfInstances = 0; double ratio = 0.0; while ((current = (Instance) testLoader.getNextInstance(testStructure)) != null) { category = moa.classifyInstance(current); //System.out.println("Current Class index: "+current.classValue()); //System.out.println("Classified class: "+category); if (category == current.classValue()) { correctlyClassified++; } totalNumberOfInstances++; } ratio = ((double) correctlyClassified / (double) totalNumberOfInstances) * 100; System.out.println("No of Correctly classified " + correctlyClassified); System.out.println("No of instances " + totalNumberOfInstances); System.out.println("Ratio is " + ratio); } public static void test2() throws Exception { System.out.println("======================="); System.out.println("Starting test2"); String trainingFile = "/home/caglar/Documents/Datasets/GN3_TrafficClassification/gtvs/Day1.TCP.arff"; String testFile = "/home/caglar/Documents/Datasets/GN3_TrafficClassification/gtvs/Day2.TCP.arff"; Instance current; MOA moa = new MOA(); ClassOption classifierOption = new ClassOption("classOption", 'c', "classifier_to_use", HoeffdingTreeNBAdaptive.class, "HoeffdingTreeNBAdaptive"); moa.setClassifier(classifierOption); Instances trainingStructure = getInstances(trainingFile); trainingStructure.setClassIndex(trainingStructure.numAttributes() - 1); System.out.println("Number of instances " + trainingStructure.numInstances()); moa.buildClassifier(trainingStructure); ArffLoader testLoader = new ArffLoader(); testLoader.setFile(new File(testFile)); Instances testStructure = testLoader.getStructure(); testStructure.setClassIndex(testStructure.numAttributes() - 1); double category = 0.0; int correctlyClassified = 0; int totalNumberOfInstances = 0; double ratio = 0.0; while ((current = (Instance) testLoader.getNextInstance(testStructure)) != null) { category = moa.classifyInstance(current); if (category == current.classValue()) { correctlyClassified++; } totalNumberOfInstances++; } ratio = ((double) correctlyClassified / (double) totalNumberOfInstances) * 100; System.out.println("No of Correctly classified " + correctlyClassified); System.out.println("No of instances " + totalNumberOfInstances); System.out.println("Ratio is " + ratio); } public static void test3() throws Exception { System.out.println("======================="); System.out.println("Starting test3\n"); String trainingFile = "/home/caglar/Documents/Datasets/GN3_TrafficClassification/gtvs/Day1.TCP.arff"; String testFile = "/home/caglar/Documents/Datasets/GN3_TrafficClassification/gtvs/Day2.TCP.arff"; Instance current; MOA moa = new MOA(); ClassOption classifierOption = new ClassOption("classOption", 'c', "classifier_to_use", HoeffdingOptionTreeNB.class, "HoeffdingOptionTreeNB"); moa.setClassifier(classifierOption); Instances trainingStructure = getInstances(trainingFile); trainingStructure.setClassIndex(trainingStructure.numAttributes() - 1); System.out.println("Number of instances " + trainingStructure.numInstances()); moa.buildClassifier(trainingStructure); ArffLoader testLoader = new ArffLoader(); testLoader.setFile(new File(testFile)); Instances testStructure = testLoader.getStructure(); testStructure.setClassIndex(testStructure.numAttributes() - 1); double category = 0.0; int correctlyClassified = 0; int totalNumberOfInstances = 0; double ratio = 0.0; while ((current = (Instance) testLoader.getNextInstance(testStructure)) != null) { category = moa.classifyInstance(current); if (category == current.classValue()) { correctlyClassified++; } totalNumberOfInstances++; } ratio = ((double) correctlyClassified / (double) totalNumberOfInstances) * 100; System.out.println("No of Correctly classified " + correctlyClassified); System.out.println("No of instances " + totalNumberOfInstances); System.out.println("Ratio is " + ratio); } public static void main(String args[]) { try { test1(); } catch (Exception e) { e.printStackTrace(); } } }