示例#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
        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));
        }