コード例 #1
0
        public static int[,] ComputeConfusionMatrix(this ISupervisedClassifier classifier, IEnumerable <Instance> testingDataset, Feature classFeature)
        {
            int errors       = 0;
            var instanceList = testingDataset.ToList();

            int[] trueLabel = new int[instanceList.Count];
            int[] predicted = new int[instanceList.Count];
            for (int i = 0; i < instanceList.Count; i++)
            {
                Instance instance = testingDataset.ElementAt <Instance>(i);
                double[] classification_result = classifier.Classify(instance);
                trueLabel[i] = (int)instance[classFeature];
                predicted[i] = classification_result.ArgMax <double>();
                if (trueLabel[i] != predicted[i])
                {
                    errors++;
                }
            }

            // Computing confusion matrix
            int classCount = classFeature.ClassValues().Length;

            int[,] confusionMatrix = new int[classCount, classCount];
            for (int i = 0; i < trueLabel.Length; i++)
            {
                confusionMatrix[trueLabel[i], predicted[i]]++;
            }

            return(confusionMatrix);
        }
コード例 #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            string uciDir = "C:\\Users\\jrenewhite\\OneDrive\\Maestría\\UCI data\\Datasets";
            var    files  = Directory.GetFiles(uciDir).Yaap(settings: new YaapSettings
            {
                Description     = "Reading files",
                Width           = 100,
                ColorScheme     = YaapColorScheme.Dark,
                SmoothingFactor = 0.5
            });
            var type = typeof(ISupervisedClassifier);

            var classifiersTypes = new List <Type>();

            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                foreach (Type mytype in assembly.GetTypes()
                         .Where(mytype => mytype.GetInterfaces().Contains(type)))
                {
                    //do stuff
                    //Console.WriteLine($"{mytype.Name} is implementable? {mytype.(type)}");
                    classifiersTypes.Add(mytype);
                }
            }

            List <ISupervisedClassifier> classifiers = new List <ISupervisedClassifier>();

            foreach (var classifierType in classifiersTypes)
            {
                try
                {
                    // test creating an instance of the class.
                    ISupervisedClassifier classifier = (ISupervisedClassifier)Activator.CreateInstance(classifierType);
                    classifiers.Add(classifier);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Could not create {0} class.", classifierType);
                }
            }

            foreach (var item in files)
            {
                try
                {
                    var     serializer = new ARFFSerializer(item);
                    Dataset dataset    = serializer.DeserializeDataset();
                    VIC     vic        = new VIC(dataset, classifiers, new AccordKMeans());
                    double  index      = vic.GetValidityIndex();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
コード例 #3
0
        public static Tuple <double, double, double, double, double> TestClassifier(this ISupervisedClassifier classifier, IEnumerable <Instance> testingDataset, Feature classFeature)
        {
            int errors       = 0;
            var instanceList = testingDataset.ToList();

            int[] trueLabel = new int[instanceList.Count];
            int[] predicted = new int[instanceList.Count];
            for (int i = 0; i < instanceList.Count; i++)
            {
                Instance instance = testingDataset.ElementAt <Instance>(i);
                double[] classification_result = classifier.Classify(instance);
                trueLabel[i] = (int)instance[classFeature];
                predicted[i] = classification_result.ArgMax <double>();
                if (trueLabel[i] != predicted[i])
                {
                    errors++;
                }
            }

            // Computing confusion matrix
            int classCount = classFeature.ClassValues().Length;

            int[,] confusionMatrix = new int[classCount, classCount];
            for (int i = 0; i < trueLabel.Length; i++)
            {
                confusionMatrix[trueLabel[i], predicted[i]]++;
            }

            double acc       = 100.0 * (instanceList.Count - errors) / instanceList.Count;
            double auc       = ComputeMultiClassAUC(confusionMatrix);
            double precision = ComputeMultiClassPrecision(confusionMatrix);
            double recall    = ComputeMultiClassRecall(confusionMatrix);
            double f1        = ComputeMultiClassF1(confusionMatrix);

            return(new Tuple <double, double, double, double, double>(acc, auc, precision, recall, f1));
        }