def runDataset(dataset): """ Runs through the dataset given for anomaly detection """ # set model parameters, csv path, and output csv/plot if (dataset == 0): model_par = machine_model_params csv_path = "./data/machine_temperature_system_failure.csv" outputCSVFile = nupic_output.NuPICFileOutput( ["Machine_Temp_Sys_Failure_OUTPUT_CSV"]) outputPlotFile = nupic_output.NuPICPlotOutput( ["Machine_Temp_Sys_Failure_OUTPUT_PLOT"]) elif (dataset == 1): model_par = twitter_model_params csv_path = "./data/Twitter_volume_GOOG.csv" outputCSVFile = nupic_output.NuPICFileOutput( ["Twitter_Volume_Google_OUTPUT_CSV"]) outputPlotFile = nupic_output.NuPICPlotOutput( ["Twitter_Volume_Google_OUTPUT_PLOT"]) else: print("No specified dataset, error will occur") model_params = None # create model model = createModel(model_par) #run model runModel(model, csv_path, outputCSVFile, outputPlotFile)
def runModel(model): inputFile = open("rec-center-hourly.csv", "rb") csvReader = csv.reader(inputFile) csvReader.next() csvReader.next() csvReader.next() shifter = InferenceShifter() output = nupic_output.NuPICPlotOutput(['REC center']) counter = 0 for row in csvReader: counter += 1 if (counter % 100 == 0): print("Read %i lines", counter) timestamp = datetime.datetime.strptime(row[0], DATE_FORMAT) consumption = float(row[1]) result = model.run({ "timestamp": timestamp, "kw_energy_consumption": consumption }) result = shifter.shift(result) prediction = result.inferences["multiStepBestPredictions"][1] output.write([timestamp], [consumption], [prediction]) inputFile.close() output.close()
def runIoThroughNupic(inputData, model, gymName, plot): inputFile = open(inputData, "rb") csvReader = csv.reader(inputFile) # skip header rows csvReader.next() csvReader.next() csvReader.next() shifter = InferenceShifter() if plot: output = nupic_output.NuPICPlotOutput([gymName]) else: output = nupic_output.NuPICFileOutput([gymName]) counter = 0 for row in csvReader: counter += 1 if (counter % 100 == 0): print "Read %i lines..." % counter timestamp = datetime.datetime.strptime(row[0], DATE_FORMAT) consumption = float(row[1]) result = model.run({ "timestamp": timestamp, "kw_energy_consumption": consumption }) if plot: result = shifter.shift(result) prediction = result.inferences["multiStepBestPredictions"][1] output.write([timestamp], [consumption], [prediction]) inputFile.close() output.close()
def runIoThroughNupic(inputPath, model, modelName, plot=False): with open(inputPath, "rb") as inputFile: csvReader = csv.reader(inputFile) # skip header rows headers = csvReader.next() csvReader.next() csvReader.next() shifter = InferenceShifter() if plot: output = nupic_output.NuPICPlotOutput(modelName) else: output = nupic_output.NuPICFileOutput(modelName, path="data") counter = 0 for row in csvReader: assert len(row) == len(headers) counter += 1 if (counter % 100 == 0): print "Read %i lines..." % counter row = [float(row[0])] + [int(val) for val in row[1:]] input_row = dict(zip(headers, row)) result = model.run(input_row) if plot: seconds = input_row["seconds"] actual = input_row[PREDICTED_BUCKET] shifter.shift(result) predicted = result.inferences["multiStepBestPredictions"][1] output.write([seconds], [actual], [predicted]) else: output.write(input_row, result) output.close()
def runEEGAnomaly(): # Create Model model = createModel() model.enableInference({'predictedField': 'ch0','predictedField': 'ch1'}) # Load data mat = scipy.io.loadmat(_DATA_FILE) data = mat['data'] seconds = mat['seconds'] # plotting stuff? output = nupic_output.NuPICPlotOutput(["ch0","ch1"]) #for i,t in data,seconds: for i, t in zip(data, seconds): #modelInput = dict(zip('ch1', i[0])) modelInput = {'ch0':i[0],'ch1':i[1]} result = model.run(modelInput) #anomalyScore = result.inferences['anomalyScore'] prediction = result.inferences["multiStepBestPredictions"][1] output.write([t[0],t[0]],[i[0],i[1]],[prediction,prediction]) #if anomalyScore > _ANOMALY_THRESHOLD: # _LOGGER.info("Anomaly detected. Anomaly score: %f.", anomalyScore) print "Anomaly scores have been written to",_OUTPUT_PATH
def runModel(model, file_name): ''' Run predictions with a given model. Args: model: Opf model. ''' input_file = open(file_name, "rb") csv_reader = csv.reader(input_file) csv_reader.next() csv_reader.next() csv_reader.next() shifter = InferenceShifter() output = nupic_output.NuPICPlotOutput("Sine", show_anomaly_score=True) for row in csv_reader: angle = float(row[0]) sine = float(row[1]) result = model.run({"angle": angle, "sine": sine}) result = shifter.shift(result) inference = result.inferences['multiStepBestPredictions'][1] anomaly_score = result.inferences['anomalyScore'] output.write(sine, inference, anomaly_score) input_file.close() output.close()
def run_io_through_nupic(input_data, model, file_name, plot, print_results): input_file = open(input_data, "rb") csv_reader = csv.reader(input_file) # skip header rows csv_reader.next() csv_reader.next() csv_reader.next() shifter = InferenceShifter() if plot: output = nupic_output.NuPICPlotOutput([file_name]) else: output = nupic_output.NuPICFileOutput([file_name]) metrics_manager = MetricsManager(_METRIC_SPECS, model.getFieldInfo(), model.getInferenceType()) counter = 0 timestamp = None consumption = None result = None for row in csv_reader: counter += 1 timestamp = datetime.datetime.strptime(row[1], DATE_FORMAT) consumption = int(row[2]) amount = float(row[0]) result = model.run({ "amount": amount, "date": timestamp, "tte": consumption }) result.metrics = metrics_manager.update(result) if counter % 100 == 0 or counter % 384 == 0: print "Read %i lines..." % counter print ("After %i records, rmse=%f" % (counter, result.metrics["multiStepBestPredictions:multiStep:" "errorMetric='rmse':steps=1:window=1000:" "field=tte"])) if plot: result = shifter.shift(result) prediction = result.inferences["multiStepBestPredictions"][1] output.write([timestamp], [consumption], [prediction]) if print_results: print("date:", timestamp.strftime("%y-%m-%d"), "actual:", consumption, "predicted:", prediction) if plot and counter % 20 == 0: output.refresh_gui() #if plot and counter % 1000 == 0: # break input_file.close() output.close()
def run(numRecords): ''' Run the Hot Gym example. ''' # Create a data source for the network. dataSource = FileRecordStream(streamID=_INPUT_FILE_PATH) numRecords = min(numRecords, dataSource.getDataRowCount()) network = createNetwork(dataSource) network.regions["sensor"].getSelf().predictedField = "sine" # Set predicted field network.regions["sensor"].setParameter("predictedField", "sine") # Enable learning for all regions. network.regions["SP"].setParameter("learningMode", 1) network.regions["TM"].setParameter("learningMode", 1) network.regions["classifier"].setParameter("learningMode", 1) # Enable inference for all regions. network.regions["SP"].setParameter("inferenceMode", 1) network.regions["TM"].setParameter("inferenceMode", 1) network.regions["classifier"].setParameter("inferenceMode", 1) results = [] N = 1 # Run the network, N iterations at a time. output = nupic_output.NuPICPlotOutput("Sine", show_anomaly_score=True) for iteration in range(0, numRecords, N): network.run(N) sine = network.regions["sensor"].getOutputData("sourceOut")[0] predictionResults = getPredictionResults(network, "classifier") oneStep = predictionResults[1]["predictedValue"] oneStepConfidence = predictionResults[1]["predictionConfidence"] fiveStep = predictionResults[10]["predictedValue"] fiveStepConfidence = predictionResults[10]["predictionConfidence"] result = (oneStep, oneStepConfidence * 100, fiveStep, fiveStepConfidence * 100) print "1-step: {:16} ({:4.4}%)\t 10-step: {:16} ({:4.4}%)".format( *result) results.append(result) output.write(sine, oneStep, 0) output.close() return results
def runIoThroughNupic(inputData, model, name, plot): inputFile = open(inputData, "rb") csvReader = csv.reader(inputFile) # skip header rows csvReader.next() csvReader.next() csvReader.next() shifter = InferenceShifter() if len(plot) == 0: for field in SWARM_DESCRIPTION["includedFields"]: plot.append(field["fieldName"]) output = nupic_output.NuPICFileOutput(name, plot) else: output = nupic_output.NuPICPlotOutput(name, plot) metricsManager = MetricsManager(_METRIC_SPECS, model.getFieldInfo(), model.getInferenceType()) counter = 0 for row in csvReader: counter += 1 data = {} fldCounter = 0 for field in SWARM_DESCRIPTION["includedFields"]: data[field["fieldName"]] = translate_data(field["fieldType"], row[fldCounter]) fldCounter += 1 result = model.run(data) result.metrics = metricsManager.update(result) if options.verbose is not None and counter % 100 == 0: print "Read %i lines..." % counter print ("After %i records, 1-step altMAPE=%f" % (counter, result.metrics["multiStepBestPredictions:multiStep:" "errorMetric='altMAPE':steps=1:window=1000:" "field="+PREDICTED_FIELD])) if plot: result = shifter.shift(result) prediction = result.inferences["multiStepBestPredictions"][1] vals = [] for field in plot: vals.append(data[field]) output.write(vals, prediction) inputFile.close() output.close()
def runIoThroughNupic(inputData, model, gymName, plot): inputFile = open(inputData, "rb") csvReader = csv.reader(inputFile) # skip header rows csvReader.next() csvReader.next() csvReader.next() shifter = InferenceShifter() if plot: output = nupic_output.NuPICPlotOutput([gymName]) else: output = nupic_output.NuPICFileOutput([gymName]) metricsManager = MetricsManager(_METRIC_SPECS, model.getFieldInfo(), model.getInferenceType()) counter = 0 for row in csvReader: counter += 1 timestamp = datetime.datetime.strptime(row[0], DATE_FORMAT) consumption = float(row[1]) result = model.run({ "timestamp": timestamp, "kw_energy_consumption": consumption }) result.metrics = metricsManager.update(result) if counter % 100 == 0: print "Read %i lines..." % counter print("After %i records, 1-step altMAPE=%f" % (counter, result.metrics["multiStepBestPredictions:multiStep:" "errorMetric='altMAPE':steps=1:window=1000:" "field=kw_energy_consumption"])) if plot: result = shifter.shift(result) prediction = result.inferences["multiStepBestPredictions"][1] output.write([timestamp], [consumption], [prediction]) if plot and counter % 20 == 0: output.refreshGUI() inputFile.close() output.close()
def runIoThroughNupic(inputData, model, dataName, plot): inputFile = open(inputData, "rU") csvReader = csv.reader(inputFile) # skip header rows csvReader.next() csvReader.next() csvReader.next() shifter = InferenceShifter() if plot: output = nupic_output.NuPICPlotOutput([dataName]) else: output = nupic_output.NuPICFileOutput([dataName]) metricsManager = MetricsManager(_METRIC_SPECS, model.getFieldInfo(), model.getInferenceType()) counter = 0 for row in csvReader: counter += 1 y = float(row[0]) result = model.run({"y": y}) result.metrics = metricsManager.update(result) if counter % 100 == 0: print "Read %i lines..." % counter print( "After %i records, 1-step nrmse=%f", counter, result.metrics["multiStepBestPredictions:multiStep:" "errorMetric='nrmse':steps=1:window=1000000:" "field=y"]) if plot: result = shifter.shift(result) prediction = result.inferences["multiStepBestPredictions"][1] output.write([0], [y], [prediction]) inputFile.close() output.close()
def runIoThroughNupic(inputData, model, modelName, plot): inputFile = open(inputData, "rb") csvReader = csv.reader(inputFile) # skip header rows csvReader.next() csvReader.next() csvReader.next() shifter = InferenceShifter() if plot: output = nupic_output.NuPICPlotOutput([modelName]) else: output = nupic_output.NuPICFileOutput([modelName]) counter = 0 for row in csvReader: counter += 1 if (counter % 100 == 0): print "Read %i lines..." % counter #timestamp = datetime.datetime.strptime(row[0], DATE_FORMAT) #consumption = float(row[1]) subject=row[0] verb=row[1] obj=row[2] result = model.run({ "subject": subject, "verb": verb, "object":obj }) if plot: result = shifter.shift(result) print "result: " + repr(result.inferences["multiStepBestPredictions"]) prediction = result.inferences["multiStepBestPredictions"][1] output.write([subject], [verb], [obj], [prediction]) inputFile.close() output.close()
def runModel(model): predictions = [] inputFilePath = "RKIGTData.csv" inputFile = open(inputFilePath, 'rb') csvReader = csv.reader(inputFile) # Skip header csvReader.next() csvReader.next() csvReader.next() shifter = InferenceShifter() output = nupic_output.NuPICPlotOutput(["rki_faelle"]) counter = 0 for row in csvReader: counter += 1 if (counter % 100 == 0): print("Read %i lines ..." % counter) time.sleep(1) timestamp = datetime.datetime.strptime(row[0], DATE_FORMAT) grippe = float(row[1]) flu = float(row[2]) faelle = float(row[3]) result = model.run({ "wstday": timestamp, "Grippe": grippe, "Influenza": flu, "faelle": faelle }) result = shifter.shift(result) prediction = result.inferences["multiStepBestPredictions"][1] output.write( str(timestamp) + ',' + str(faelle) + ',' + str(prediction) + '\n') #output.write([timestamp], [faelle], [prediction]) inputFile.close() output.close()