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.")
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