Exemple #1
0
        public IPredictionResult Predict(IGaussianMixtureModelState model, IPredictionRequest request)
        {
            var trainingSet = (double[][])request.TrainingSet.Clone();
            var predictions = new PredictionResult {
                Predicted = new double[request.NumberOfDays][]
            };

            for (int i = 0; i < request.NumberOfDays; i++)
            {
                var prediction = PredictNextValue(model, request, trainingSet);
                if (request.NumberOfDays > 1)
                {
                    trainingSet = new double[request.TrainingSet.Length + i + 1][];
                    request.TrainingSet.CopyTo(trainingSet, 0);
                    for (var j = 0; j < i + 1; j++)
                    {
                        trainingSet[request.TrainingSet.Length + j] = request.TestSet[j];
                    }
                }
                predictions.Predicted[i] = prediction;
            }

            return(predictions);
        }
Exemple #2
0
        private IList <ObservationWithLikelihood <double[]> > FindMostSimilarObservations(IGaussianMixtureModelState model, double[][] trainingSet, double yesterdayLikelihood, double tolerance)
        {
            var N        = trainingSet.Length;
            var guessess = new List <ObservationWithLikelihood <double[]> >();

            for (var n = N - 2; n > 0; n--)
            {
                var x          = new[] { trainingSet[n] };
                var likelihood = LogLikelihood.Calculate(x, model.Mixture.Coefficients, GetCovariances(model.Mixture.Components), GetMeans(model.Mixture.Components));
                //Debug.Write((new Vector(observations[n])).ToString() + " : " + likelihood + " " + Environment.NewLine);

                if (Math.Abs(yesterdayLikelihood) - tolerance < Math.Abs(likelihood) && Math.Abs(yesterdayLikelihood) + tolerance > Math.Abs(likelihood))
                {
                    guessess.Add(new ObservationWithLikelihood <double[]>()
                    {
                        LogLikelihood = likelihood, Observation = trainingSet[n], PlaceInSequence = n - 1
                    });
                }
            }

            return(guessess);
        }