package quickml.supervised.tree.attributeIgnoringStrategies; import com.google.common.collect.Sets; import quickml.supervised.tree.nodes.Branch; import java.util.HashSet; import java.util.Random; import java.util.Set; /** * Created by alexanderhawk on 2/28/15. */ public class IgnoreAttributesInSet implements AttributeIgnoringStrategy { private static final long serialVersionUID = 0L; private final HashSet<String> attributesToIgnore = Sets.newHashSet(); private final Set<String> proposedAttributesToIgnore; private final double discardProbability; private Random random = new Random(); public IgnoreAttributesInSet(Set<String> attributesToIgnore, double probabilityOfDiscardingFromAttributesToIgnore) { this.proposedAttributesToIgnore = attributesToIgnore; this.discardProbability = probabilityOfDiscardingFromAttributesToIgnore; setAttributesToIgnore(); } private void setAttributesToIgnore() { for (String attribute : proposedAttributesToIgnore) { if (random.nextDouble() > discardProbability) { attributesToIgnore.add(attribute); } } } @Override public IgnoreAttributesInSet copy(){ return new IgnoreAttributesInSet(proposedAttributesToIgnore, discardProbability); } @Override public boolean ignoreAttribute(String attribute, Branch Parent) { if (attributesToIgnore.contains(attribute)) { return true; } return false; } @Override public String toString() { return "IgnoreAttributesInSet{" + "proposedAttributesToIgnore=" + proposedAttributesToIgnore + ", discardProbability=" + discardProbability + '}'; } }