/// <summary> /// Prepares input for regression stage of State Machine training. /// All input patterns are processed by internal reservoirs and the corresponding network predictors are recorded. /// </summary> /// <param name="dataSet"> /// The bundle containing known sample input patterns and desired output vectors /// </param> /// <param name="informativeCallback"> /// Function to be called after each processed input. /// </param> /// <param name="userObject"> /// The user object to be passed to informativeCallback. /// </param> public RegressionStageInput PrepareRegressionStageInput(PatternBundle dataSet, PredictorsCollectionCallbackDelegate informativeCallback = null, Object userObject = null ) { if (_settings.InputConfig.FeedingType == CommonEnums.InputFeedingType.Continuous) { throw new Exception("This version of PrepareRegressionStageInput function is not useable for continuous input feeding."); } //RegressionStageInput allocation RegressionStageInput rsi = new RegressionStageInput { PredictorsCollection = new List <double[]>(dataSet.InputPatternCollection.Count), IdealOutputsCollection = new List <double[]>(dataSet.OutputVectorCollection.Count) }; //Reset the internal states and statistics Reset(true); //Collection for (int dataSetIdx = 0; dataSetIdx < dataSet.InputPatternCollection.Count; dataSetIdx++) { //Push input data into the network double[] predictors = PushInput(dataSet.InputPatternCollection[dataSetIdx]); rsi.PredictorsCollection.Add(predictors); //Add desired outputs rsi.IdealOutputsCollection.Add(dataSet.OutputVectorCollection[dataSetIdx]); //Informative callback informativeCallback?.Invoke(dataSet.InputPatternCollection.Count, dataSetIdx + 1, userObject); } //Collect reservoirs statistics rsi.ReservoirStatCollection = CollectReservoirInstancesStatatistics(); return(rsi); }
/// <summary> /// Prepares input for Readout Layer training. /// All input patterns are processed by internal reservoirs and the corresponding network predictors are recorded. /// </summary> /// <param name="patternBundle"> /// The bundle containing known sample input patterns and desired output vectors /// </param> /// <param name="informativeCallback"> /// Function to be called after each processed input. /// </param> /// <param name="userObject"> /// The user object to be passed to informativeCallback. /// </param> public VectorBundle InitializeAndPreprocessBundle(PatternBundle patternBundle, PredictorsCollectionCallbackDelegate informativeCallback = null, Object userObject = null ) { //Check correctness if (_settings.InputConfig.FeedingType == CommonEnums.InputFeedingType.Continuous) { throw new Exception("Called incorrect version of InitializeAndPreprocessBundle function for continuous input feeding."); } //Reset the internal states and also statistics Reset(true); //Initialize normalizers and normalize input data List <List <double[]> > nrmInputPatternCollection = NormalizeInputPatternCollection(patternBundle.InputPatternCollection); //Allocate output bundle VectorBundle outputBundle = new VectorBundle(patternBundle.InputPatternCollection.Count); //Collection for (int dataSetIdx = 0; dataSetIdx < nrmInputPatternCollection.Count; dataSetIdx++) { //Push input data into the network double[] predictors = PushInput(nrmInputPatternCollection[dataSetIdx], true); outputBundle.InputVectorCollection.Add(predictors); //Add desired outputs outputBundle.OutputVectorCollection.Add(patternBundle.OutputVectorCollection[dataSetIdx]); //Informative callback informativeCallback?.Invoke(patternBundle.InputPatternCollection.Count, dataSetIdx + 1, userObject); } return(outputBundle); }
/// <summary> /// Prepares input for regression stage of State Machine training for the classification or hybrid task type. /// All input patterns are processed by internal reservoirs and the corresponding network predictors are recorded. /// </summary> /// <param name="dataSet"> /// The bundle containing known sample input patterns and desired output vectors /// </param> /// <param name="informativeCallback"> /// Function to be called after each processed input. /// </param> /// <param name="userObject"> /// The user object to be passed to informativeCallback. /// </param> public RegressionStageInput PrepareRegressionStageInput(PatternBundle dataSet, PredictorsCollectionCallbackDelegate informativeCallback = null, Object userObject = null ) { if (_settings.TaskType == CommonEnums.TaskType.Prediction) { throw new Exception("This version of PrepareRegressionStageInput function is useable only for the classification or hybrid task type."); } //RegressionStageInput allocation RegressionStageInput rsi = new RegressionStageInput(); rsi.PredictorsCollection = new List <double[]>(dataSet.InputPatternCollection.Count); rsi.IdealOutputsCollection = new List <double[]>(dataSet.OutputVectorCollection.Count); //Collection for (int dataSetIdx = 0; dataSetIdx < dataSet.InputPatternCollection.Count; dataSetIdx++) { //Push input data into the network double[] predictors = PushInput(dataSet.InputPatternCollection[dataSetIdx]); rsi.PredictorsCollection.Add(predictors); //Add desired outputs rsi.IdealOutputsCollection.Add(dataSet.OutputVectorCollection[dataSetIdx]); //Informative callback if (informativeCallback != null) { informativeCallback(dataSet.InputPatternCollection.Count, dataSetIdx + 1, userObject); } } //Collect reservoirs statistics rsi.ReservoirStatCollection = CollectReservoirInstancesStatatistics(); return(rsi); }
/// <summary> /// Prepares input for regression stage of State Machine training for the time series prediction task. /// All input vectors are processed by internal reservoirs and the corresponding network predictors are recorded. /// </summary> /// <param name="dataSet"> /// The bundle containing known sample input and desired output vectors (in time order) /// </param> /// <param name="numOfBootSamples"> /// Number of boot samples from the beginning of all samples. /// The purpose of the boot samples is to ensure that the states of the neurons in the reservoir /// depend only on the time series data and not on the initial state of the neurons in the reservoir. /// The number of boot samples depends on the size and configuration of the reservoirs. /// It is usually sufficient to set the number of boot samples equal to the number of neurons in the largest reservoir. /// </param> /// <param name="informativeCallback"> /// Function to be called after each processed input. /// </param> /// <param name="userObject"> /// The user object to be passed to informativeCallback. /// </param> public RegressionStageInput PrepareRegressionStageInput(TimeSeriesBundle dataSet, int numOfBootSamples, PredictorsCollectionCallbackDelegate informativeCallback = null, Object userObject = null ) { if (_settings.TaskType != CommonEnums.TaskType.Prediction) { throw new Exception("This version of PrepareRegressionStageInput function is useable only for the prediction task type."); } int dataSetLength = dataSet.InputVectorCollection.Count; //RegressionStageInput allocation RegressionStageInput rsi = new RegressionStageInput(); rsi.PredictorsCollection = new List <double[]>(dataSetLength - numOfBootSamples); rsi.IdealOutputsCollection = new List <double[]>(dataSetLength - numOfBootSamples); //Reset the internal states and statistics Reset(true); //Collection for (int dataSetIdx = 0; dataSetIdx < dataSetLength; dataSetIdx++) { bool afterBoot = (dataSetIdx >= numOfBootSamples); //Push input data into the network double[] predictors = PushInput(dataSet.InputVectorCollection[dataSetIdx], afterBoot); //Is boot sequence passed? Collect predictors? if (afterBoot) { //YES rsi.PredictorsCollection.Add(predictors); //Desired outputs rsi.IdealOutputsCollection.Add(dataSet.OutputVectorCollection[dataSetIdx]); } //An informative callback if (informativeCallback != null) { informativeCallback(dataSetLength, dataSetIdx + 1, userObject); } } //Collect reservoirs statistics rsi.ReservoirStatCollection = CollectReservoirInstancesStatatistics(); return(rsi); }
/// <summary> /// Prepares input for regression stage of State Machine training. /// All input vectors are processed by internal reservoirs and the corresponding network predictors are recorded. /// </summary> /// <param name="dataSet"> /// The bundle containing known sample input and desired output vectors (in time order) /// </param> /// <param name="informativeCallback"> /// Function to be called after each processed input. /// </param> /// <param name="userObject"> /// The user object to be passed to informativeCallback. /// </param> public RegressionStageInput PrepareRegressionStageInput(TimeSeriesBundle dataSet, PredictorsCollectionCallbackDelegate informativeCallback = null, Object userObject = null ) { if (_settings.InputConfig.FeedingType == CommonEnums.InputFeedingType.Patterned) { throw new Exception("This version of PrepareRegressionStageInput function is not useable for patterned input feeding."); } int dataSetLength = dataSet.InputVectorCollection.Count; //RegressionStageInput allocation RegressionStageInput rsi = new RegressionStageInput { PredictorsCollection = new List <double[]>(dataSetLength - _settings.InputConfig.BootCycles), IdealOutputsCollection = new List <double[]>(dataSetLength - _settings.InputConfig.BootCycles) }; //Reset the internal states and statistics Reset(true); //Collection for (int dataSetIdx = 0; dataSetIdx < dataSetLength; dataSetIdx++) { bool afterBoot = (dataSetIdx >= _settings.InputConfig.BootCycles); //Push input data into the network double[] predictors = PushInput(dataSet.InputVectorCollection[dataSetIdx], afterBoot); //Is boot sequence passed? Collect predictors? if (afterBoot) { //YES rsi.PredictorsCollection.Add(predictors); //Desired outputs rsi.IdealOutputsCollection.Add(dataSet.OutputVectorCollection[dataSetIdx]); } //An informative callback informativeCallback?.Invoke(dataSetLength, dataSetIdx + 1, userObject); } //Collect reservoirs statistics rsi.ReservoirStatCollection = CollectReservoirInstancesStatatistics(); return(rsi); }
/// <summary> /// Prepares input for Readout Layer training. /// All input vectors are processed by internal reservoirs and the corresponding network predictors are recorded. /// </summary> /// <param name="vectorBundle"> /// The bundle containing known sample input and desired output vectors (in time order) /// </param> /// <param name="informativeCallback"> /// Function to be called after each processed input. /// </param> /// <param name="userObject"> /// The user object to be passed to informativeCallback. /// </param> public VectorBundle InitializeAndPreprocessBundle(VectorBundle vectorBundle, PredictorsCollectionCallbackDelegate informativeCallback = null, Object userObject = null ) { //Check correctness if (_settings.InputConfig.FeedingType == CommonEnums.InputFeedingType.Patterned) { throw new Exception("Called incorrect version of InitializeAndPreprocessBundle function for patterned input feeding."); } //Reset the internal states and also statistics Reset(true); //Initialize normalizers and normalize input data List <double[]> nrmInputVectorCollection = NormalizeInputVectorCollection(vectorBundle.InputVectorCollection); //Allocate output bundle VectorBundle outputBundle = new VectorBundle(vectorBundle.InputVectorCollection.Count - _settings.InputConfig.BootCycles); //Collect predictors for (int dataSetIdx = 0; dataSetIdx < vectorBundle.InputVectorCollection.Count; dataSetIdx++) { bool afterBoot = (dataSetIdx >= _settings.InputConfig.BootCycles); //Push input data into the network double[] predictors = PushInput(nrmInputVectorCollection[dataSetIdx], afterBoot); //Is boot sequence passed? Collect predictors? if (afterBoot) { //YES //Predictors outputBundle.InputVectorCollection.Add(predictors); //Desired outputs outputBundle.OutputVectorCollection.Add(vectorBundle.OutputVectorCollection[dataSetIdx]); } //An informative callback informativeCallback?.Invoke(vectorBundle.InputVectorCollection.Count, dataSetIdx + 1, userObject); } return(outputBundle); }