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); }
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); } } }
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)); }