Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
            }
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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);
        }