package quickml.supervised.tree.decisionTree.branchFinders.branchFinderBuilders; import quickml.supervised.tree.attributeValueIgnoringStrategies.AttributeValueIgnoringStrategy; import quickml.supervised.tree.constants.BranchType; import quickml.supervised.tree.decisionTree.attributeValueIgnoringStrategies.BinaryClassAttributeValueIgnoringStrategyBuilder; import quickml.supervised.tree.decisionTree.attributeValueIgnoringStrategies.MultiClassAttributeValueIgnoringStrategyBuilder; import quickml.supervised.tree.decisionTree.branchFinders.DTNumBranchFinder; import quickml.supervised.tree.decisionTree.valueCounters.ClassificationCounter; import java.util.Set; /** * Created by alexanderhawk on 4/26/15. */ public class DTNumBranchFinderBuilder extends DTBranchFinderBuilder { @Override public DTNumBranchFinderBuilder createBranchFinderBuilder() { return new DTNumBranchFinderBuilder(); } @Override public BranchType getBranchType() { return BranchType.NUMERIC; } @Override public DTNumBranchFinder buildBranchFinder(ClassificationCounter classificationCounts, Set<String> candidateAttributes) { AttributeValueIgnoringStrategy<ClassificationCounter> attributeValueIgnoringStrategy; if (getAttributeValueIgnoringStrategyBuilder() == null) { if (classificationCounts.allClassifications().size() > 2) { MultiClassAttributeValueIgnoringStrategyBuilder multiClassAttributeValueIgnoringStrategyBuilder = new MultiClassAttributeValueIgnoringStrategyBuilder(getMinAttributeOccurences()); attributeValueIgnoringStrategy = multiClassAttributeValueIgnoringStrategyBuilder.createAttributeValueIgnoringStrategy(classificationCounts); } else if (classificationCounts.allClassifications().size()== 2) { BinaryClassAttributeValueIgnoringStrategyBuilder binaryClassAttributeValueIgnoringStrategyBuilder = new BinaryClassAttributeValueIgnoringStrategyBuilder(getMinAttributeOccurences()); attributeValueIgnoringStrategy = binaryClassAttributeValueIgnoringStrategyBuilder.createAttributeValueIgnoringStrategy(classificationCounts); } else { throw new RuntimeException("building decision oldTree with less than 2 classes. numClassesIs0 = " + classificationCounts); } } else { attributeValueIgnoringStrategy = attributeValueIgnoringStrategyBuilder.createAttributeValueIgnoringStrategy(classificationCounts); } return new DTNumBranchFinder(candidateAttributes, branchingConditions, scorerFactory, attributeValueIgnoringStrategy, attributeIgnoringStrategy); } }