def run(): """ Run classification network(s) on artificial sensor data """ with open("network_config_template.json", "rb") as jsonFile: templateNetworkConfig = json.load(jsonFile) networkConfigurations = generateSampleNetworkConfig( 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) dataSource = FileRecordStream(streamID=inputFile) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions( networkConfig, NUM_RECORDS) trainNetwork(network, networkConfig, partitions, NUM_RECORDS)
def run(): """ Run classification network(s) on artificial sensor data """ if USE_JSON_CONFIG: with open('config/network_configs.json', 'rb') as fr: networkConfigurations = json.load(fr) else: with open("config/network_config_template.json", "rb") as jsonFile: templateNetworkConfig = json.load(jsonFile) networkConfigurations = generateSampleNetworkConfig(templateNetworkConfig, NUM_CATEGORIES) headers = ['numRecords', 'seqLength', 'numClasses', 'signalAmplitude', 'signalMean', 'signalPeriod', 'noiseAmplitude', 'spEnabled', 'tmEnabled', 'tpEnabled', 'classifierType', 'classificationAccuracy'] with open(RESULTS_FILE, 'wb') as fw: writer = csv.writer(fw) writer.writerow(headers) t = PrettyTable(headers) 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: spEnabled = networkConfig["sensorRegionConfig"].get( "regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig["classifierRegionConfig"].get( "regionType") inputFile = generateSensorData(DATA_DIR, OUTFILE_NAME, signalMean, signalPeriod, SEQUENCE_LENGTH, NUM_RECORDS, signalAmplitude, NUM_CATEGORIES, noiseAmplitude) dataSource = FileRecordStream(streamID=inputFile) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions(networkConfig, NUM_RECORDS) classificationAccuracy = trainNetwork(network, networkConfig, partitions, NUM_RECORDS, VERBOSITY) results = [NUM_RECORDS, SEQUENCE_LENGTH, NUM_CATEGORIES, signalAmplitude, signalMean, signalPeriod, noiseAmplitude, spEnabled, tmEnabled, upEnabled, classifierType.split(".")[1], classificationAccuracy] writer.writerow(results) t.add_row(results) print '%s\n' % t print '==> Results saved to %s\n' % RESULTS_FILE
def run(): """ Run classification network(s) on artificial sensor data """ if USE_JSON_CONFIG: with open('config/network_configs.json', 'rb') as fr: networkConfigurations = json.load(fr) else: with open("config/network_config_template.json", "rb") as jsonFile: templateNetworkConfig = json.load(jsonFile) networkConfigurations = generateSampleNetworkConfig( templateNetworkConfig, NUM_CATEGORIES) headers = [ 'numRecords', 'seqLength', 'numClasses', 'signalAmplitude', 'signalMean', 'signalPeriod', 'noiseAmplitude', 'spEnabled', 'tmEnabled', 'tpEnabled', 'classifierType', 'classificationAccuracy' ] with open(RESULTS_FILE, 'wb') as fw: writer = csv.writer(fw) writer.writerow(headers) t = PrettyTable(headers) 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: spEnabled = networkConfig[ "sensorRegionConfig"].get("regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig[ "classifierRegionConfig"].get("regionType") inputFile = generateSensorData( DATA_DIR, OUTFILE_NAME, signalMean, signalPeriod, SEQUENCE_LENGTH, NUM_RECORDS, signalAmplitude, NUM_CATEGORIES, noiseAmplitude) dataSource = FileRecordStream(streamID=inputFile) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions( networkConfig, NUM_RECORDS) classificationAccuracy = trainNetwork( network, networkConfig, partitions, NUM_RECORDS, VERBOSITY) results = [ NUM_RECORDS, SEQUENCE_LENGTH, NUM_CATEGORIES, signalAmplitude, signalMean, signalPeriod, noiseAmplitude, spEnabled, tmEnabled, upEnabled, classifierType.split(".")[1], classificationAccuracy ] writer.writerow(results) t.add_row(results) print '%s\n' % t print '==> Results saved to %s\n' % RESULTS_FILE
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) dataSource = FileRecordStream(streamID=inputFile) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions(networkConfig, NUM_RECORDS) classificationAccuracy = trainNetwork(network, networkConfig, partitions, NUM_RECORDS) 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)
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)
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) dataSource = FileRecordStream(streamID=inputFile) network = createAndConfigureNetwork( dataSource, networkConfig) partitions = generateNetworkPartitions( networkConfig, NUM_RECORDS) classificationAccuracy = trainNetwork( network, networkConfig, partitions, NUM_RECORDS) 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)
def run(): """ Run classification network(s) on artificial sensor data """ if USE_CONFIG_TEMPLATE: with open("config/network_config_template.json", "rb") as jsonFile: templateNetworkConfig = simplejson.load(jsonFile) networkConfigurations = generateSampleNetworkConfig(templateNetworkConfig, NUM_CATEGORIES) else: with open('config/sdr_network_configs.json', 'rb') as fr: networkConfigurations = simplejson.load(fr) expSetups = [] classificationResults = [] for signalType in SIGNAL_TYPES: for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for numCategories in NUM_CATEGORIES: for numReps in NUM_REPS: for numPhases in NUM_PHASES: for noiseLengths in NOISE_LENGTHS: spEnabled = networkConfig["sensorRegionConfig"].get( "regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig[ "classifierRegionConfig"].get( "regionType") expSetup = generateSensorData(signalType, DATA_DIR, numPhases, numReps, signalMean, signalAmplitude, numCategories, noiseAmplitude, noiseLengths) expSetup['expId'] = len(expSetups) expSetups.append(expSetup) dataSource = FileRecordStream( streamID=expSetup['inputFilePath']) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions(networkConfig, expSetup[ 'numPoints']) traces = trainNetwork(network, networkConfig, partitions, expSetup['numPoints'], VERBOSITY) expId = "%s_sp-%s_tm-%s_tp-%s_%s" % (signalType, spEnabled, tmEnabled, upEnabled, classifierType[3:-6]) fileName = TRACES_FILE % expId saveTraces(traces, fileName) print '==> Results saved to %s\n' % fileName finalAccuracy = traces['testClassificationAccuracyTrace'][ -1] classificationResults.append({ 'spEnabled': spEnabled, 'tmEnabled': tmEnabled, 'upEnabled': upEnabled, 'classifierType': classifierType.split(".")[1], 'classificationAccuracy': finalAccuracy }) print_and_save_results(classificationResults, expSetups)
def run(): """ Run classification network(s) on artificial sensor data """ with open("network_config_template.json", "rb") as jsonFile: templateNetworkConfig = json.load(jsonFile) networkConfigurations = generateSampleNetworkConfig(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) dataSource = FileRecordStream(streamID=inputFile) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions(networkConfig, NUM_RECORDS) trainNetwork(network, networkConfig, partitions, NUM_RECORDS)
def run(): """ Run classification network(s) on artificial sensor data """ if USE_JSON_CONFIG: with open('config/network_configs.json', 'rb') as fr: networkConfigurations = json.load(fr) else: with open("config/network_config_template.json", "rb") as jsonFile: templateNetworkConfig = json.load(jsonFile) networkConfigurations = generateSampleNetworkConfig(templateNetworkConfig, NUM_CATEGORIES) expSetups = [] classificationResults = [] for signalType in SIGNAL_TYPES: for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for numCategories in NUM_CATEGORIES: for numReps in NUM_REPS: for numPhases in NUM_PHASES: spEnabled = networkConfig["sensorRegionConfig"].get( "regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig["classifierRegionConfig"].get( "regionType") expSetup = generateSensorData(signalType, DATA_DIR, numPhases, numReps, signalMean, signalAmplitude, numCategories, noiseAmplitude) expSetup['expId'] = len(expSetups) expSetups.append(expSetup) dataSource = FileRecordStream(streamID=expSetup['filePath']) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions(networkConfig, expSetup['numPoints']) classificationAccuracy = trainNetwork(network, networkConfig, partitions, expSetup['numPoints'], VERBOSITY) classificationResults.append( { 'spEnabled': spEnabled, 'tmEnabled': tmEnabled, 'upEnabled': upEnabled, 'classifierType': classifierType.split(".")[1], 'classificationAccuracy': classificationAccuracy }) print_and_save_results(classificationResults, expSetups)