コード例 #1
0
    def testClassifyKeywordsSingleAndMultiClass(self):
        """Tests simple classification with multiple labels for Keywords model."""
        model = ClassificationModelKeywords()

        samples = {
            0: (["Pickachu"], numpy.array([0, 2, 2])),
            1: (["Eevee"], numpy.array([2])),
            2: (["Charmander"], numpy.array([0, 1, 1])),
            3: (["Abra"], numpy.array([1])),
            4: (["Squirtle"], numpy.array([1, 0, 1])),
        }

        patterns = model.encodeSamples(samples)
        for i in xrange(len(samples)):
            model.trainModel(i)

        output = [model.testModel(i) for i in xrange(len(patterns))]

        self.assertSequenceEqual(output[0].tolist(), [2, 0], "Incorrect output for first sample.")
        self.assertSequenceEqual(output[1].tolist(), [2], "Incorrect output for second sample.")
        self.assertSequenceEqual(output[2].tolist(), [1, 0], "Incorrect output for third sample.")
        self.assertSequenceEqual(output[3].tolist(), [1], "Incorrect output for fourth sample.")

        # Test the order of class labels doesn't matter when training.
        self.assertTrue(numpy.allclose(output[2], output[4]), "Outputs for samples 2 and 4 should be identical.")
コード例 #2
0
    def testModelSaveAndLoad(self):
        # Keywords model uses the base class implementations of save/load methods.
        self.modelDir = "poke_model"
        model = ClassificationModelKeywords(modelDir=self.modelDir,
                                            verbosity=0)

        samples = {
            0: (["Pickachu"], numpy.array([0, 2, 2])),
            1: (["Eevee"], numpy.array([2])),
            2: (["Charmander"], numpy.array([0, 1, 1])),
            3: (["Abra"], numpy.array([1])),
            4: (["Squirtle"], numpy.array([1, 0, 1]))
        }

        patterns = model.encodeSamples(samples)
        for i in xrange(len(samples)):
            model.trainModel(i)

        output = [model.testModel(i) for i in xrange(len(patterns))]

        model.saveModel()

        loadedModel = ClassificationModel(verbosity=0).loadModel(self.modelDir)
        loadedModelOutput = [
            loadedModel.testModel(i) for i in xrange(len(patterns))
        ]

        for mClasses, lClasses in zip(output, loadedModelOutput):
            self.assertSequenceEqual(
                mClasses.tolist(), lClasses.tolist(), "Output "
                "classifcations from loaded model don't match original model's."
            )
コード例 #3
0
def createModel(args):
    """
  Return a classification model of the appropriate type. The model could be any
  supported subclass of ClassficationModel based on args.
  """
    if args.modelName == "htm":
        # Instantiate the HTM model
        model = ClassificationModelHTM(networkConfig=getNetworkConfig(
            args.networkConfigPath),
                                       inputFilePath=None,
                                       retina=args.retina,
                                       verbosity=args.verbosity,
                                       numLabels=2,
                                       prepData=False,
                                       modelDir="tempdir")

    elif args.modelName == "keywords":
        # Instantiate the keywords model
        model = ClassificationModelKeywords(verbosity=args.verbosity,
                                            numLabels=2,
                                            k=9,
                                            modelDir="tempdir")

    elif args.modelName == "docfp":
        # Instantiate the document fingerprint model
        model = ClassificationModelDocumentFingerprint(
            verbosity=args.verbosity, retina=args.retina, numLabels=2, k=3)

    else:
        raise RuntimeError("Unknown model type: " + args.modelName)

    return model
コード例 #4
0
    def testModelSaveAndLoad(self):
        # Keywords model uses the base class implementations of save/load methods.
        self.modelDir = "poke_model"
        model = ClassificationModelKeywords(modelDir=self.modelDir, verbosity=0)

        samples = {
            0: (["Pickachu"], numpy.array([0, 2, 2])),
            1: (["Eevee"], numpy.array([2])),
            2: (["Charmander"], numpy.array([0, 1, 1])),
            3: (["Abra"], numpy.array([1])),
            4: (["Squirtle"], numpy.array([1, 0, 1])),
        }

        patterns = model.encodeSamples(samples)
        for i in xrange(len(samples)):
            model.trainModel(i)

        output = [model.testModel(i) for i in xrange(len(patterns))]

        model.saveModel()

        loadedModel = ClassificationModel(verbosity=0).loadModel(self.modelDir)
        loadedModelOutput = [loadedModel.testModel(i) for i in xrange(len(patterns))]

        for mClasses, lClasses in zip(output, loadedModelOutput):
            self.assertSequenceEqual(
                mClasses.tolist(),
                lClasses.tolist(),
                "Output " "classifcations from loaded model don't match original model's.",
            )
コード例 #5
0
    def testClassifyKeywordsSingleAndMultiClass(self):
        """Tests simple classification with multiple labels for Keywords model."""
        model = ClassificationModelKeywords()

        samples = {
            0: (["Pickachu"], numpy.array([0, 2, 2])),
            1: (["Eevee"], numpy.array([2])),
            2: (["Charmander"], numpy.array([0, 1, 1])),
            3: (["Abra"], numpy.array([1])),
            4: (["Squirtle"], numpy.array([1, 0, 1]))
        }

        patterns = model.encodeSamples(samples)
        for i in xrange(len(samples)):
            model.trainModel(i)

        output = [model.testModel(i) for i in xrange(len(patterns))]

        self.assertSequenceEqual(output[0].tolist(), [2, 0],
                                 "Incorrect output for first sample.")
        self.assertSequenceEqual(output[1].tolist(), [2],
                                 "Incorrect output for second sample.")
        self.assertSequenceEqual(output[2].tolist(), [1, 0],
                                 "Incorrect output for third sample.")
        self.assertSequenceEqual(output[3].tolist(), [1],
                                 "Incorrect output for fourth sample.")

        # Test the order of class labels doesn't matter when training.
        self.assertTrue(numpy.allclose(output[2], output[4]),
                        "Outputs for samples 2 and 4 should be identical.")