public override void Train(IForecastingDataSets datasets) { OnStartRunning(new ComponentRunEventArgs(datasets)); AnnModelParameter para = mParameter as AnnModelParameter; LinearLayer inputLayer = new LinearLayer(datasets.InputData[0].Length); SigmoidLayer hiddenLayer = new SigmoidLayer(para.HiddenNeuronsCount[0]); SigmoidLayer outputLayer = new SigmoidLayer(1); new BackpropagationConnector(inputLayer, hiddenLayer).Initializer = new RandomFunction(0d, 0.3d); new BackpropagationConnector(hiddenLayer, outputLayer).Initializer = new RandomFunction(0d, 0.3d); network = new BackpropagationNetwork(inputLayer, outputLayer); network.SetLearningRate(para.LearningRate); network.JitterEpoch = para.JitterEpoch; network.JitterNoiseLimit = para.JitterNoiseLimit; network.EndEpochEvent += new TrainingEpochEventHandler( delegate(object senderNetwork, TrainingEpochEventArgs args) { // TODO: trainning error needs to be calculated OnRunningEpoch(new AnnModelRunEpochEventArgs(args.TrainingIteration + 1, 0)); }); network.Learn(ForecastingDataSets.ConvertToTrainingSet(datasets), para.Iterations); datasets.ForecastedData = new double[datasets.InputData.Length][]; for (int i = 0; i < datasets.InputData.Length; i++) { datasets.ForecastedData[i] = new double[1]; datasets.ForecastedData[i][0] = Forecast(datasets.InputData[i]); } OnFinishRunning(new ComponentRunEventArgs(datasets)); }
public void Analyze(IForecastingDataSets datasets) { if (ModelStartRunning != null) { ModelStartRunning(this, new ComponentRunEventArgs(datasets)); } int learningRadius = Math.Max(mSOMParameter.LayerWidth, mSOMParameter.LayerHeight) / 2; KohonenLayer inputLayer = new KohonenLayer(datasets.InputData[0].Length); KohonenLayer outputLayer = new KohonenLayer(new Size(mSOMParameter.LayerWidth, mSOMParameter.LayerHeight), mSOMParameter.NeighborhoodFunction, mSOMParameter.Topology); KohonenConnector connector = new KohonenConnector(inputLayer, outputLayer); connector.Initializer = new RandomFunction(0, 100); outputLayer.SetLearningRate(mSOMParameter.LearningRate, mSOMParameter.FinalLearningRate); outputLayer.IsRowCircular = mSOMParameter.IsRowCircular; outputLayer.IsColumnCircular = mSOMParameter.IsColumnCircular; mNetwork = new KohonenNetwork(inputLayer, outputLayer); mNetwork.EndEpochEvent += new TrainingEpochEventHandler( delegate(object senderNetwork, TrainingEpochEventArgs args) { if (ModelRunningEpoch != null) { ModelRunningEpoch(this, new ComponentRunEpochEventArgs(args.TrainingIteration)); } }); mTrainingSet = ForecastingDataSets.ConvertToUnSupervisedTrainingSet(datasets); mNetwork.Learn(mTrainingSet, mSOMParameter.Iterations); if (ModelFinishRunning != null) { ModelFinishRunning(this, new ComponentRunEventArgs(datasets)); } }
public override void Train(IForecastingDataSets datasets) { OnStartRunning(new ComponentRunEventArgs(datasets)); ForecastingDataSets fds = datasets as ForecastingDataSets; //MultipleLinearRegression mlineRegrsn = new MultipleLinearRegression(datasets.InputData, fds.GetOutputDataColumn(0), true); //Matrix result = new Matrix(); //mlineRegrsn.ComputeFactorCoref(result); //RegressionCoefficients = result[0, Matrix.mCol]; int solutionSize = datasets.Length; datasets.ForecastedData = new double[solutionSize][]; for (int i = 0; i < solutionSize; i++) { datasets.ForecastedData[i] = new double[1]; datasets.ForecastedData[i][0] = Forecast(fds.InputData[i]); } OnFinishRunning(new ComponentRunEventArgs(datasets)); }
private IForecastingDataSets ExtractSubSets(int[] splitLocations, double[] splitValues, IForecastingDataSets datasets, RuleType type) { List <double[]> listInput = new List <double[]>(); List <double[]> listOutput = new List <double[]>(); List <DateTime> dates = new List <DateTime>(); for (int i = 0; i < datasets.Length; i++) { double[] vector = datasets.InputData[i]; bool isCase = true; int j = 0; foreach (int sl in splitLocations) { if (type == RuleType.LeftLeaf) { if (vector[sl] > splitValues[j]) { isCase = false; break; } } else if (type == RuleType.RightLeaf) { if (vector[sl] <= splitValues[j]) { isCase = false; break; } } j++; } if (isCase) { listInput.Add(vector); listOutput.Add(datasets.OutputData[i]); dates.Add(datasets.Date[i]); } } IForecastingDataSets extractedSets = new ForecastingDataSets(listInput.ToArray(), listOutput.ToArray()); extractedSets.Date = dates.ToArray(); return(extractedSets); }