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
示例#7
0
    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!")
示例#12
0
                    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]))
示例#14
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!")