Beispiel #1
0
        public void TrainAndValidate()
        {
            var       clusterSizes = new int[] { 10, 100, 150, 200, 250, 300, 400, 500, 750, 1000, 2000 };
            CSVWriter csvWriter    = new CSVWriter(@"..\..\testdata\validations.csv", ";");

            Console.WriteLine("Writing validation results to validations.csv");

            foreach (var driver in drivers)
            {
                var currentTrips = trips.Where(t => t.DriverId.Equals(driver));

                for (int i = 1; i < currentTrips.Count() - 1; i++)
                {
                    List <TripSummary> trainingSet   = new List <TripSummary>();
                    List <TripSummary> validationSet = new List <TripSummary>();

                    int j = 0;
                    foreach (var trip in currentTrips)
                    {
                        if (j++ < i)
                        {
                            trainingSet.Add(trip);
                        }
                        else
                        {
                            validationSet.Add(trip);
                        }
                    }

                    foreach (var clusterSize in clusterSizes)
                    {
                        RoutePrediction routePrediction = new RoutePrediction(clusterSize);

                        RoutePredictionValidationResult result = routePrediction.TrainAndValidate(trainingSet, validationSet);
                        csvWriter.WriteRow(driver, clusterSize, trainingSet.Count(), validationSet.Count(), result.Validations);
                    }
                }
            }
            Console.WriteLine("done");
        }
        public RoutePredictionValidationResult TrainAndValidate(IEnumerable<TripSummary> trainingTrips, IEnumerable<TripSummary> validationTrips)
        {
            // nulling the existing clusters to load a new table
            endLocationRoot = null;
            startLocationRoot = null;
            RoutePredictionValidationResult result = new RoutePredictionValidationResult();

            try
            {
                foreach (var trip in trainingTrips)
                {
                    AddTripSummary(trip);
                }
                result.NrOfTrainingSessions = trainingTrips.Count();

                foreach (var validationItem in validationTrips)
                {
                    result.Validations.Add(ValidateRoutePrediction(validationItem));
                }
            }
            catch
            {
                endLocationRoot = null;
                startLocationRoot = null;
            }
            return result;
        }