public string Train(List <TrainData> data) { try { mlContext = new MLContext(); splitDataView = Metrics.Look(() => mlContext.LoadData(data)); model = Metrics.Look(() => mlContext.BuildAndTrainModel(splitDataView)); return("Ok"); } catch (Exception e) { return(e.StackTrace); } }
static void Main(string[] args) { var mlContext = new MLContext(); string dataFilePath = Path.Combine(Environment.CurrentDirectory, @"Data\yelp_labelled.txt"); var splitDataView = mlContext.LoadData(dataFilePath); ITransformer model = mlContext.BuildAndTrainModel(splitDataView.TrainSet); var metrics = mlContext.Evaluate(model, splitDataView.TestSet); Console.WriteLine("\r\n--------------- Model quality metrics evaluation ---------------"); Console.WriteLine($"Accuracy: {metrics.Accuracy:P2}"); Console.WriteLine($"Auc: {metrics.Auc:P2}"); Console.WriteLine($"F1Score: {metrics.F1Score:P2}"); string modelFilePaht = Path.Combine(Environment.CurrentDirectory, @"Data\Model.zip"); using (var fs = new FileStream(modelFilePaht, FileMode.Create, FileAccess.Write, FileShare.Write)) { mlContext.Model.Save(model, fs); } var prediction = mlContext.RunModel(model, "This was a very bad steak"); Console.WriteLine("\r\n--------------- Single Prediction with Trained Model ---------------"); Console.WriteLine($"This was a very bad steak. Prediction: {(Convert.ToBoolean(prediction.Prediction) ? "Positive" : "Negative")} | Probability: {prediction.Probability} "); var sampleTexts = new[] { "This was a horrible meal", "I love this spaghetti." }; var predictions = mlContext.LoadAndRunModel(modelFilePaht, sampleTexts); var textsAndPredictions = sampleTexts.Zip(predictions, (text, predition) => (text, prediction)); Console.WriteLine("\r\n--------------- Batch Prediction with Loaded Model ---------------"); foreach (var pair in textsAndPredictions) { Console.WriteLine($"{pair.text} | Prediction: {(Convert.ToBoolean(pair.prediction.Prediction) ? "Positive" : "Negative")} | Probability: {pair.prediction.Probability} "); } string lineText = Console.ReadLine(); while (lineText != "exit") { prediction = mlContext.RunModel(model, lineText); Console.WriteLine($"{(Convert.ToBoolean(prediction.Prediction) ? "Positive" : "Negative")} | Probability: {prediction.Probability} "); lineText = Console.ReadLine(); } }