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." )
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.")
def testNoWinningLabels(self): """Inferring 0/4 classes should return 0 winning labels.""" model = ClassificationModel() inferenceResult = numpy.array([0, 0, 0, 0]) topLabels = model.getWinningLabels(inferenceResult) self.assertFalse(topLabels)
def testNoWinningLabels(self): """Inferring 0/4 classes should return 0 winning labels.""" model = ClassificationModel() inferenceResult = numpy.array([0, 0, 0, 0]) topLabels = model.getWinningLabels(inferenceResult) self.assertFalse(topLabels)
def testCalculateAccuracyMultipleSamples(self): """ Tests testCalculateAccuracy() method of classification model base class for three test samples. """ model = ClassificationModel() actualLabels = [numpy.array([0]), numpy.array([0, 2]), numpy.array([0, 1, 2])] predictedLabels = [numpy.array([0]), [None], numpy.array([1, 2, 0])] classifications = [predictedLabels, actualLabels] self.assertAlmostEqual(model.calculateAccuracy(classifications), float(2) / 3)
def testCalculateAccuracyMultipleSamples(self): """ Tests testCalculateAccuracy() method of classification model base class for three test samples. """ model = ClassificationModel() actualLabels = [ numpy.array([0]), numpy.array([0, 2]), numpy.array([0, 1, 2]) ] predictedLabels = [numpy.array([0]), [None], numpy.array([1, 2, 0])] classifications = [predictedLabels, actualLabels] self.assertAlmostEqual(model.calculateAccuracy(classifications), float(2) / 3)
def testCalculateAccuracyMixedSamples(self): """ Tests testCalculateAccuracy() method of classification model base class for test samples with mixed classifications. """ model = ClassificationModel() actualLabels = [numpy.array([0, 1, 2])] predictedLabels1 = [numpy.array([1, 2, 0])] predictedLabels2 = [numpy.array([1])] predictedLabels3 = [None] classifications1 = [predictedLabels1, actualLabels] classifications2 = [predictedLabels2, actualLabels] classifications3 = [predictedLabels3, actualLabels] self.assertAlmostEqual(model.calculateAccuracy(classifications1), 1.0) self.assertAlmostEqual(model.calculateAccuracy(classifications2), float(1) / 3) self.assertAlmostEqual(model.calculateAccuracy(classifications3), 0.0)
def testCalculateAccuracyMixedSamples(self): """ Tests testCalculateAccuracy() method of classification model base class for test samples with mixed classifications. """ model = ClassificationModel() actualLabels = [numpy.array([0, 1, 2])] predictedLabels1 = [numpy.array([1, 2, 0])] predictedLabels2 = [numpy.array([1])] predictedLabels3 = [None] classifications1 = [predictedLabels1, actualLabels] classifications2 = [predictedLabels2, actualLabels] classifications3 = [predictedLabels3, actualLabels] self.assertAlmostEqual(model.calculateAccuracy(classifications1), 1.0) self.assertAlmostEqual(model.calculateAccuracy(classifications2), float(1) / 3) self.assertAlmostEqual(model.calculateAccuracy(classifications3), 0.0)
def testWinningLabels(self): """ Tests whether classification base class returns multiple labels correctly. """ model = ClassificationModel() inferenceResult = numpy.array([3, 1, 4, 0, 1, 0]) topLabels = model.getWinningLabels(inferenceResult, numLabels=1) self.assertTrue(numpy.allclose(topLabels, numpy.array([2])), "Output should be label 2.") topLabels = model.getWinningLabels(inferenceResult, numLabels=2) self.assertTrue(numpy.allclose(topLabels, numpy.array([2, 0])), "Output should be labels 2 and 0.") # Test only nonzero labels are returned. inferenceResult = numpy.array([3, 0, 4, 0, 0, 0]) topLabels = model.getWinningLabels(inferenceResult, numLabels=5) self.assertTrue(numpy.allclose(topLabels, numpy.array([2, 0])), "Output should be labels 2 and 0.")
def testWinningLabels(self): """ Tests whether classification base class returns multiple labels correctly. """ model = ClassificationModel() inferenceResult = numpy.array([3, 1, 4, 0, 1, 0]) topLabels = model.getWinningLabels(inferenceResult, numLabels=1) self.assertTrue(numpy.allclose(topLabels, numpy.array([2])), "Output should be label 2.") topLabels = model.getWinningLabels(inferenceResult, numLabels=2) self.assertTrue(numpy.allclose(topLabels, numpy.array([2, 0])), "Output should be labels 2 and 0.") # Test only nonzero labels are returned. inferenceResult = numpy.array([3, 0, 4, 0, 0, 0]) topLabels = model.getWinningLabels(inferenceResult, numLabels=5) self.assertTrue(numpy.allclose(topLabels, numpy.array([2, 0])), "Output should be labels 2 and 0.")
def testWinningLabels(self): """ Tests whether classification base class returns multiple labels correctly. """ model = ClassificationModel() inferenceResult = numpy.array([3, 1, 4, 0, 1, 0]) topLabels = model.getWinningLabels(inferenceResult, numLabels=1) self.assertTrue(numpy.allclose(topLabels, numpy.array([2])), "Output should be label 2.") topLabels = model.getWinningLabels(inferenceResult, numLabels=2) self.assertTrue(numpy.allclose(topLabels, numpy.array([2, 0])), "Output should be labels 2 and 0.") # Test tie is broken by the later index; label 4 beats out label 1. topLabels = model.getWinningLabels(inferenceResult, numLabels=3) self.assertTrue(numpy.allclose(topLabels, numpy.array([2, 0, 4])), "Output should be labels 2, 0, and 1.") # Test only nonzero labels are returned. topLabels = model.getWinningLabels(inferenceResult, numLabels=5) self.assertTrue(numpy.allclose(topLabels, numpy.array([2, 0, 4, 1])), "Output should be labels 2, 0, 1, and 4.")