def __init__( self, trainingData=None, validationData=None, classifierType="perceptron", agentToClone=None, numTraining=3, ): from dataClassifier import (enhancedFeatureExtractorPacman, runClassifier) legalLabels = ["Stop", "West", "East", "North", "South"] if classifierType == "perceptron": classifier = perceptron_pacman.PerceptronClassifierPacman( legalLabels, numTraining ) self.classifier = classifier self.featureFunction = enhancedFeatureExtractorPacman args = { "featureFunction": self.featureFunction, "classifier": self.classifier, "printImage": None, "trainingData": trainingData, "validationData": validationData, "agentToClone": agentToClone, } options = DummyOptions() options.classifier = classifierType runClassifier(args, options)
def __init__(self, trainingData=None, validationData=None, classifierType="perceptron", agentToClone=None, numTraining=3): self.classifier = classifier self.featureFunction = enhancedFeatureExtractorPacman args = {'featureFunction': self.featureFunction, 'classifier':self.classifier, 'printImage':None, 'trainingData':trainingData, 'validationData':validationData, 'agentToClone': agentToClone, } from dataClassifier import runClassifier, enhancedFeatureExtractorPacman legalLabels = ['Stop', 'West', 'East', 'North', 'South'] if(classifierType == "perceptron"): classifier = perceptron_pacman.PerceptronClassifierPacman(legalLabels,numTraining) options = DummyOptions() options.classifier = classifierType runClassifier(args, options)
def __init__(self, trainingData=None, validationData=None, classifierType="perceptron", agentToClone=None, numTraining=3): from dataClassifier import runClassifier, enhancedFeatureExtractorPacman legalLabels = ['Stop', 'West', 'East', 'North', 'South'] didLoadFromFile = False self.classifierType = classifierType if (classifierType == "perceptron"): try: classifier = pickle.load(open("perceptron.pkl", "rb")) print("loaded perceptron from file") didLoadFromFile = True except: # here's the actual perceptron part print("perceptron.pkl not found") classifier = perceptron_pacman.PerceptronClassifierPacman( legalLabels, numTraining) self.classifier = classifier #looks like enhanced Feature extractor is in dataClassifier self.featureFunction = enhancedFeatureExtractorPacman args = { 'featureFunction': self.featureFunction, 'classifier': self.classifier, 'printImage': None, 'trainingData': trainingData, 'validationData': validationData, 'agentToClone': agentToClone, } options = DummyOptions() options.classifier = classifierType runClassifier(args, options, didLoadFromFile=didLoadFromFile) if not didLoadFromFile: pickle.dump(classifier, open("perceptron.pkl", "wb")) print("saving perceptron to file")
def __init__(self, training_data=None, validation_data=None, classifier_type="perceptron", agent_to_clone=None, num_training=3): from data_classifier import run_classifier, enhanced_feature_extractor_pacman legal_labels = ['Stop', 'West', 'East', 'North', 'South'] if (classifier_type == "perceptron"): classifier = perceptron_pacman.PerceptronClassifierPacman( legal_labels, num_training) self.classifier = classifier self.feature_function = enhanced_feature_extractor_pacman args = { 'feature_function': self.feature_function, 'classifier': self.classifier, 'print_image': None, 'training_data': training_data, 'validation_data': validation_data, 'agent_to_clone': agent_to_clone, } options = DummyOptions() options.classifier = classifier_type run_classifier(args, options)
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=[ 'mostFrequent', 'nb', 'naiveBayes', 'perceptron', 'mira', 'minicontest' ], default='mostFrequent') parser.add_option('-d', '--data', help=default('Dataset to use'), choices=['digits', 'faces', 'pacman'], default='digits') parser.add_option('-t', '--training', help=default('The size of the training set'), default=100, type="int") parser.add_option('-f', '--features', help=default('Whether to use enhanced features'), default=False, action="store_true") parser.add_option('-o', '--odds', help=default('Whether to compute odds ratios'), default=False, action="store_true") parser.add_option('-1', '--label1', help=default("First label in an odds ratio comparison"), default=0, type="int") parser.add_option('-2', '--label2', help=default("Second label in an odds ratio comparison"), default=1, type="int") parser.add_option('-w', '--weights', help=default('Whether to print weights'), default=False, action="store_true") parser.add_option( '-k', '--smoothing', help=default("Smoothing parameter (ignored when using --autotune)"), type="float", default=2.0) 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('-g', '--agentToClone', help=default("Pacman agent to copy"), default=None, type="str") 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 "data:\t\t" + options.data print "classifier:\t\t" + options.classifier if not options.classifier == 'minicontest': print "using enhanced features?:\t" + str(options.features) else: print "using minicontest feature extractor" print "training set size:\t" + str(options.training) if (options.data == "digits"): printImage = ImagePrinter(DIGIT_DATUM_WIDTH, DIGIT_DATUM_HEIGHT).printImage if (options.features): featureFunction = enhancedFeatureExtractorDigit else: featureFunction = basicFeatureExtractorDigit if (options.classifier == 'minicontest'): featureFunction = contestFeatureExtractorDigit elif (options.data == "faces"): printImage = ImagePrinter(FACE_DATUM_WIDTH, FACE_DATUM_HEIGHT).printImage if (options.features): featureFunction = enhancedFeatureExtractorFace else: featureFunction = basicFeatureExtractorFace elif (options.data == "pacman"): printImage = None if (options.features): featureFunction = enhancedFeatureExtractorPacman else: featureFunction = basicFeatureExtractorPacman else: print "Unknown dataset", options.data print USAGE_STRING sys.exit(2) if (options.data == "digits"): legalLabels = range(10) else: legalLabels = ['Stop', 'West', 'East', 'North', 'South'] 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.smoothing <= 0: print "Please provide a positive number for smoothing (you provided: %f)" % options.smoothing print USAGE_STRING sys.exit(2) if options.odds: if options.label1 not in legalLabels or options.label2 not in legalLabels: print "Didn't provide a legal labels for the odds ratio: (%d,%d)" % ( options.label1, options.label2) print USAGE_STRING sys.exit(2) if (options.classifier == "mostFrequent"): classifier = mostFrequent.MostFrequentClassifier(legalLabels) elif (options.classifier == "naiveBayes" or options.classifier == "nb"): classifier = naiveBayes.NaiveBayesClassifier(legalLabels) classifier.setSmoothing(options.smoothing) if (options.autotune): print "using automatic tuning for naivebayes" classifier.automaticTuning = True else: print "using smoothing parameter k=%f for naivebayes" % options.smoothing elif (options.classifier == "perceptron"): if options.data != 'pacman': classifier = perceptron.PerceptronClassifier( legalLabels, options.iterations) else: classifier = perceptron_pacman.PerceptronClassifierPacman( legalLabels, options.iterations) elif (options.classifier == "mira"): if options.data != 'pacman': classifier = mira.MiraClassifier(legalLabels, options.iterations) if (options.autotune): print "using automatic tuning for MIRA" classifier.automaticTuning = True else: print "using default C=0.001 for MIRA" elif (options.classifier == 'minicontest'): import minicontest classifier = minicontest.contestClassifier(legalLabels) else: print "Unknown classifier:", options.classifier print USAGE_STRING sys.exit(2) args['agentToClone'] = options.agentToClone args['classifier'] = classifier args['featureFunction'] = featureFunction args['printImage'] = printImage return args, options
def read_command(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=[ 'most_frequent', 'nb', 'naive_bayes', 'perceptron', 'perceptron_numpy', 'logistic', 'minicontest' ], default='most_frequent') parser.add_option('-d', '--data', help=default('Dataset to use'), choices=['digits', 'faces', 'pacman'], default='digits') parser.add_option('-t', '--training', help=default('The size of the training set'), default=100, type="int") parser.add_option('-f', '--features', help=default('Whether to use enhanced features'), default=False, action="store_true") parser.add_option('-o', '--odds', help=default('Whether to compute odds ratios'), default=False, action="store_true") parser.add_option('-1', '--label1', help=default("First label in an odds ratio comparison"), default=0, type="int") parser.add_option('-2', '--label2', help=default("Second label in an odds ratio comparison"), default=1, type="int") parser.add_option('-w', '--weights', help=default('Whether to print weights'), default=False, action="store_true") parser.add_option( '-n', '--num_weights', help=default( "Num Weights to Print (when --weights enabled), default: 100"), default=100, type="int") parser.add_option( '-k', '--smoothing', help=default("Smoothing parameter (ignored when using --autotune)"), type="float", default=2.0) 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('-g', '--agent_to_clone', help=default("Pacman agent to copy"), default=None, type="str") parser.add_option( '-l', '--learning_rates', help=default( "Learning rates to use for gradient descent, can be a comma separated list or single value" ), default=[0.2], type="str", action='callback', callback=learning_rate_callback) 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("data:\t\t" + options.data) print("classifier:\t\t" + options.classifier) if not options.classifier == 'minicontest': print("using enhanced features?:\t" + str(options.features)) else: print("using minicontest feature extractor") print("training set size:\t" + str(options.training)) if (options.data == "digits"): print_image = ImagePrinter(DIGIT_DATUM_WIDTH, DIGIT_DATUM_HEIGHT).print_image if (options.features): feature_function = enhanced_feature_extractor_digit else: feature_function = basic_feature_extractor_digit if (options.classifier == 'minicontest'): feature_function = contest_feature_extractor_digit elif (options.data == "faces"): print_image = ImagePrinter(FACE_DATUM_WIDTH, FACE_DATUM_HEIGHT).print_image if (options.features): feature_function = enhanced_feature_extractor_face else: feature_function = basic_feature_extractor_face elif (options.data == "pacman"): print_image = None if (options.features): feature_function = enhanced_feature_extractor_pacman else: feature_function = basic_feature_extractor_pacman else: print("Unknown dataset", options.data) print(USAGE_STRING) sys.exit(2) if (options.data == "digits"): legal_labels = list(range(10)) else: legal_labels = ['Stop', 'West', 'East', 'North', 'South'] 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.smoothing <= 0: print( "Please provide a positive number for smoothing (you provided: %f)" % options.smoothing) print(USAGE_STRING) sys.exit(2) if options.odds: if options.label1 not in legal_labels or options.label2 not in legal_labels: print("Didn't provide a legal labels for the odds ratio: (%d,%d)" % (options.label1, options.label2)) print(USAGE_STRING) sys.exit(2) if (options.classifier == "most_frequent"): classifier = most_frequent.MostFrequentClassifier(legal_labels) elif (options.classifier == "naive_bayes" or options.classifier == "nb"): classifier = naive_bayes.NaiveBayesClassifier(legal_labels) classifier.set_smoothing(options.smoothing) if (options.autotune): print("using automatic tuning for naivebayes") classifier.automatic_tuning = True else: print("using smoothing parameter k=%f for naivebayes" % options.smoothing) elif (options.classifier == "perceptron"): if options.data != 'pacman': classifier = perceptron.PerceptronClassifier( legal_labels, options.iterations) else: classifier = perceptron_pacman.PerceptronClassifierPacman( legal_labels, options.iterations) elif (options.classifier == "perceptron_numpy"): if options.data != 'pacman': classifier = perceptron_numpy.OptimizedPerceptronClassifier( legal_labels, options.iterations) elif (options.classifier == "logistic"): if options.data != 'pacman': classifier = logistic.SoftmaxClassifier(legal_labels, options.iterations) classifier.learning_rates = options.learning_rates elif (options.classifier == 'minicontest'): import minicontest classifier = minicontest.contest_classifier(legal_labels) else: print("Unknown classifier:", options.classifier) print(USAGE_STRING) sys.exit(2) args['agent_to_clone'] = options.agent_to_clone args['classifier'] = classifier args['feature_function'] = feature_function args['print_image'] = print_image return args, options
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=['perceptron'], default='perceptron') parser.add_option('-d', '--data', help=default('Dataset to use'), choices=['digits', 'pacman'], default='digits') parser.add_option('-t', '--training', help=default('The size of the training set'), default=100, type="int") 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('-g', '--agentToClone', help=default("Pacman agent to copy"), default=None, type="str") 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 "data:\t\t" + options.data print "classifier:\t\t" + options.classifier print "training set size:\t" + str(options.training) if (options.data == "digits"): printImage = ImagePrinter(DIGIT_DATUM_WIDTH, DIGIT_DATUM_HEIGHT).printImage featureFunction = basicFeatureExtractorDigit if (options.classifier == 'minicontest'): featureFunction = contestFeatureExtractorDigit elif (options.data == "pacman"): printImage = None featureFunction = basicFeatureExtractorPacman else: print "Unknown dataset", options.data print USAGE_STRING sys.exit(2) if (options.data == "digits"): legalLabels = range(10) else: legalLabels = ['Stop', 'West', 'East', 'North', 'South'] 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 == "perceptron"): if options.data != 'pacman': classifier = perceptron.PerceptronClassifier( legalLabels, options.iterations) else: classifier = perceptron_pacman.PerceptronClassifierPacman( legalLabels, options.iterations) else: print "Unknown classifier:", options.classifier print USAGE_STRING sys.exit(2) args['agentToClone'] = options.agentToClone args['classifier'] = classifier args['featureFunction'] = featureFunction args['printImage'] = printImage return args, options
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=[ "mostFrequent", "perceptron", ], default="mostFrequent", ) parser.add_option( "-d", "--data", help=default("Dataset to use"), choices=["digits", "faces", "pacman"], default="digits", ) parser.add_option( "-t", "--training", help=default("The size of the training set"), default=100, type="int", ) parser.add_option( "-f", "--features", help=default("Whether to use enhanced features"), default=False, action="store_true", ) parser.add_option( "-o", "--odds", help=default("Whether to compute odds ratios"), default=False, action="store_true", ) parser.add_option( "-1", "--label1", help=default("First label in an odds ratio comparison"), default=0, type="int", ) parser.add_option( "-2", "--label2", help=default("Second label in an odds ratio comparison"), default=1, type="int", ) parser.add_option( "-w", "--weights", help=default("Whether to print weights"), default=False, action="store_true", ) parser.add_option( "-k", "--smoothing", help=default("Smoothing parameter (ignored when using --autotune)"), type="float", default=2.0, ) 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( "-g", "--agentToClone", help=default("Pacman agent to copy"), default=None, type="str", ) 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("data:\t\t" + options.data) print("classifier:\t\t" + options.classifier) print("using enhanced features?:\t" + str(options.features)) print("training set size:\t" + str(options.training)) if options.data == "digits": printImage = ImagePrinter( DIGIT_DATUM_WIDTH, DIGIT_DATUM_HEIGHT ).printImage featureFunction = basicFeatureExtractorDigit elif options.data == "faces": printImage = ImagePrinter( FACE_DATUM_WIDTH, FACE_DATUM_HEIGHT ).printImage if options.features: featureFunction = enhancedFeatureExtractorFace else: featureFunction = basicFeatureExtractorFace elif options.data == "pacman": printImage = None if options.features: featureFunction = enhancedFeatureExtractorPacman else: featureFunction = basicFeatureExtractorPacman else: print("Unknown dataset", options.data) print(USAGE_STRING) sys.exit(2) if options.data == "digits": legalLabels = list(range(10)) else: legalLabels = ["Stop", "West", "East", "North", "South"] 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.smoothing <= 0: print( "Please provide a positive number for smoothing (you provided: %f)" % options.smoothing ) print(USAGE_STRING) sys.exit(2) if options.odds: if ( options.label1 not in legalLabels or options.label2 not in legalLabels ): print( "Didn't provide a legal labels for the odds ratio: (%d,%d)" % (options.label1, options.label2) ) print(USAGE_STRING) sys.exit(2) if options.classifier == "mostFrequent": classifier = mostFrequent.MostFrequentClassifier(legalLabels) elif options.classifier == "perceptron": if options.data != "pacman": classifier = perceptron.PerceptronClassifier( legalLabels, options.iterations ) else: classifier = perceptron_pacman.PerceptronClassifierPacman( legalLabels, options.iterations ) else: print("Unknown classifier:", options.classifier) print(USAGE_STRING) sys.exit(2) args["agentToClone"] = options.agentToClone args["classifier"] = classifier args["featureFunction"] = featureFunction args["printImage"] = printImage return args, options
if(options.classifier == "mostFrequent"): classifier = mostFrequent.MostFrequentClassifier(legalLabels) elif(options.classifier == "naiveBayes" or options.classifier == "nb"): classifier = naiveBayes.NaiveBayesClassifier(legalLabels) classifier.setSmoothing(options.smoothing) if (options.autotune): print "using automatic tuning for naivebayes" classifier.automaticTuning = True else: print "using smoothing parameter k=%f for naivebayes" % options.smoothing elif(options.classifier == "perceptron"): if options.data != 'pacman': classifier = perceptron.PerceptronClassifier(legalLabels,options.iterations) else: classifier = perceptron_pacman.PerceptronClassifierPacman(legalLabels,options.iterations) elif(options.classifier == "mira"): if options.data != 'pacman': classifier = mira.MiraClassifier(legalLabels, options.iterations) if (options.autotune): print "using automatic tuning for MIRA" classifier.automaticTuning = True else: print "using default C=0.001 for MIRA" elif(options.classifier == 'minicontest'): import minicontest classifier = minicontest.contestClassifier(legalLabels) else: print "Unknown classifier:", options.classifier print USAGE_STRING