Пример #1
0
        private static BiometricResult Evaluate(ClassifierInstance classifier, List <ISample> testingSamples, double minInterval, double interval, BiometricResult result)
        {
            if (interval < minInterval)
            {
                // the threshold found for the smallest interval represents the best guess at the EER
                return(result);
            }
            else
            {
                // recurse until the smallest allowable interval is hit
                ErrorRatePair delta1 = CalculateErrorRate(classifier, testingSamples, (result.GetThreshold() - (interval / 2.0)));
                ErrorRatePair delta2 = CalculateErrorRate(classifier, testingSamples, (result.GetThreshold() + (interval / 2.0)));

                Console.WriteLine("delta1 : " + delta1.GetFAR() + " " + delta1.GetFRR() + " \n " + delta2.GetFAR() + " " + delta2.GetFRR());
                Console.WriteLine("threshold: " + result.GetThreshold());
                Console.WriteLine("errorDelta1: " + delta1.GetErrorDelta() + " errorDelta2: " + delta2.GetErrorDelta());

                if (delta1.GetErrorDelta() < delta2.GetErrorDelta())
                {
                    Console.WriteLine("Choose delta1");
                    return(Evaluate(classifier, testingSamples, minInterval, (interval / 2.0), new BiometricResult((result.GetThreshold() - (interval / 2.0)), new List <ErrorRatePair> {
                        delta1
                    })));
                }
                else
                {
                    Console.WriteLine("Choose delta2");
                    return(Evaluate(classifier, testingSamples, minInterval, (interval / 2.0), new BiometricResult((result.GetThreshold() + (interval / 2.0)), new List <ErrorRatePair> {
                        delta2
                    })));
                }
            }
        }
Пример #2
0
        public static ErrorRatePair CalculateErrorRate(ClassifierInstance classifier, List <ISample> testingSamples, double threshold)
        {
            Tuple <int, int> farResults = CalculateFAR(classifier, testingSamples, threshold);
            Tuple <int, int> frrResults = CalculateFRR(classifier, testingSamples, threshold);

            return(new ErrorRatePair(farResults.Item1, farResults.Item2, frrResults.Item1, frrResults.Item2));
        }
Пример #3
0
        private static Tuple <int, int> CalculateFRR(ClassifierInstance classifier, List <ISample> testingSamples, double threshold)
        {
            string[] identifiers = classifier.GetTrainedIdentifiers();
            // for each identifier find the samples taht incorrectly match the identifier given the threshold
            VerificationResult result = identifiers.AsParallel().SelectMany(identifier =>
                                                                            testingSamples.Where(sample => sample.GetIdentifier().Equals(identifier)).Select(sample =>
            {
                if (classifier.Verify(sample.GetDimensions(), identifier) <= threshold)
                {
                    return(new VerificationResult(0, 1));    // falsely rejected sample for the correct identifier
                }
                else
                {
                    return(new VerificationResult(1, 0));    // correctly accepted sample for the identifier
                }
            })
                                                                            ).Aggregate((current, next) => current + next);

            return(new Tuple <int, int>(result.Rejected, (result.Accepted + result.Rejected)));
        }
Пример #4
0
 // perform EER evaluation on provided testing samples
 public static BiometricResult Evaluate(ClassifierInstance classifier, List <ISample> testingSamples, double minInterval = DEFAULT_MIN_INTERVAL)
 {
     return(Evaluate(classifier, testingSamples, minInterval, 0.5, new BiometricResult(0.5, null)));
 }