public ClassificationResult Classify(FeatureVector features)
        {
            if (decisionTreeRoot == null)
            {
                throw new Exception("You must learn classifier before work");
            }

            var currentNode = decisionTreeRoot;
            while (currentNode is NonTerminalNode)
            {
                var node = currentNode as NonTerminalNode;
                var featureValue = features[node.SplittingFeature];

                if (!node.Childs.ContainsKey(featureValue))
                {
                    return new ClassificationResult
                    {
                        PredictedClass = node.TrainingExamples.Select(s => s.ExpectedResult).GetMostPopular(),
                        ConfidenceMeasure = -1.0
                    };
                }

                currentNode = node.Childs[featureValue];
            }

            return new ClassificationResult
            {
                PredictedClass = (currentNode as TerminalNode).PredictedClass,
                ConfidenceMeasure = -1.0
            };
        }
 public ClassificationResult Classify(FeatureVector features)
 {
     return Enumerable
         .Range(0, outputClassesCount)
         .Select(c => Estimate(features, c))
         .OrderByDescending(x => x.ConfidenceMeasure)
         .First();
 }
 public ClassificationResult Classify(FeatureVector features)
 {
     // not sure if this classifier returns confidence, maybe distance to decision hyperplane
     double score;
     var result = classifier.Compute(features.ToDoubleArray(), out score);
     return new ClassificationResult
     {
         ConfidenceMeasure = score,
         PredictedClass = result,
     };
 }
        private ClassificationResult Estimate(FeatureVector features, int classNumber)
        {
            var confidence = classProb[classNumber];
            for (var featureNumber = 0; featureNumber < featuresCount; featureNumber++)
            {
                confidence *= featureWithValueWithinClassProb[featureNumber, features[featureNumber], classNumber];
                confidence /= featureWithValueProb[featureNumber, features[featureNumber]];
            }

            return new ClassificationResult
            {
                PredictedClass = classNumber,
                ConfidenceMeasure = confidence
            };
        }