Esempio n. 1
0
        private static int Main(string[] args)
        {
            var customCulture = (System.Globalization.CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();

            customCulture.NumberFormat.NumberDecimalSeparator = ".";

            Thread.CurrentThread.CurrentCulture = customCulture;

            if (args.Length != 9)
            {
                DisplayUsage();
                Console.ReadKey();
                return(-1);
            }
            try
            {
                PrepareParameters(args);
                PrintParameters(args);

                if (DatabaseUtils.CheckIfExists(args))
                {
                    Console.WriteLine("Experiment already exists in database!");
                    return(0);
                }

                var sw = new Stopwatch();
                sw.Start();

                Console.WriteLine("----- Generating data ------");
                var dataGenerator = new DataGenerator();
                dataGenerator.GenerateTrainingData();
                dataGenerator.GenerateTestData();

                Console.WriteLine("----- Classification data ------");

                var dataClassificator = new C45BinaryClassificator(dataGenerator.TrainingData.ToArray());
                dataClassificator.Learn();

                Console.WriteLine("----- Creating model ------");

                var modelCreator = new ModelCreator(dataClassificator.OutputPath);
                modelCreator.Create();

                sw.Stop();

                Console.WriteLine("----- Calculating statistics ------");

                // Calculating jaccard index for training data
                var statistics = new StatisticsCalculator();
                statistics.CalculateStatistics(dataClassificator.DecisionTree,
                                               modelCreator.UniqueConstraints,
                                               dataGenerator);

                // Saving data to database
                DatabaseUtils.SaveToDatabase(dataClassificator, modelCreator,
                                             statistics,
                                             dataGenerator,
                                             sw.ElapsedMilliseconds);
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine(ex.Message);
                DatabaseUtils.SaveErrorToDatabase(ex.Message);
                return(-1);
            }
            catch (FormatException)
            {
                const string message = "Error parsing input parameters";
                DatabaseUtils.SaveErrorToDatabase(message);
                Console.WriteLine(message);
                return(-1);
            }

            return(0);
        }
Esempio n. 2
0
        /// <summary>
        /// Saves experiments data to database. Data is gathered from different program's classes given as parameters
        /// </summary>
        /// <param name="classificator">Instance of <see cref="C45BinaryClassificator"/>class
        /// (Used only for rules saving which is commented)</param>
        /// <param name="model"></param>
        /// <param name="statistics"></param>
        /// <param name="data"></param>
        /// <param name="executionTime"></param>
        public static void SaveToDatabase(C45BinaryClassificator classificator, ModelCreator model,
                                          StatisticsCalculator statistics, DataGenerator data,
                                          long executionTime)
        {
            Console.WriteLine(GlobalVariables.Dbpath);
            var db         = new Database(GlobalVariables.Dbpath);
            var experiment = db.NewExperiment();

            // Input variables
            experiment["Benchmark"]          = GlobalVariables.BenchmarkName;
            experiment["FeasibleExamples"]   = GlobalVariables.FeasibleExamplesCount;
            experiment["InfeasibleExamples"] = GlobalVariables.InfeasibleExamplesCount;
            experiment["Dimensions"]         = GlobalVariables.Dimensions;
            experiment["K"]              = GlobalVariables.K;
            experiment["Join"]           = GlobalVariables.Join;
            experiment["MaxHeight"]      = GlobalVariables.MaxHeight;
            experiment["Seed"]           = GlobalVariables.Seed;
            experiment["Components"]     = GlobalVariables.Components;
            experiment["ExperimentName"] = GlobalVariables.ExperimentName;

            // Sometimes is extending SQlite cell length limits which leads to damaging database
            //experiment["Rules"] = classificator.DecisionTree.ToRules().ToString();

            // data
            experiment["Eps"] = data.BoundryRescaler.Eps;
            var sb = new StringBuilder();

            for (var i = 0; i < data.NewBoundries.GetLength(0); i++)
            {
                sb.AppendLine($"{data.NewBoundries[i, 0]},{data.NewBoundries[i, 1]}");
            }
            experiment["NewBoundries"] = sb.ToString();

            // Gurobi model data
            experiment["Constraints"] = model.Constraints;
            experiment["Terms"]       = model.Terms;

            // Same situaction as with "Rules" cell above
            //using ( var sr = new StreamReader(GlobalVariables.GurobiModelPath) )
            //{
            //    experiment["GurobiModel"] = sr.ReadToEnd();
            //}

            // Statistics
            experiment["FJaccard"]  = statistics.FixedJaccardIndex;
            experiment["FAccuracy"] = statistics.FixedAccuracy;

            experiment["FTP"] = statistics.FixedTruePositive;
            experiment["FFP"] = statistics.FixedFalsePositive;
            experiment["FTN"] = statistics.FixedTrueNegative;
            experiment["FFN"] = statistics.FixedFalseNegative;

            experiment["HJaccard"]  = statistics.HomogenousJaccardIndex;
            experiment["HAccuracy"] = statistics.HomogenousAccuracy;

            experiment["HTP"] = statistics.HomogenousTruePositive;
            experiment["HFP"] = statistics.HomogenousFalsePositive;
            experiment["HTN"] = statistics.HomogenousTrueNegative;
            experiment["HFN"] = statistics.HomogenousFalseNegative;

            experiment["Total"] = statistics.DataLength;

            experiment["MeanAngle"] = statistics.MeanAngle;
            experiment["StatisticsCalculationTime"] = statistics.ExecutionTime;
            experiment["ProcessingTime"]            = executionTime;

            // Errors
            experiment["Errors"] = GlobalVariables.ErrorLog.ToString();

            experiment.Save();

            experiment.Dispose();
            db.Dispose();
        }