def __reservoirTrain__(self, x): #Extract the parameters spectralRadius = x[0] inputScaling = x[1] reservoirScaling = x[2] leakingRate = x[3] #Create the reservoir res = classicESN.Reservoir(size=self.size, spectralRadius=spectralRadius, inputScaling=inputScaling, reservoirScaling=reservoirScaling, leakingRate=leakingRate, initialTransient=self.initialTransient, inputData=self.trainingInputData, outputData=self.trainingOutputData, inputWeightRandom=self.inputWeightRandom, reservoirWeightRandom=self.reservoirWeightRandom) #Train the reservoir res.trainReservoir() #Predict for the validation data predictedOutputData = util.predictFuture(res, self.initialSeed, self.horizon) #Calcuate the regression error errorFunction = rmse.MeanSquareError() regressionError = errorFunction.compute(self.validationOutputData, predictedOutputData) #Return the error print("\nThe Parameters: "+str(x)+" Regression error:"+str(regressionError)) return regressionError
def __reservoirTrain__(self, x): #Extract the parameters meanDegree, beta = x meanDegree = int(meanDegree) # To get rid off the randomness in assigning weights, run it 10 times and take the average error times = 100 cumulativeError = 0 for i in range(times): # Input and weight connectivity Matrix inputWeightMatrix = topology.ClassicInputTopology( self.inputD, self.size).generateWeightMatrix() reservoirWeightMatrix = topology.SmallWorldGraphs( size=self.size, meanDegree=meanDegree, beta=beta).generateWeightMatrix() #Create the reservoir res = classicESN.Reservoir( size=self.size, spectralRadius=self.spectralRadius, inputScaling=self.inputScaling, reservoirScaling=self.reservoirScaling, leakingRate=self.leakingRate, initialTransient=self.initialTransient, inputData=self.trainingInputData, outputData=self.trainingOutputData, inputWeightRandom=inputWeightMatrix, reservoirWeightRandom=reservoirWeightMatrix) #Train the reservoir res.trainReservoir() # Warm up predictedTrainingOutputData = res.predict( self.trainingInputData[-self.initialTransient:]) #Predict for the validation data predictedOutputData = util.predictFuture(res, self.initialSeed, self.horizon) gc.collect() #Calcuate the regression error errorFunction = metrics.MeanSquareError() error = errorFunction.compute(self.validationOutputData, predictedOutputData) cumulativeError += error regressionError = cumulativeError / times #Return the error print("\nThe Parameters: " + str(x) + " Regression error:" + str(regressionError)) return regressionError
def evaluate(self, x): # Extract the parameters attachment = int(x[0, 0]) # To get rid off the randomness in assigning weights, run it 10 times and take the average error times = 1 cumulativeError = 0 for i in range(times): # Input and weight connectivity Matrix inputWeightMatrix = topology.ClassicInputTopology( self.inputD, self.size).generateWeightMatrix() network = topology.ScaleFreeNetworks(size=self.size, attachmentCount=attachment) reservoirWeightMatrix = network.generateWeightMatrix() # Create the reservoir res = esn.Reservoir(size=self.size, spectralRadius=self.spectralRadius, inputScaling=self.inputScaling, reservoirScaling=self.reservoirScaling, leakingRate=self.leakingRate, initialTransient=self.initialTransient, inputData=self.trainingInputData, outputData=self.trainingOutputData, inputWeightRandom=inputWeightMatrix, reservoirWeightRandom=reservoirWeightMatrix) # Train the reservoir res.trainReservoir() # Warm up predictedTrainingOutputData = res.predict( self.trainingInputData[-self.initialTransient:]) # Predict for the validation data predictedOutputData = util.predictFuture(res, self.initialSeed, self.horizon) gc.collect() # Calculate the regression error errorFunction = metrics.MeanSquareError() error = errorFunction.compute(self.validationOutputData, predictedOutputData) cumulativeError += error regressionError = cumulativeError / times # Return the error #print("Attachment: "+str(attachment) + "Error: "+str(regressionError)) return regressionError
def evaluate(self, x): # Extract the parameters meanDegree = int(x[0,0]) beta = x[0,1] # To get rid off the randomness in assigning weights, run it 10 times and take the average error times = 1 cumulativeError = 0 for i in range(times): # Input and weight connectivity Matrix inputWeightMatrix = topology.ClassicInputTopology(self.inputD, self.size).generateWeightMatrix() network = topology.SmallWorldGraphs(size=self.size, meanDegree=meanDegree, beta=beta) reservoirWeightMatrix = network.generateWeightMatrix() # Create the reservoir res = esn.Reservoir(size=self.size, spectralRadius=self.spectralRadius, inputScaling=self.inputScaling, reservoirScaling=self.reservoirScaling, leakingRate=self.leakingRate, initialTransient=self.initialTransient, inputData=self.trainingInputData, outputData=self.trainingOutputData, inputWeightRandom=inputWeightMatrix, reservoirWeightRandom=reservoirWeightMatrix) # Train the reservoir res.trainReservoir() # Warm up predictedTrainingOutputData = res.predict(self.trainingInputData[-self.initialTransient:]) # Predict for the validation data predictedOutputData = util.predictFuture(res, self.initialSeed, self.horizon) gc.collect() # Calculate the regression error errorFunction = metrics.MeanSquareError() error = errorFunction.compute(self.validationOutputData, predictedOutputData) cumulativeError += error regressionError = cumulativeError/times # Return the error #print("SMG parameters: "+str(x) + "Error: "+str(regressionError)) return regressionError
def __reservoirTrain__(self, x): #Extract the parameters attachment = int(x) # To get rid off the randomness in assigning weights, run it 10 times and take the average error times = 100 cumulativeError = 0 for i in range(times): # Input and weight connectivity Matrix inputWeightMatrix = topology.ClassicInputTopology(self.inputD, self.size).generateWeightMatrix() reservoirWeightMatrix = topology.ScaleFreeNetworks(size=self.size, attachmentCount=attachment).generateWeightMatrix() #Create the reservoir res = classicESN.Reservoir(size=self.size, spectralRadius=self.spectralRadius, inputScaling=self.inputScaling, reservoirScaling=self.reservoirScaling, leakingRate=self.leakingRate, initialTransient=self.initialTransient, inputData=self.trainingInputData, outputData=self.trainingOutputData, inputWeightRandom=inputWeightMatrix, reservoirWeightRandom=reservoirWeightMatrix) #Train the reservoir res.trainReservoir() # Warm up predictedTrainingOutputData = res.predict(self.trainingInputData[-self.initialTransient:]) #Predict for the validation data predictedOutputData = util.predictFuture(res, self.initialSeed, self.horizon) gc.collect() #Calcuate the regression error errorFunction = metrics.MeanSquareError() error = errorFunction.compute(self.validationOutputData, predictedOutputData) cumulativeError += error regressionError = cumulativeError/times #Return the error print("\nThe Parameters: "+str(x)+" Regression error:"+str(regressionError)) return regressionError
def __reservoirTrain__(self, x): #Extract the parameters spectralRadius = x[0] inputScaling = x[1] reservoirScaling = x[2] leakingRate = x[3] #Create the reservoir res = classicESN.Reservoir( size=self.size, spectralRadius=spectralRadius, inputScaling=inputScaling, reservoirScaling=reservoirScaling, leakingRate=leakingRate, initialTransient=self.initialTransient, inputData=self.trainingInputData, outputData=self.trainingOutputData, inputWeightRandom=self.inputWeightRandom, reservoirWeightRandom=self.reservoirWeightRandom) #Train the reservoir res.trainReservoir() # Warm up predictedTrainingOutputData = res.predict( self.trainingInputData[-self.initialTransient:]) #Predict for the validation data predictedOutputData = util.predictFuture(res, self.initialSeed, self.horizon) gc.collect() #Calcuate the regression error errorFunction = metrics.MeanSquareError() regressionError = errorFunction.compute(self.validationOutputData, predictedOutputData) #Return the error print("\nThe Parameters: " + str(x) + " Regression error:" + str(regressionError)) return regressionError
def evaluate(self, x): #Extract the parameters spectralRadius = x[0, 0] inputScaling = x[0, 1] reservoirScaling = x[0, 2] leakingRate = x[0, 3] #Create the reservoir res = esn.Reservoir(size=self.size, spectralRadius=spectralRadius, inputScaling=inputScaling, reservoirScaling=reservoirScaling, leakingRate=leakingRate, initialTransient=self.initialTransient, inputData=self.trainingInputData, outputData=self.trainingOutputData, inputWeightRandom=self.inputWeightRandom, reservoirWeightRandom=self.reservoirWeightRandom) #Train the reservoir res.trainReservoir() # Warm up predictedTrainingOutputData = res.predict(self.trainingInputData[-self.initialTransient:]) #Predict for the validation data predictedOutputData = util.predictFuture(res, self.initialSeed, self.horizon) gc.collect() #Calcuate the regression error errorFunction = metrics.MeanSquareError() regressionError = errorFunction.compute(self.validationOutputData, predictedOutputData) #Return the error return regressionError
inputData=inputTrainingData, outputData=outputTrainingData, spectralRadius=0.79, inputScaling=0.5, reservoirScaling=0.5, leakingRate=0.3, initialTransient=initialTransient, inputWeightRandom=inputWeight, reservoirWeightRandom=reservoirWeight) res.trainReservoir() #Warm up predictedTrainingOutputData = res.predict(inputTrainingData) #Predict future values predictedTestOutputData = util.predictFuture(res, trainingData[-1], nTesting) #Calculate the error errorFunction = rmse.MeanSquareError() error = errorFunction.compute(testingData, predictedTestOutputData) print("Regression error:" + str(error)) #Plotting of the prediction output and error outputFolderName = "Outputs/Outputs" + datetime.now().strftime( "%Y_%m_%d_%H_%M_%S") os.mkdir(outputFolderName) outplot = outputPlot.OutputPlot(outputFolderName + "/Prediction.html", "Mackey-Glass Time Series - Classic ESN", "Prediction of future values", "Time", "Output") outplot.setXSeries(np.arange(1, nTesting + 1))
inputScalingBound=inputScalingBound, reservoirScalingBound=reservoirScalingBound, leakingRateBound=leakingRateBound) spectralRadiusOptimum, inputScalingOptimum, reservoirScalingOptimum, leakingRateOptimum, inputWeightOptimum, reservoirWeightOptimum = resTuner.getOptimalParameters() #Train res = reservoir.Reservoir(size=size, spectralRadius=spectralRadiusOptimum, inputScaling=inputScalingOptimum, reservoirScaling=reservoirScalingOptimum, leakingRate=leakingRateOptimum, initialTransient=initialTransient, inputData=trainingInputData, outputData=trainingOutputData, inputWeightRandom=inputWeightOptimum, reservoirWeightRandom=reservoirWeightOptimum) res.trainReservoir() #Warm up predictedTrainingOutputData = res.predict(validationInputData) # Predict predictedTestOutputData = util.predictFuture(res, validationData[-1], nTesting) #Plotting of the prediction output and error outplot = outputPlot.OutputPlot("Outputs/Prediction.html", "Mackey-Glass Time Series", "Prediction of future values", "Time", "Output") outplot.setXSeries(np.arange(1, nTesting + 1)) outplot.setYSeries('Actual Output', testingData[:nTesting, 0]) outplot.setYSeries('Predicted Output', predictedTestOutputData[:nTesting, 0]) outplot.createOutput() print("Done!")
inputData=inputTrainingData, outputData=outputTrainingData, spectralRadius=0.79, inputScaling=0.5, reservoirScaling=0.5, leakingRate=0.3, initialTransient=initialTransient, inputWeightRandom=inputWeight, reservoirWeightRandom=reservoirWeight) res.trainReservoir() #Warm up predictedTrainingOutputData = res.predict(inputTrainingData) #Predict future values predictedTestOutputData = util.predictFuture(res, trainingData[-1], nTesting) #Calculate the error errorFunction = rmse.MeanSquareError() error = errorFunction.compute(testingData, predictedTestOutputData) print("Regression error:"+str(error)) #Plotting of the prediction output and error outputFolderName = "Outputs/Outputs" + datetime.now().strftime("%Y_%m_%d_%H_%M_%S") os.mkdir(outputFolderName) outplot = outputPlot.OutputPlot(outputFolderName + "/Prediction.html", "Mackey-Glass Time Series - Classic ESN", "Prediction of future values", "Time", "Output") outplot.setXSeries(np.arange(1, nTesting + 1)) outplot.setYSeries('Actual Output', minMax.inverse_transform(testingData[:nTesting, 0])) outplot.setYSeries('Predicted Output', minMax.inverse_transform(predictedTestOutputData[:nTesting, 0])) outplot.createOutput()
) #Train res = reservoir.Reservoir(size=size, spectralRadius=spectralRadiusOptimum, inputScaling=inputScalingOptimum, reservoirScaling=reservoirScalingOptimum, leakingRate=leakingRateOptimum, initialTransient=initialTransient, inputData=trainingInputData, outputData=trainingOutputData, inputWeightRandom=inputWeightOptimum, reservoirWeightRandom=reservoirWeightOptimum) res.trainReservoir() #Warm up predictedTrainingOutputData = res.predict(validationInputData) # Predict predictedTestOutputData = util.predictFuture(res, validationData[-1], nTesting) #Plotting of the prediction output and error outplot = outputPlot.OutputPlot("Outputs/Prediction.html", "Mackey-Glass Time Series", "Prediction of future values", "Time", "Output") outplot.setXSeries(np.arange(1, nTesting + 1)) outplot.setYSeries('Actual Output', testingData[:nTesting, 0]) outplot.setYSeries('Predicted Output', predictedTestOutputData[:nTesting, 0]) outplot.createOutput() print("Done!")
reservoirScaling=0.5, leakingRate=0.3, initialTransient=initialTransient, inputWeightRandom=inputWeight, reservoirWeightRandom=reservoirWeight) res.trainReservoir() #Warm up predictedTrainingOutputData = res.predict( inputTrainingData[-initialTransient:]) #Future - Non-accumulative #predictedTestOutputData = res.predict(inputTestingData) #Predict future values predictedTestOutputData = util.predictFuture(res, testingData[0], nTesting) #Calculate the error # errorFunction = rmse.MeanSquareError() # error = errorFunction.compute(testingData, predictedTestOutputData) # print("Regression error:"+str(error)) #Plotting of the prediction output and error # nTraining = inputTrainingData.shape[0] # outputFolderName = "Outputs/Outputs" + datetime.now().strftime("%Y_%m_%d_%H_%M_%S") # os.mkdir(outputFolderName) # outplot = outputPlot.OutputPlot(outputFolderName + "/Prediction.html", "Mackey-Glass Time Series - Classic ESN", "Prediction of future values", "Time", "Output") # outplot.setXSeries(np.arange(1, nTraining + 1)) # outplot.setYSeries('Actual Output', minMax.inverse_transform(outputTrainingData[:nTraining, 0])) # outplot.setYSeries('Predicted Output', minMax.inverse_transform(predictedTrainingOutputData[:nTraining, 0])) # outplot.createOutput()
inputScaling=0.5, reservoirScaling=0.5, leakingRate=0.3, initialTransient=initialTransient, inputWeightRandom=inputWeight, reservoirWeightRandom=reservoirWeight) res.trainReservoir() #Warm up predictedTrainingOutputData = res.predict(inputTrainingData[-initialTransient:]) #Future - Non-accumulative #predictedTestOutputData = res.predict(inputTestingData) #Predict future values predictedTestOutputData = util.predictFuture(res, testingData[0], nTesting) #Calculate the error # errorFunction = rmse.MeanSquareError() # error = errorFunction.compute(testingData, predictedTestOutputData) # print("Regression error:"+str(error)) #Plotting of the prediction output and error # nTraining = inputTrainingData.shape[0] # outputFolderName = "Outputs/Outputs" + datetime.now().strftime("%Y_%m_%d_%H_%M_%S") # os.mkdir(outputFolderName) # outplot = outputPlot.OutputPlot(outputFolderName + "/Prediction.html", "Mackey-Glass Time Series - Classic ESN", "Prediction of future values", "Time", "Output") # outplot.setXSeries(np.arange(1, nTraining + 1)) # outplot.setYSeries('Actual Output', minMax.inverse_transform(outputTrainingData[:nTraining, 0])) # outplot.setYSeries('Predicted Output', minMax.inverse_transform(predictedTrainingOutputData[:nTraining, 0]))
resOnline = onlineESN.Reservoir(size=size, inputData=inputTrainingData, outputData=outputTrainingData, spectralRadius=0.79, inputScaling=0.5, reservoirScaling=0.5, leakingRate=0.3, initialTransient=initialTransient, inputWeightRandom=inputWeight, reservoirWeightRandom=reservoirWeight) resOnline.trainReservoir() #Warm up predictedTrainingOutputData = resBatch.predict(inputTrainingData[-initialTransient:]) predictedTrainingOutputData = resOnline.predict(inputTrainingData[-initialTransient:]) #Predict future values predictedTestOutputDataBatch = util.predictFuture(resBatch, trainingData[-1], nTesting) predictedTestOutputDataOnline = util.predictFuture(resOnline, trainingData[-1], nTesting) #Plotting of the prediction output and error outputFolderName = "Outputs/Outputs" + datetime.now().strftime("%Y_%m_%d_%H_%M_%S") os.mkdir(outputFolderName) outplot = outputPlot.OutputPlot(outputFolderName + "/Prediction.html", "Mackey-Glass Time Series - Comparison of Batch vs Online", "Prediction of future values", "Time", "Output") outplot.setXSeries(np.arange(1, nTesting + 1)) outplot.setYSeries('Actual Output', minMax.inverse_transform(testingData[:nTesting, 0])) outplot.setYSeries('Predicted Batch learning Output', minMax.inverse_transform(predictedTestOutputDataBatch[:nTesting, 0])) outplot.setYSeries('Predicted Online RLS learning Output', minMax.inverse_transform(predictedTestOutputDataOnline[:nTesting, 0])) outplot.createOutput() print("Done!")