public static void main(String[] args) throws IOException, Exception { // break into cases for each data set // for congressional, partition into training and test sets int whichDataSet = -1; Scanner in = new Scanner(System.in); String whichMonk = ""; boolean IG = false; int tempIG = -1; // check input parameters try { if (args.length > 3) throw new NumberFormatException(); tempIG = Integer.parseInt(args[0]); whichDataSet = Integer.parseInt(args[1]); // System.out.println(tempIG + " " + whichDataSet); if (args.length < 2 || whichDataSet < 0 || whichDataSet > 2 || tempIG < 0 || tempIG > 1) { throw new NumberFormatException(); } // System.out.println(tempIG + " " + whichDataSet); if (args.length < 3 && whichDataSet == 1) { throw new NumberFormatException(); } // System.out.println(tempIG + "* " + whichDataSet); if (args.length == 3) { int whichMonkInt = Integer.parseInt(args[2]); if (whichMonkInt == 1) whichMonk = "monks-1"; else if (whichMonkInt == 2) whichMonk = "monks-2"; else if (whichMonkInt == 3) whichMonk = "monks-3"; else throw new NumberFormatException(); } if (tempIG == 0) IG = false; else IG = true; } catch (NumberFormatException e) { System.out.println( "ERROR: \n\nUsage: ./run_traditional <IG or GR> <whichDataSet> <whichMonkDataSet> \n" + "IG or GR: (0) for information gain, (1) for gain ratio" + "\nwhichDataSet can be: (0=Congressional, 1=MONK, 2=Mushroom)" + "\nwhichMonkDataSet is only relevant if Monk chosen can be: (1 2 or 3)"); System.exit(1); } // cases for each data set switch (whichDataSet) { case 0: { fileName = "house-votes-84.data"; System.out.println("\n\nRunning data set: " + fileName); parser = new CongressionalInputParser(); outputClasses = parser.initializeOutputClasses(); masterAttributes = parser.initializeMasterAttributesAndValues(); attributes = parser.getAttributesSet(); examples = parser.readExamples(fileName); partitionIntoTestAndTraining(examples); traditionalDecisionTreeBuilder = new GreedyInformationGainDecisionTree( trainingExamples, masterAttributes, attributes, outputClasses, IG); System.out.println("\n\nnumber of congressional Examples: " + examples.size()); break; } case 1: { String fileName1 = whichMonk + ".train"; String fileName2 = whichMonk + ".test"; System.out.println("\n\nRunning data set: " + fileName1); parser = new MonkInputParser(); outputClasses = parser.initializeOutputClasses(); masterAttributes = parser.initializeMasterAttributesAndValues(); attributes = parser.getAttributesSet(); trainingExamples = parser.readExamples(fileName1); testExamples = parser.readExamples(fileName2); traditionalDecisionTreeBuilder = new GreedyInformationGainDecisionTree( trainingExamples, masterAttributes, attributes, outputClasses, IG); System.out.println( "\n\nnumber of monk " + whichMonk + " Examples: " + trainingExamples.size()); break; } case 2: { String fileName1 = "agaricus-lepiota.data"; System.out.println("\n\nRunning data set: " + fileName1); parser = new MushroomInputParser(); outputClasses = parser.initializeOutputClasses(); masterAttributes = parser.initializeMasterAttributesAndValues(); attributes = parser.getAttributesSet(); examples = parser.readExamples(fileName1); // testExamples = parser.readExamples(fileName2); partitionIntoTestAndTraining(examples); traditionalDecisionTreeBuilder = new GreedyInformationGainDecisionTree( trainingExamples, masterAttributes, attributes, outputClasses, IG); System.out.println("\n\nnumber of mushroom Examples: " + examples.size()); break; } } // System.out.println(trainingExamples.get(1).getAttributeList()); finalDecisionTree = traditionalDecisionTreeBuilder.makeDecisionTree(trainingExamples, attributes, null); // System.out.println(finalDecisionTree.toString()); System.out.println("\nTesting the tree on the TRAINING examples..."); tester = new DecisionTreeTester(trainingExamples, masterAttributes, attributes, outputClasses); tester.test(finalDecisionTree); String out = tester.printPerformanceMetrics(); System.out.println(out); System.out.println("\nTesting the tree on the " + testExamples.size() + " TEST examples..."); tester = new DecisionTreeTester(testExamples, masterAttributes, attributes, outputClasses); tester.test(finalDecisionTree); out = tester.printPerformanceMetrics(); System.out.println(out); System.out.println("Successful completion of program"); }