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); }
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); }