public static BinaryClassificationPrediction RunBinaryClassification <TRowModel>(this Translation <TRowModel> translation, IDb db) where TRowModel : class, new() { if (translation.Operation.MiningOp != DataMinner.Mining.Enums.MiningOp.BinaryClassification) { throw new Exception("Cannot run binary classification on translation not meant for binary classification."); } // Gather initial data from the DB. We need this to train our binary classification operation var sqlResults = new List <TRowModel>(); translation.RunSQL(db, (model) => { sqlResults.Add(model); }); // Here we are doing a binary classification operation var binaryClassifier = new BinaryClassification <TRowModel>(sqlResults); // Build the model so we can begin to use and classify binaryClassifier.BuildModel(); BinaryClassificationData sentiment = new BinaryClassificationData { SentimentText = translation.Operation.Text }; var result = binaryClassifier.Evaluate(sentiment); return(result); }
private static int Main(string[] args) { // Test if input arguments were supplied. Parser.Default.ParseArguments <Options>(args) .WithParsed <Options>(o => { // set logger LoggingLevelSwitch levelSwitch = new LoggingLevelSwitch { MinimumLevel = LogEventLevel.Debug }; Logger log = new LoggerConfiguration() .MinimumLevel.ControlledBy(levelSwitch) .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Debug) .WriteTo.File("backend_component_model_log-.txt", outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}", rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: LogEventLevel.Information) .CreateLogger(); log.ForContext <MachineLearning>(); // load environmental variables // DB connection configuration JObject o1 = JObject.Parse(File.ReadAllText(@"C:\Users\Administrator\Documents\GitHub\machine-fault-diagnosis\backend\components\model\model_app\model_app\config\DBconfig.json")); Environment.SetEnvironmentVariable("DBURL", (string)o1["DBURL"]); Environment.SetEnvironmentVariable("DBUSER", (string)o1["DBUSER"]); Environment.SetEnvironmentVariable("DBPW", (string)o1["DBPW"]); // Model training configuration JObject o2 = JObject.Parse(File.ReadAllText(@"C:\Users\Administrator\Documents\GitHub\machine-fault-diagnosis\backend\components\model\model_app\model_app\config\Trainconfig.json")); Environment.SetEnvironmentVariable("ModelFile", (string)o2["ModelFile"]); Environment.SetEnvironmentVariable("DataFile", (string)o2["DataFile"]); Environment.SetEnvironmentVariable("TrainedModelFile", (string)o2["TrainedModelFile"]); Environment.SetEnvironmentVariable("TrainingLogFile", (string)o2["TrainingLogFile"]); if (o.mode == "I" || o.mode == "Interactive") { // Opens the interactive C# app } else { // Run machine learning engine in the background switch (o.ModelType) { case "ProbabilisticNetwork": log.Information("Start Probabilistic Graphical Model Engine"); Console.WriteLine("Please choose a task (Train, Inference or All)"); string t = Console.ReadLine(); string estimateStructure1; if (t != "Inference") { Console.WriteLine("Please choose whether to estimated the graph structure or not ( Yes or No)"); estimateStructure1 = Console.ReadLine(); } else { estimateStructure1 = "No"; } PGM BNEngine = new PGM(); int result = BNEngine.Run(task: t, estimateStructure: estimateStructure1); break; case "TimeSeriesAnalysis": log.Information("Start Time-series Analysis Engine"); break; case "BinaryClassification": log.Information("Start Binary Classification Engine"); string[] algorithms1 = { "AveragedPerceptronTrainer", "SdcaLogisticRegressionBinaryTrainer", "SdcaNonCalibratedBinaryTrainer", "SymbolicSgdLogisticRegressionBinaryTrainer", "LbfgsLogisticRegressionBinaryTrainer", "LightGbmBinaryTrainer", "FastTreeBinaryTrainer", "FastForestBinaryTrainer", "GamBinaryTrainer", "FieldAwareFactorizationMachineTrainer", "PriorTrainer", "LinearSvmTrainer" }; Console.WriteLine("Please choose an algorithm from below"); Console.WriteLine(algorithms1); string al1 = Console.ReadLine(); BinaryClassification bc = new BinaryClassification(al1); int bcResult = bc.Run(); break; case "MultiClassification": log.Information("Start Multi Classification Engine"); string[] algorithms2 = { "LightGbmMulticlassTrainer", "SdcaMaximumEntropyMulticlassTrainer", "SdcaNonCalibratedMulticlassTrainer", "LbfgsMaximumEntropyMulticlassTrainer", "NaiveBayesMulticlassTrainer", "OneVersusAllTrainer", "PairwiseCouplingTrainer", "ImageClassificationTrainer" }; Console.WriteLine("Please choose an algorithm from below"); Console.WriteLine(algorithms2); string al2 = Console.ReadLine(); MultiClassification mc = new MultiClassification(al2); int mcResult = mc.Run(); break; case "Regression": log.Information("Start Regression Engine"); string[] algorithms3 = { "LbfgsPoissonRegressionTrainer", "LightGbmRegressionTrainer", "SdcaRegressionTrainer", "OlsTrainer", "OnlineGradientDescentTrainer", "FastTreeRegressionTrainer", "FastTreeTweedieTrainer", "FastForestRegressionTrainer", "GamRegressionTrainer" }; Console.WriteLine("Please choose an algorithm from below"); Console.WriteLine(algorithms3); string al3 = Console.ReadLine(); Regression rg = new Regression(al3); int rgResult = rg.Run(); break; case "Clustering": log.Information("Start Clustering Engine. Use KMeans algorithm"); string al4 = "KMeans"; Clustering cluster = new Clustering(al4); int clusResult = cluster.Run(); break; case "AnomalyDetection": log.Information("Start Anomaly Detection Engine. Use Randomized PCA algorithm"); string al5 = "RandomPCA"; Anomaly ano = new Anomaly(al5); int anoResult = ano.Run(); break; case "Ranking": log.Information("Start Ranking Engine"); string[] algorithms6 = { "LightGbmRankingTrainer", "FastTreeRankingTrainer" }; Console.WriteLine("Please choose an algorithm from below"); Console.WriteLine(algorithms6); string al6 = Console.ReadLine(); Ranking rank = new Ranking(al6); int rankResult = rank.Run(); break; case "Recommendation": log.Information("Start Recommendation Engine"); string al7 = "MatrixFactorizationTrainer"; Recommendation recomm = new Recommendation(al7); int recommResult = recomm.Run(); break; case "Forecast": log.Information("Start Forecasting Engine"); string al8 = "ForecastBySsa"; Forecast forecast = new Forecast(al8); int forecastResult = forecast.Run(); break; default: log.Information("Start AutoML Engine"); break; } } } ).WithNotParsed(HandleParseError); return(0); }
static async Task BinaryClassifier(bool train = true) { var sqlConnection = $@"Server = localhost;database = Local;user = sa;password = sa"; var traindata = await Utilities.SQL.SQLServer.ExecuteReaderAsync <HeartData>(sqlConnection, $@"SELECT * FROM HeartTraining"); var testdata = await Utilities.SQL.SQLServer.ExecuteReaderAsync <HeartData>(sqlConnection, $@"SELECT * FROM HeartTest"); double accuracy = double.MinValue; string bestAlg = string.Empty; var mlContext = new MLContext(); var algorithms = new Dictionary <string, Func <IEnumerable <HeartData>, Action <ITransformer>, PredictionEngine <HeartData, HeartPredict> > >() { { "FastTree", (data, action) => BinaryClassification.FastTree <HeartData, HeartPredict>(data, additionModelAction: action) }, { "FastForest", (data, action) => BinaryClassification.FastForest <HeartData, HeartPredict>(data, additionModelAction: action) }, { "SdcaLogisticRegression", (data, action) => BinaryClassification.SdcaLogisticRegression <HeartData, HeartPredict>(data, additionModelAction: action) }, }; foreach (var algorithm in algorithms) { PredictionEngine <HeartData, HeartPredict> engine = default; ITransformer model = default; var path = $@"BClassification_{algorithm.Key}.zip"; if (File.Exists(path) && !train) { model = MachineLearning.Global.LoadModel(path); engine = mlContext.Model.CreatePredictionEngine <HeartData, HeartPredict>(model); } else { engine = algorithm.Value(traindata, (mdl) => { model = mdl; }); } MachineLearning.Global.SaveModel(model, $@"Binaryclass_{algorithm.Key}.zip"); MachineLearning.ConsoleHelper.ConsoleWriteHeader($@"Evaluate metrics for {algorithm.Key} algorithm."); try { var metrics = Metrics.EvaluateBinaryClassificationMetrics(model, mlContext.Data.LoadFromEnumerable(testdata), labelColumnName: nameof(HeartData.Label)); foreach (var prop in metrics.GetType().GetProperties()) { Console.WriteLine($@"{prop.Name} : {prop.GetValue(metrics)}"); } if (metrics.Accuracy > accuracy) { accuracy = metrics.Accuracy; bestAlg = algorithm.Key; } } catch (Exception e) { Console.WriteLine($"Unable to evaluate metrics : {e.Message}"); } foreach (var t in testdata) { var predict = engine.Predict(t); Console.WriteLine(string.Format(@"Actual {0,5} / Predict {1,5} with prob of {2,5}", t.Label, predict.Prediction, predict.Probability)); } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($@"Best algorithm based-on accuracy : {bestAlg}"); Console.ForegroundColor = ConsoleColor.White; }