def readCommand( argv ): "Processes the command used to run from the command line." from optparse import OptionParser parser = OptionParser(USAGE_STRING) parser.add_option('-c', '--classifier', help=default('The type of classifier'), choices=['1vr', '1v1', 'mira'], default='1vr') parser.add_option('-t', '--training', help=default('The size of the training set'), default=TRAIN_SET_SIZE, type="int") parser.add_option('-f', '--features', help=default('Whether to use enhanced features'), default=False, action="store_true") parser.add_option('-a', '--autotune', help=default("Whether to automatically tune hyperparameters"), default=False, action="store_true") parser.add_option('-i', '--iterations', help=default("Maximum iterations to run training"), default=3, type="int") parser.add_option('-s', '--test', help=default("Amount of test data to use"), default=TEST_SET_SIZE, type="int") parser.add_option('-v', '--validate', help=default("Whether to validate when training (for graphs)"), default=False, action="store_true") parser.add_option('-d', '--dataset', help=default("Specifies the data set to use"), choices=['d1', 'd2'], default='d1') parser.add_option('-k', '--classes', help=default("Specifies the number of classes"), default=10, type="int") options, otherjunk = parser.parse_args(argv) if len(otherjunk) != 0: raise Exception('Command line input not understood: ' + str(otherjunk)) args = {} # Set up variables according to the command line input. print "Doing classification" print "--------------------" print "classifier:\t\t" + options.classifier print "using enhanced features?:\t" + str(options.features) print "training set size:\t" + str(options.training) if (options.features): featureFunction = enhancedFeatureExtractorDigit else: featureFunction = basicFeatureExtractorDigit legalLabels = range(options.classes) if options.training <= 0: print "Training set size should be a positive integer (you provided: %d)" % options.training print USAGE_STRING sys.exit(2) if(options.classifier == "1vr"): classifier = perceptron1vr.Perceptron1vrClassifier(legalLabels,options.iterations) elif(options.classifier == "1v1"): classifier = perceptron1v1.Perceptron1v1Classifier(legalLabels, options.iterations) elif(options.classifier == 'mira'): classifier = mira.MiraClassifier(legalLabels, options.iterations) else: print "Unknown classifier:", options.classifier print USAGE_STRING sys.exit(2) args['classifier'] = classifier args['featureFunction'] = featureFunction return args, options
def runTask(task): print("Grading task " + str(task)) if task == 2 or task == 5: print( "This is a manually graded task, write your answers in the pdf file" ) elif task == 1: print("The solution cannot be exposed to you now. :)") elif task == 3: print("Ungraded task") else: if task == 6: numTraining = 800 numTest = 200 num_classes = 4 else: numTraining = dataClassifier.TRAIN_SET_SIZE numTest = dataClassifier.TEST_SET_SIZE num_classes = 10 if task == 6: rawTrainingData = samples.loadDataFile("data/D2/training_data", numTraining) trainingLabels = samples.loadLabelsFile("data/D2/training_labels", numTraining) rawTestData = samples.loadDataFile("data/D2/test_data", numTest) testLabels = samples.loadLabelsFile("data/D2/test_labels", numTest) featureFunction = dataClassifier.enhancedFeatureExtractorDigit else: rawTrainingData = samples.loadDataFile("data/D1/training_data", numTraining) trainingLabels = samples.loadLabelsFile("data/D1/training_labels", numTraining) rawTestData = samples.loadDataFile("data/D1/test_data", numTest) testLabels = samples.loadLabelsFile("data/D1/test_labels", numTest) featureFunction = dataClassifier.basicFeatureExtractorDigit legalLabels = range(num_classes) classifier = perceptron1vr.Perceptron1vrClassifier(legalLabels, 3) # Extract features print("Extracting features...") trainingData = map(featureFunction, rawTrainingData) testData = map(featureFunction, rawTestData) # Conduct training and testing print("Training...") classifier.train(trainingData, trainingLabels, testData, testLabels, False) print("Testing...") guesses = classifier.classify(testData) correct = [ guesses[i] == testLabels[i] for i in range(len(testLabels)) ].count(True) acc = 100 * correct / (1.0 * (len(testLabels))) if task == 4: marks = 0 if (acc > 70): marks = 3 elif (acc > 60): marks = 2 elif (acc > 50): marks = 1 print("Received Marks : " + str(marks) + "/3") elif task == 6: marks = 0 print(acc) if len(testData[0]) <= 5: if (acc > 85): marks = 3 elif (acc > 65): marks = 2 elif (acc > 45): marks = 1 else: print("More than permissible features used") print("Received Marks : " + str(marks) + "/3") print("--------------------------------------------------------")
def runTask(task): print "Grading task " + str(task) if task == 2: print "This is a manually graded task, write your answers in the answers.txt file" else: if task == 4: numTraining = 800 numTest = 200 num_classes = 4 else: numTraining = dataClassifier.TRAIN_SET_SIZE numTest = dataClassifier.TEST_SET_SIZE num_classes = 10 if task == 4: rawTrainingData = samples.loadDataFile("data/D2/training_data", numTraining) trainingLabels = samples.loadLabelsFile("data/D2/training_labels", numTraining) rawTestData = samples.loadDataFile("data/D2/test_data", numTest) testLabels = samples.loadLabelsFile("data/D2/test_labels", numTest) featureFunction = dataClassifier.enhancedFeatureExtractorDigit else: rawTrainingData = samples.loadDataFile("data/D1/training_data", numTraining) trainingLabels = samples.loadLabelsFile("data/D1/training_labels", numTraining) rawTestData = samples.loadDataFile("data/D1/test_data", numTest) testLabels = samples.loadLabelsFile("data/D1/test_labels", numTest) featureFunction = dataClassifier.basicFeatureExtractorDigit legalLabels = range(num_classes) if task == 3: classifier = perceptron1v1.Perceptron1v1Classifier(legalLabels, 3) else: classifier = perceptron1vr.Perceptron1vrClassifier(legalLabels, 3) # Extract features print "Extracting features..." trainingData = map(featureFunction, rawTrainingData) testData = map(featureFunction, rawTestData) # Conduct training and testing print "Training..." classifier.train(trainingData, trainingLabels, testData, testLabels, False) print "Testing..." guesses = classifier.classify(testData) correct = [ guesses[i] == testLabels[i] for i in range(len(testLabels)) ].count(True) acc = 100 * correct / (1.0 * (len(testLabels))) if task == 1: marks = 0 if (acc > 70): marks = 3 elif (acc > 60): marks = 2 elif (acc > 50): marks = 1 print "Received Marks : " + str(marks) + "/3" elif task == 3: marks = 0 if (acc > 75): marks = 3 elif (acc > 65): marks = 2 elif (acc > 55): marks = 1 print "Received Marks : " + str( marks) + "/3\n Please complete the written task 3.1 as well" elif task == 4: marks = 0 if len(testData[0]) <= 5: if (acc > 85): marks = 3 elif (acc > 65): marks = 2 elif (acc > 45): marks = 1 else: print "More than permissible features used" print "Received Marks : " + str(marks) + "/3" print "--------------------------------------------------------"