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