static void trainSeverityModel()
        {
            MLService service = new MLService();
            var       chain   = service.GetAllSegments_SegmentChain7_AnomalySpreaded_OnlyANomaly();

            double[][] inputs = chain.Select(sc => new double[] { sc.MaxSpeedChange.Value, sc.MinSpeedChange.Value }).ToArray();  //

            KMeans kmeans = new KMeans(k: 3);
            //kmeans.Centroids = new double [2][];
            //kmeans.Centroids[0] = new double[] {-2.76384235537843, 0.608515794829327 };
            //kmeans.Centroids[1] = new double[] {-0.579246221664498,0.121793585323178};
            // Compute and retrieve the data centroids
            var clusters = kmeans.Learn(inputs);

            Serializer.Save(clusters, AnomalyClassifierBySeverityModelFileName);


            // Use the centroids to parition all the data
            int[] labels = clusters.Decide(inputs);
            var   zeros  = labels.Where(l => l == 0).ToList();
            var   ones   = labels.Where(l => l == 1).ToList();
            var   twos   = labels.Where(l => l == 2).ToList();

            ScatterplotBox.Show("Severity Clusters", inputs, labels);
        }
        static void trainAnomalyDetecorDTModel()
        {
            MLService service = new MLService();

            var chain = service.GetAllSegments_SegmentChain7_AnomalySpreaded_OnlyANomaly().ToList();

            double[][] inputs = chain.Select(sc => new double[] { sc.MaxSpeed.Value, sc.MinSpeed.Value, sc.SpeedRange.Value, sc.TotalTime.Value, sc.MinTime.Value, sc.MaxTime.Value, sc.TimeRange.Value, sc.MaxSpeedVar.Value, sc.MinSpeedVar.Value, sc.SpeedVarRange.Value, sc.MaxTimeVar.Value, sc.MinTimeVar.Value, sc.TimeVarRange.Value }).ToArray();  //

            int[] outputs = chain.Select(sc => sc.AnomalyType).ToArray();

            DecisionTree_crossValidation(inputs, outputs);

            Console.ReadKey();
        }