Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
 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)
Exemplo n.º 5
0
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
Exemplo n.º 7
0
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
Exemplo n.º 9
0
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