def testClassificationAccuracy(self): """Test classification accuracy for sensor data.""" networkConfigurations = generateSampleNetworkConfig( self.templateNetworkConfig, NUM_CATEGORIES) for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for signalPeriod in SIGNAL_PERIODS: sensorType = networkConfig["sensorRegionConfig"].get( "regionType") spEnabled = networkConfig["sensorRegionConfig"].get( "regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig["classifierRegionConfig"].get( "regionType") expParams = ("RUNNING EXPERIMENT WITH PARAMS:\n" " * numRecords=%s\n" " * signalAmplitude=%s\n" " * signalMean=%s\n" " * signalPeriod=%s\n" " * noiseAmplitude=%s\n" " * sensorType=%s\n" " * spEnabled=%s\n" " * tmEnabled=%s\n" " * tpEnabled=%s\n" " * classifierType=%s\n" ) % (NUM_RECORDS, signalAmplitude, signalMean, signalPeriod, noiseAmplitude, sensorType.split(".")[1], spEnabled, tmEnabled, upEnabled, classifierType.split(".")[1]) print expParams inputFile = generateSensorData(DATA_DIR, OUTFILE_NAME, signalMean, signalPeriod, SEQUENCE_LENGTH, NUM_RECORDS, signalAmplitude, NUM_CATEGORIES, noiseAmplitude) inputFile="mu/right_test.csv" classifier = HTMClassifier(networkConfig, inputFile, CATEGORIES) minval, maxval = classifier.initialize() points = [] classifier2 = HTMClassifier(networkConfig, inputFile, CATEGORIES) classifier2.initialize() net = classifier.network sensorRegion = net.regions["sensor"] classifierRegion = net.regions["classifier"] with open(inputFile, 'rb') as csvfile: reader = csv.reader(csvfile) reader.next() reader.next() reader.next() numCorrect = 0 numCorrect2 = 0 numRecords = 0 for row in reader: timestamp = row[0] inputData = float(row[1]) points.append(inputData) target = int(row[2]) result = classifier.start(inputData, target, learning_is_on=False) sensorRegion.setParameter("useDataSource", True) net.run(1) result2 = CATEGORIES[int(_getClassifierInference( classifierRegion))] if result2 != result: print "numRecords = %s" % numRecords print "target = %s" % target print "result = %s" % result print "result2 = %s" % result2 if int(result) == int(target): if numRecords > START_TEST: numCorrect += 1 if int(result2) == int(target): if numRecords > START_TEST: numCorrect2 += 1 numRecords += 1 classificationAccuracy = round(100.0 * numCorrect / ( numRecords - START_TEST), 2) classificationAccuracy2 = round(100.0 * numCorrect / ( numRecords - START_TEST), 2) print classificationAccuracy print classificationAccuracy2 import numpy as np bins = np.linspace(0, 1, 10) histogram = np.histogram(np.array(points), bins) if (noiseAmplitude == 0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == KNN_CLASSIFIER_TYPE and spEnabled and tmEnabled and not upEnabled): self.assertEqual(classificationAccuracy, 100.00) elif (noiseAmplitude == 0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and tmEnabled and not upEnabled): self.assertEqual(classificationAccuracy, 100.00) elif (noiseAmplitude == 0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and not tmEnabled and not upEnabled): self.assertEqual(classificationAccuracy, 100.00) elif (noiseAmplitude == 1.0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and tmEnabled and not upEnabled): # using AlmostEqual until the random bug issue is fixed self.assertAlmostEqual(classificationAccuracy, 80, delta=5) elif (noiseAmplitude == 1.0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and not tmEnabled and not upEnabled): # using AlmostEqual until the random bug issue is fixed self.assertAlmostEqual(classificationAccuracy, 81, delta=5)
if __name__ == "__main__": dataSource = FileRecordStream(streamID="backup/training-data-attention.csv") network = configureNetwork(dataSource, _CONFIG) setNetworkLearningMode(network, _REGION_NAMES, True) sensorRegion = network.regions[ _CONFIG["sensorRegionConfig"].get("regionName")] classifierRegion = network.regions[ _CONFIG["classifierRegionConfig"].get("regionName")] num_correct = 0.0 for row_id in range(_NUM_RECORDS * _NUM_CATEGORIES): network.run(1) actualValue = sensorRegion.getOutputData("categoryOut")[0] inferredCategory = _getClassifierInference(classifierRegion) if int(inferredCategory) == int(actualValue): num_correct += 1 # headers = ["x", "y", "label"] # readers = {category: None for category in range(_NUM_CATEGORIES)} # for category in range(_NUM_CATEGORIES): # csvFile = open(_INPUT_FILES[category], "rb") # reader = csv.reader(csvFile) # # skip 3 header rows # reader.next() # reader.next() # reader.next() # readers[category] = reader #