package quickml.supervised.tree.decisionTree.attributeIgnoringStrategies; import com.google.common.collect.Sets; import org.junit.Test; import org.testng.Assert; import quickml.supervised.tree.attributeIgnoringStrategies.AttributeIgnoringStrategy; import quickml.supervised.tree.attributeIgnoringStrategies.CompositeAttributeIgnoringStrategy; import quickml.supervised.tree.attributeIgnoringStrategies.IgnoreAttributesInSet; import quickml.supervised.tree.attributeIgnoringStrategies.IgnoreAttributesWithConstantProbability; import java.util.Arrays; import java.util.List; import java.util.Set; /** * Created by alexanderhawk on 2/28/15. */ public class AttributeIgnoringStrategiesTests { @Test public void IgnoreAttributesWithConstantProbabilityTest () { int ignoreAttributeProbability = 0; IgnoreAttributesWithConstantProbability ignoreAttributesWithConstantProbability = new IgnoreAttributesWithConstantProbability(ignoreAttributeProbability); int numIgnored = getNumIgnored(ignoreAttributesWithConstantProbability); Assert.assertEquals(numIgnored, 0); double ignoreAttributeProbability1 = 1.0; ignoreAttributesWithConstantProbability = new IgnoreAttributesWithConstantProbability(ignoreAttributeProbability1); numIgnored = getNumIgnored(ignoreAttributesWithConstantProbability); Assert.assertEquals(numIgnored, 4); } @Test public void IgnoreAttributesInSetTest(){ Set<String> attributesToIgnore = Sets.newHashSet(); attributesToIgnore.addAll(Arrays.asList("region", "hourOfDay")); int probabilityOfDiscardingFromAttributesToIgnore = 0; IgnoreAttributesInSet ignoreAttributesInSet = new IgnoreAttributesInSet(attributesToIgnore, probabilityOfDiscardingFromAttributesToIgnore); int numIgnored = getNumIgnored(ignoreAttributesInSet); Assert.assertEquals(numIgnored, 2); double probabilityOfDiscardingFromAttributesToIgnore1 = 1.0; ignoreAttributesInSet = new IgnoreAttributesInSet(attributesToIgnore, probabilityOfDiscardingFromAttributesToIgnore1); numIgnored = getNumIgnored(ignoreAttributesInSet); Assert.assertEquals(numIgnored, 0); } @Test public void CompositeAttributeIgnoringStrategyTest() { int ignoreAttributeProbability = 0; IgnoreAttributesWithConstantProbability ignoreAttributesWithConstantProbability = new IgnoreAttributesWithConstantProbability(ignoreAttributeProbability); Set<String> attributesToIgnore = Sets.newHashSet(); attributesToIgnore.addAll(Arrays.asList("region", "hourOfDay")); int probabilityOfDiscardingFromAttributesToIgnore = 0;//0 ensures both region and hourOfDay will always be ignored IgnoreAttributesInSet ignoreAttributesInSet = new IgnoreAttributesInSet(attributesToIgnore, probabilityOfDiscardingFromAttributesToIgnore); CompositeAttributeIgnoringStrategy compositeAttributeIgnoringStrategy = new CompositeAttributeIgnoringStrategy(Arrays.asList(ignoreAttributesWithConstantProbability, ignoreAttributesInSet)); int numIgnored = getNumIgnored(compositeAttributeIgnoringStrategy); Assert.assertEquals(numIgnored, 2); double ignoreAttributeProbability1 = 1.0; ignoreAttributesWithConstantProbability = new IgnoreAttributesWithConstantProbability(ignoreAttributeProbability1); compositeAttributeIgnoringStrategy = new CompositeAttributeIgnoringStrategy(Arrays.asList(ignoreAttributesWithConstantProbability, ignoreAttributesInSet)); numIgnored = getNumIgnored(compositeAttributeIgnoringStrategy); Assert.assertEquals(numIgnored, 4); } private int getNumIgnored(AttributeIgnoringStrategy attributeIgnoringStrategy) { int numIgnored = 0; List<String> attributes = Arrays.asList("domain", "creativeId", "region", "hourOfDay"); for (String attribute : attributes) { if (attributeIgnoringStrategy.ignoreAttribute(attribute, null)) { numIgnored++; } } return numIgnored; } }