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