Ejemplo n.º 1
0
        private static void TestSinglePrediction(MLContext mlContext, ITransformer model)
        {
            //Prediction test
            // Create prediction function and make prediction.
            var predictionFunction = mlContext.Model.CreatePredictionEngine <TaxiTrip, TaxiTripFarePrediction>(model);
            //Sample:
            //vendor_id,rate_code,passenger_count,trip_time_in_secs,trip_distance,payment_type,fare_amount
            //VTS,1,1,1140,3.75,CRD,15.5
            var taxiTripSample = new TaxiTrip()
            {
                VendorId       = "VTS",
                RateCode       = "1",
                PassengerCount = 1,
                TripTime       = 1140,
                TripDistance   = 3.75f,
                PaymentType    = "CRD",
                FareAmount     = 0 // To predict. Actual/Observed = 15.5
            };

            var prediction = predictionFunction.Predict(taxiTripSample);

            Console.WriteLine($"**********************************************************************");
            Console.WriteLine($"Predicted fare: {prediction.FareAmount:0.####}, actual fare: 15.5");
            Console.WriteLine($"**********************************************************************");
        }
Ejemplo n.º 2
0
        // Predicts fare amount based on test data, displays the predicted results
        private static void TestSinglePrediction(MLContext mlContext, ITransformer model)
        {
            // Uses the CreatePredictionEngine to predict the Taxifare
            var predictionFunction = mlContext.Model.CreatePredictionEngine <TaxiTrip, TaxiTripFarePrediction>(model);

            //Sample data to test the prediction-engine
            var taxiTripSample = new TaxiTrip()
            {
                VendorId       = "VTS",
                RateCode       = "1",
                PassengerCount = 1,
                TripTime       = 1140,
                TripDistance   = 3.75f,
                PaymentType    = "CRD",
                FareAmount     = 0
            };

            // Run prediction pipeline on one example
            var prediction = predictionFunction.Predict(taxiTripSample);


            Console.WriteLine($"**********************************************************************");
            Console.WriteLine($"Predicted fare: {prediction.FareAmount:0.####}, actual fare: 15.5");
            Console.WriteLine($"**********************************************************************");
        }
Ejemplo n.º 3
0
        private static void TestSinglePrediction(MLContext mlContext)
        {
            //load the model
            ITransformer loadedModel;

            using (var stream = new FileStream(_modelPath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                loadedModel = mlContext.Model.Load(stream);
            }

            //Prediction test
            // Create prediction function and make prediction.
            var predictionFunction = loadedModel.MakePredictionFunction <TaxiTrip, TaxiTripFarePrediction>(mlContext);

            //Sample:
            //vendor_id,rate_code,passenger_count,trip_time_in_secs,trip_distance,payment_type,fare_amount
            //VTS,1,1,1140,3.75,CRD,15.5
            var taxiTripSample = new TaxiTrip()
            {
                VendorId       = "VTS",
                RateCode       = "1",
                PassengerCount = 1,
                TripTime       = 1140,
                TripDistance   = 3.75f,
                PaymentType    = "CRD",
                FareAmount     = 0 // To predict. Actual/Observed = 15.5
            };

            var prediction = predictionFunction.Predict(taxiTripSample);

            Console.WriteLine($"**********************************************************************");
            Console.WriteLine($"Predicted fare: {prediction.FareAmount:0.####}, actual fare: 15.5");
            Console.WriteLine($"**********************************************************************");
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> Edit(int id, [Bind("ID,dropOffLat,pdropOffLat,pickUpLat,pickUpLon")] TaxiTrip taxiTrip)
        {
            if (id != taxiTrip.ID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(taxiTrip);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!TaxiTripExists(taxiTrip.ID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Index"));
            }
            return(View(taxiTrip));
        }
Ejemplo n.º 5
0
        public TaxiTripFarePrediction GetFarePrediction(TaxiTrip trip)
        {
            var predictionFunction            = mlContext.Model.CreatePredictionEngine <TaxiTrip, TaxiTripFarePrediction>(dataTransformer);
            TaxiTripFarePrediction prediction = predictionFunction.Predict(trip);

            return(prediction);
        }
Ejemplo n.º 6
0
        static void Main(string[] args)
        {
            MLContext mlContext = new MLContext(seed: 0);
            var       model     = Train(mlContext, _trainDataPath);

            Evaluate(mlContext, model);

            TestSinglePrediction(mlContext);
            ITransformer loadedModel;

            using (var stream = new FileStream(_modelPath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                loadedModel = mlContext.Model.Load(stream);
            }
            var predictionFunction = loadedModel.CreatePredictionEngine <TaxiTrip, TaxiTripFarePrediction>(mlContext);
            var taxiTripSample     = new TaxiTrip()
            {
                VendorId       = "VTS",
                RateCode       = "1",
                PassengerCount = 1,
                TripTime       = 1140,
                TripDistance   = 3.75f,
                PaymentType    = "CRD",
                FareAmount     = 0 // To predict. Actual/Observed = 15.5
            };
            var prediction = predictionFunction.Predict(taxiTripSample);

            Console.WriteLine();
            Console.WriteLine($"*****************************************************");
            Console.WriteLine($"Predicted fare: {prediction.FareAmount:0.####}, actual fare: 15.5");
            Console.WriteLine($"*****************************************************");
            Console.WriteLine();
        }
Ejemplo n.º 7
0
        private static void TestSinglePrediction(MLContext mlContext)
        {
            //Sample:
            //vendor_id,rate_code,passenger_count,trip_time_in_secs,trip_distance,payment_type,fare_amount
            //VTS,1,1,1140,3.75,CRD,15.5

            var taxiTripSample = new TaxiTrip()
            {
                VendorId       = "VTS",
                RateCode       = "1",
                PassengerCount = 1,
                TripTime       = 1140,
                TripDistance   = 3.75f,
                PaymentType    = "CRD",
                FareAmount     = 0 // To predict. Actual/Observed = 15.5
            };

            ///
            ITransformer trainedModel = mlContext.Model.Load(ModelPath, out var modelInputSchema);

            // Create prediction engine related to the loaded trained model
            var predEngine = mlContext.Model.CreatePredictionEngine <TaxiTrip, TaxiTripFarePredictionWithContribution>(trainedModel);

            //Score
            var prediction = predEngine.Predict(taxiTripSample);

            ///

            Console.WriteLine($"**********************************************************************");
            Console.WriteLine($"Predicted fare: {prediction.FareAmount:0.####}, actual fare: 15.5");
            Console.WriteLine($"**********************************************************************");
        }
Ejemplo n.º 8
0
 public IActionResult Create([FromBody] TaxiTrip item)
 {
     if (item == null)
     {
         return(BadRequest());
     }
     TaxiTrips.Add(item);
     return(CreatedAtRoute("GetTrip", new { id = item.Key }, item));
 }
Ejemplo n.º 9
0
        public IActionResult Post([FromBody] TaxiTrip trip)
        {
            // Create prediction engine related to the loaded trained model
            var function = _prediction.MakePredictionFunction <TaxiTrip, TaxiTripFarePrediction>(_mlContext);
            //Score
            var farePrediction = function.Predict(trip);

            return(Ok(farePrediction.FareAmount));
        }
Ejemplo n.º 10
0
        public async Task <IActionResult> Create([Bind("ID,dropOffLat,pdropOffLat,pickUpLat,pickUpLon")] TaxiTrip taxiTrip)
        {
            if (ModelState.IsValid)
            {
                _context.Add(taxiTrip);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            return(View(taxiTrip));
        }
Ejemplo n.º 11
0
            public static void Run()
            {
                MLContext mlContext = new MLContext();

                // STEP 1: Load data
                IDataView trainDataView = mlContext.Data.LoadFromTextFile <TaxiTrip>(TrainDataPath, separatorChar: ',', hasHeader: true);
                IDataView testDataView  = mlContext.Data.LoadFromTextFile <TaxiTrip>(TestDataPath, separatorChar: ',', hasHeader: true);

                // STEP 2: Run AutoML experiment
                Console.WriteLine($"Running AutoML multiclass classification experiment for {ExperimentTime} seconds...");
                ExperimentResult <MulticlassClassificationMetrics> experimentResult = mlContext.Auto()
                                                                                      .CreateMulticlassClassificationExperiment(ExperimentTime)
                                                                                      .Execute(trainDataView, LabelColumnName);

                // STEP 3: Print metric from the best model
                RunDetail <MulticlassClassificationMetrics> bestRun = experimentResult.BestRun;

                Console.WriteLine($"Total models produced: {experimentResult.RunDetails.Count()}");
                Console.WriteLine($"Best model's trainer: {bestRun.TrainerName}");
                Console.WriteLine($"Metrics of best model from validation data --");
                PrintMetrics(bestRun.ValidationMetrics);

                // STEP 6: Create prediction engine from the best trained model
                var predictionEngine = mlContext.Model.CreatePredictionEngine <TaxiTrip, TaxiTripFarePrediction>(bestRun.Model);

                // STEP 7: Initialize new pixel data, and get the predicted number
                var testTaxiTripData = new TaxiTrip
                {
                    VendorId          = "CMT",
                    RateCode          = 1,
                    PassengerCount    = 1,
                    TripTimeInSeconds = 1271,
                    TripDistance      = 3.8F,
                    PaymentType       = "CRD",
                    FareAmount        = 17.5F,
                };
                var prediction = predictionEngine.Predict(testTaxiTripData);

                Console.WriteLine($"Predicted number for test data:");

                foreach (var x in prediction.Payment)
                {
                    Console.WriteLine(x.ToString());
                }

                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
            }
Ejemplo n.º 12
0
        public JsonResult GetPrediction([FromBody] TaxiTrip trip)
        {
            MLContext    mlContext = new MLContext(seed: 0);
            ITransformer loadedModel;

            using (var stream = new FileStream(_ModelPath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                loadedModel = mlContext.Model.Load(stream);
            }

            var predictionFunction = loadedModel.CreatePredictionEngine <TaxiTrip, TaxiTripFarePrediction>(mlContext);

            var prediction = predictionFunction.Predict(trip);

            return(new JsonResult(Math.Round(prediction.FareAmount, 2)));
        }
Ejemplo n.º 13
0
        private async Task Predict()
        {
            Trip = new TaxiTrip()
            {
                FareAmount     = FareAmount,
                PassengerCount = PassengerCount,
                PaymentType    = PaymentType,
                RateCode       = RateCode,
                TripDistance   = TripDistance,
                TripTime       = TripTime,
                VendorId       = VendorId
            };

            var amount = await PredictionService.Predict(Trip);

            await App.Current.MainPage.DisplayAlert("Prediction", $"Trip Fare: {amount:C2}", "OK");
        }
Ejemplo n.º 14
0
        public IActionResult Update(string id, [FromBody] TaxiTrip item)
        {
            if (item == null || item.Key != id)
            {
                return(BadRequest());
            }

            var todo = TaxiTrips.Find(id);

            if (todo == null)
            {
                return(NotFound());
            }

            TaxiTrips.Update(item);
            return(new NoContentResult());
        }
Ejemplo n.º 15
0
        public ActionResult Create(TaxiTrip trip)
        {
            TaxiFarePredictionEngine.Models.TaxiTrip taxitrip = new TaxiFarePredictionEngine.Models.TaxiTrip
            {
                VendorId       = trip.VendorId.ToString(),
                RateCode       = trip.RateCode,
                PassengerCount = trip.PassengerCount,
                TripTime       = trip.TripTime,
                TripDistance   = trip.TripDistance,
                PaymentType    = trip.PaymentType.ToString()
            };

            TaxiFarePredictionEngine.PredictionEngine predictionEngine        = new TaxiFarePredictionEngine.PredictionEngine();
            TaxiFarePredictionEngine.Models.TaxiTripFarePrediction prediction = predictionEngine.GetFarePrediction(taxitrip);

            trip.FareAmount = prediction.FareAmount;

            return(View("View", trip));
        }
Ejemplo n.º 16
0
        public static void LoadDataInCache()
        {
            var             currentLine          = string.Empty;
            string          baseDataRelativePath = @"../../../../Data";
            string          filepath             = GetAbsolutePath($"{baseDataRelativePath}/taxi-fare-full.csv");
            List <TaxiTrip> dataList             = new List <TaxiTrip>();
            int             i = 0;

            using (StreamReader r = new StreamReader(filepath))
            {
                while ((currentLine = r.ReadLine()) != null)
                {
                    string[] incomingData = currentLine.Split(",");
                    TaxiTrip data         = new TaxiTrip();

                    data.RateCode       = float.Parse(incomingData[0]);
                    data.PassengerCount = float.Parse(incomingData[1]);
                    data.TripTime       = float.Parse(incomingData[2]);
                    data.TripDistance   = float.Parse(incomingData[3]);
                    data.FareAmount     = float.Parse(incomingData[4]);

                    dataList.Add(data);

                    if (dataList.Count > 100)
                    {
                        //Remove first entries and move sliding window
                        if (TrainingData.Count > dataList.Count)
                        {
                            TrainingData.RemoveRange(0, dataList.Count);
                        }

                        TrainingData.AddRange(dataList);
                        //publish message for notifying data upate
                        Topic.Publish(new Message("DataSet has been updated."), DeliveryOption.All);
                        dataList.Clear();
                        Console.WriteLine("Chunk of data has been added:" + i);
                        i++;
                        //Sleep for 5 minutes
                        Thread.Sleep(30000);
                    }
                }
            }
        }
Ejemplo n.º 17
0
        private static void TestSinglePrediction(MLContext mlContext, ITransformer model)
        {
            TestSinglePrediction(mlContext, model);
            var predictionFunction = mlContext.Model.CreatePredictionEngine <TaxiTrip, TaxiTripFarePrediction>(model);
            var taxiTripSample     = new TaxiTrip()
            {
                VendorId       = "VTS",
                RateCode       = "1",
                PassengerCount = 1,
                TripTime       = 1140,
                TripDistance   = 3.75f,
                PaymentType    = "CRD",
                FareAmount     = 0 // To predict. Actual/Observed = 15.5
            };
            var prediction = predictionFunction.Predict(taxiTripSample);

            Console.WriteLine($"**********************************************************************");
            Console.WriteLine($"Predicted fare: {prediction.FareAmount:0.####}, actual fare: 15.5");
            Console.WriteLine($"**********************************************************************");
        }
Ejemplo n.º 18
0
        public async Task RegressionTutorial()
        {
            var regression = new RegressionTaxi();
            var model      = await regression.Train();

            regression.Evaluate(model);

            var trip1 = new TaxiTrip
            {
                VendorId       = "VTS",
                RateCode       = "1",
                PassengerCount = 1,
                TripDistance   = 10.33f,
                PaymentType    = "CSH",
                FareAmount     = 0 // predict it. actual = 29.5
            };

            TaxiTripFarePrediction prediction = model.Predict(trip1);

            Console.WriteLine("Predicted fare: {0}, actual fare: 29.5", prediction.FareAmount);
        }
Ejemplo n.º 19
0
        public async static Task <float> Predict(TaxiTrip trip)
        {
            try
            {
                var json     = JsonConvert.SerializeObject(trip);
                var content  = new StringContent(json, Encoding.UTF8, "application/json");
                var response = await client.PostAsync(TaxiFarePredictionService, content);

                if (response.IsSuccessStatusCode)
                {
                    var result = await response.Content.ReadAsStringAsync();

                    return(float.Parse(result));
                }
            }
            catch (Exception ex)
            {
            }

            return(0);
        }
        private async void MLNet_Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
        {
            ResultTextBlock.Text = string.Empty;

            var trip = new TaxiTrip
            {
                VendorId       = "VTS",
                RateCode       = "1",
                PassengerCount = 1,
                TripDistance   = 10.33f,
                PaymentType    = "CSH",
                FareAmount     = 0 // predict it. actual = 29.5
            };

            MLContext mlContext = new MLContext(seed: 0);

            var modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri($"ms-appx:///Assets/TaxiFareModel.zip"));

            ITransformer trainedModel     = mlContext.Model.Load(await modelFile.OpenStreamForReadAsync(), out var modelInputSchema);
            var          predEngine       = mlContext.Model.CreatePredictionEngine <TaxiTrip, TaxiTripFarePrediction>(trainedModel);
            var          resultprediction = predEngine.Predict(trip);

            ResultTextBlock.Text = resultprediction.FareAmount.ToString("C");
        }
Ejemplo n.º 21
0
        public ActionResult Post([FromBody] TaxiTrip input)
        {
            TaxiTripFarePrediction prediction = _predictionEnginePool.Predict(modelName: "TaxiTripFarePredictionModel", example: input);

            return(Ok(prediction.FareAmount));
        }
Ejemplo n.º 22
0
        static void Main(string[] args)
        {
            string TrainDataPath = "NYCTaxi/train.csv";
            string TestDataPath  = "NYCTaxi/test.csv";

            //Create ML Context with seed for repeteable/deterministic results
            MLContext mlContext = new MLContext(seed: 0);

            // STEP 1: Common data loading configuration
            TextLoader textLoader = mlContext.Data.CreateTextReader(new[]
            {
                new TextLoader.Column("VendorId", DataKind.Text, 0),
                new TextLoader.Column("RateCode", DataKind.Text, 1),
                new TextLoader.Column("PassengerCount", DataKind.R4, 2),
                new TextLoader.Column("TripTime", DataKind.R4, 3),
                new TextLoader.Column("TripDistance", DataKind.R4, 4),
                new TextLoader.Column("PaymentType", DataKind.Text, 5),
                new TextLoader.Column("FareAmount", DataKind.R4, 6),
                new TextLoader.Column("TipAmount", DataKind.R4, 7)
            },
                                                                    hasHeader: true,
                                                                    separatorChar: ','
                                                                    );

            IDataView baseTrainingDataView = textLoader.Read(TrainDataPath);
            IDataView testDataView         = textLoader.Read(TestDataPath);

            //Sample code of removing extreme data like "outliers" for FareAmounts higher than $150 and lower than $1 which can be error-data
            var       cnt = baseTrainingDataView.GetColumn <float>(mlContext, "FareAmount").Count();
            IDataView trainingDataView = mlContext.Data.FilterByColumn(baseTrainingDataView, "FareAmount", lowerBound: 1, upperBound: 150);
            var       cnt2             = trainingDataView.GetColumn <float>(mlContext, "FareAmount").Count();

            // STEP 2: Common data process configuration with pipeline data transformations
            var dataProcessPipeline = mlContext.Transforms.Concatenate("Y", "FareAmount", "TipAmount")
                                      .Append(mlContext.Transforms.Categorical.OneHotEncoding("VendorId", "VendorIdEncoded"))
                                      .Append(mlContext.Transforms.Categorical.OneHotEncoding("RateCode", "RateCodeEncoded"))
                                      .Append(mlContext.Transforms.Categorical.OneHotEncoding("PaymentType", "PaymentTypeEncoded"))
                                      .Append(mlContext.Transforms.Normalize(inputName: "PassengerCount", mode: NormalizerMode.MeanVariance))
                                      .Append(mlContext.Transforms.Normalize(inputName: "TripTime", mode: NormalizerMode.MeanVariance))
                                      .Append(mlContext.Transforms.Normalize(inputName: "TripDistance", mode: NormalizerMode.MeanVariance))
                                      .Append(mlContext.Transforms.Concatenate("X", "VendorIdEncoded", "RateCodeEncoded", "PaymentTypeEncoded", "PassengerCount", "TripTime", "TripDistance"))
                                      .Append(new TensorFlowEstimator(mlContext, new TensorFlowTransform.Arguments()
            {
                ModelLocation         = "NYCTaxi/model",         // Model is created with this script: DeepLearningWithMLdotNet\NYCTaxiMultiOutputRegression\TF_MultiOutputLR.py
                InputColumns          = new[] { "X" },
                OutputColumns         = new[] { "RegScores" },
                LabelColumn           = "Y",
                TensorFlowLabel       = "Y",
                OptimizationOperation = "MomentumOptimizer",
                LossOperation         = "Loss",
                Epoch = 10,
                LearningRateOperation = "learning_rate",
                LearningRate          = 0.01f,
                BatchSize             = 20,
                ReTrain = true
            }));

            var trainedModel = dataProcessPipeline.Fit(baseTrainingDataView);


            // The evaluation does not work. It requires the score to be scalar.
            // However, for multi-output regression its vector
            // var predicted = trainedModel.Transform(testDataView);
            // var metrics = mlContext.Regression.Evaluate(predicted, "Y", "RegScores");

            // Create prediction function and test prediction
            var predictFunction = trainedModel.CreatePredictionEngine <TaxiTrip, TaxiTripFarePrediction>(mlContext);

            var oneSample = new TaxiTrip()
            {
                VendorId       = "CMT",
                RateCode       = "1",
                PassengerCount = 2,
                TripTime       = 1405,
                TripDistance   = 10.3f,
                PaymentType    = "CRD",
                FareAmount     = 0, // To predict. Actual/Observed = 31.0
                TipAmount      = 0  // To predict. Actual/Observed = 7.36
            };

            var prediction = predictFunction.Predict(oneSample);

            Console.WriteLine("[FareAmount, TipAmount] = [{0}]", string.Join(", ", prediction.RegScores));
            Console.WriteLine("Press any key to exit..");
            Console.ReadLine();
        }
Ejemplo n.º 23
0
        private static void Main(string[] args)
        {
            try {
                LinearRegression <TaxiTrip> regression;

                #region Creating model
                if (!File.Exists("model.lrm"))
                {
                    Console.WriteLine("DEBUG: Training model...");

                    regression = new LinearRegression <TaxiTrip>(_trainDataPath, _nonencodedColumns, _encodedColumns);
                }
                else
                {
                    Console.WriteLine("Trained model is found");
                    Console.Write("Do you want to load the existing model or train a new model? [L/T] ");

                    switch (Console.ReadLine())
                    {
                    case "L" or "l":
                        Console.WriteLine("DEBUG: Loading model...");

                        regression = new LinearRegression <TaxiTrip>("model.lrm");
                        break;

                    case "T" or "t":
                        Console.WriteLine("DEBUG: Training model...");

                        regression = new LinearRegression <TaxiTrip>(_trainDataPath, _nonencodedColumns, _encodedColumns);
                        break;

                    default:
                        throw new ArgumentException("Invalid input");
                    }
                }
                #endregion

                #region Testing model
                Console.WriteLine("DEBUG: Testing model...");
                var metrics = regression.TestModel(_testDataPath);

                Console.WriteLine();
                Console.WriteLine("*************************************************");
                Console.WriteLine("*       Model quality metrics evaluation         ");
                Console.WriteLine("*------------------------------------------------");
                Console.WriteLine($"*  R2 Score:       {metrics.RSquared,0:F2}");
                Console.WriteLine($"*  RMS Error:      {metrics.RootMeanSquaredError,0:F2}");
                Console.WriteLine("*************************************************");
                #endregion

                #region Saving model
                Console.WriteLine("DEBUG: Saving model...");
                regression.SaveModel("model.lrm");
                #endregion

                #region Testing model with a single sample
                var sample = new TaxiTrip()
                {
                    VendorId       = "VTS",
                    RateCode       = (int)RateCode.Standard,
                    PassengerCount = 1,
                    TripTime       = 1140,
                    TripDistance   = 3.75f,
                    PaymentType    = "CRD",
                    FareAmount     = 15.5f
                };

                var sampleResult = regression.SingleSamplePrediction <TaxiTripFarePrediction>(sample);

                Console.WriteLine();
                Console.WriteLine("*************************************************");
                Console.WriteLine("*       Testing model with a sample              ");
                Console.WriteLine("*------------------------------------------------");
                Console.WriteLine($"*  Predicted fare: {sampleResult.FareAmount,0:F2}");
                Console.WriteLine($"*  Actual fare:    {sample.FareAmount,0:F2}");
                Console.WriteLine("*************************************************");
                #endregion
            } catch (Exception e) {
                Console.WriteLine($"ERROR: {e.Message}");
            }
        }
Ejemplo n.º 24
0
        static void Main(string[] args)
        {
            var mlContext = new MLContext();

            var loader = mlContext.Data.CreateTextLoader(new TextLoader.Options
            {
                HasHeader  = true,
                Separators = new[] { ',' },
                Columns    = new TextLoader.Column[] {
                    new TextLoader.Column("VendorID", DataKind.String, 0),
                    new TextLoader.Column("PassengerCount", DataKind.Single, 3),
                    new TextLoader.Column("TripDistance", DataKind.Single, 4),
                    new TextLoader.Column("RateCard", DataKind.String, 5),
                    new TextLoader.Column("PaymentType", DataKind.String, 9),
                    new TextLoader.Column("FareAmount", DataKind.Single, 10),
                    new TextLoader.Column("PickUpDateTime", DataKind.DateTime, 1),
                    new TextLoader.Column("DropOffDateTime", DataKind.DateTime, 2),
                }
            });

            // load the data
            Console.WriteLine("*** Loading Training Data ***");
            IDataView dataView = loader.Load(DataPath);

            Console.WriteLine("*** Done ***");

            dataView = mlContext.Data.FilterRowsByColumn(dataView, "FareAmount", lowerBound: 0);
            dataView = mlContext.Data.FilterRowsByColumn(dataView, "PassengerCount", lowerBound: 0);
            dataView = mlContext.Data.FilterRowsByColumn(dataView, "TripDistance", lowerBound: 0);


            // prepare the training data
            var trainingData = mlContext.Data.TrainTestSplit(dataView, 0.99);

            // create learning pipeline
            var pipeline1 = mlContext.Transforms.CopyColumns(outputColumnName: "Label", inputColumnName: "FareAmount")
                            .Append(mlContext.Transforms.Categorical.OneHotEncoding(inputColumnName: "VendorID", outputColumnName: "EncodedVendorID"))
                            .Append(mlContext.Transforms.Categorical.OneHotEncoding(inputColumnName: "RateCard", outputColumnName: "EncodedRateCard"))
                            .Append(mlContext.Transforms.Categorical.OneHotEncoding(inputColumnName: "PaymentType", outputColumnName: "EncodedPaymentType"));

            var pipeline = pipeline1
                           .Append(mlContext.Transforms.CustomMapping <TaxiTrip, TaxiTripTime>((inp, outp) =>
            {
                float tripTime = 0;

                if (inp.PickUpDateTime != DateTime.MinValue && inp.DropOffDateTime != DateTime.MinValue && inp.DropOffDateTime.Subtract(inp.PickUpDateTime).Minutes > 0)
                {
                    tripTime = (float)inp.DropOffDateTime.Subtract(inp.PickUpDateTime).Minutes;
                }

                outp.TripTime = tripTime;
            }, contractName: "TripTime"))
                           .Append(mlContext.Transforms.Concatenate("Features",
                                                                    "EncodedVendorID",//"VendorID",
                                                                    "PassengerCount",
                                                                    "TripDistance",
                                                                    "EncodedRateCard",    //"RateCard",
                                                                    "EncodedPaymentType", //"PaymentType",
                                                                    "TripTime"))
                           .Append(mlContext.Transforms.DropColumns("PickUpDateTime", "DropOffDateTime", "VendorID", "RateCard", "PaymentType"))
                           .AppendCacheCheckpoint(mlContext)
                           .Append(mlContext.Regression.Trainers.FastTree());

            //pipeline.Preview(dataView);

            // Train the model
            Console.WriteLine("*** Training the Model ***");
            var model = pipeline.Fit(trainingData.TrainSet);

            Console.WriteLine("*** Done ***");

            // get set of predictions
            Console.WriteLine("*** Evaluate the Model ***");
            var testData = model.Transform(trainingData.TestSet);

            Console.WriteLine("*** Done ***");

            // get the regression score
            var metrics = mlContext.Regression.Evaluate(testData, "Label", "Score");

            // print metrics
            Console.WriteLine();
            Console.WriteLine("Model Metrics:");
            Console.WriteLine($"RMSE: {metrics.RootMeanSquaredError:#.##}");
            Console.WriteLine($"MAE: {metrics.MeanAbsoluteError:#.##}");
            Console.WriteLine($"MSE: {metrics.MeanSquaredError:#.##}");

            // make a single prediction
            var predictionEngine = mlContext.Model.CreatePredictionEngine <TaxiTrip, TaxiTripPrediction>(model);

            // prep a single taxi trip
            var trip = new TaxiTrip
            {
                VendorID        = "1",
                PassengerCount  = 1,
                RateCard        = "1",
                TripDistance    = 3.75f,
                PaymentType     = "1",
                FareAmount      = 0,
                PickUpDateTime  = Convert.ToDateTime("2018-12-01 00:28:22"),
                DropOffDateTime = Convert.ToDateTime("2018-12-01 00:48:07")
            };

            var predictedFare = predictionEngine.Predict(trip);

            Console.WriteLine($"Predicted Price: {predictedFare.FareAmount:0.####}");
        }
Ejemplo n.º 25
0
        public TaxiTripFarePrediction GetTripFare(TaxiTrip taxiTrip)
        {
            var predictionFunction = loadedModel.MakePredictionFunction <TaxiTrip, TaxiTripFarePrediction>(mlContext);

            return(predictionFunction.Predict(taxiTrip));
        }