package quickml.supervised.dataProcessing.instanceTranformer; import com.beust.jcommander.internal.Lists; import org.junit.Assert; import org.junit.Test; import quickml.data.AttributesMap; import quickml.data.instances.ClassifierInstance; import java.util.List; import static org.junit.Assert.*; /** * Created by alexanderhawk on 10/22/15. */ public class CommonCoocurrenceProductFeatureAppenderTest { @Test public void addNonNumerericProductAttributesTest() { ProductFeatureAppender productFeatureAppender = new CommonCoocurrenceProductFeatureAppender<ClassifierInstance>() .setMinObservationsOfRawAttribute(2) .setAllowCategoricalProductFeatures(true) .setAllowNumericProductFeatures(false) .setApproximateOverlap(true) .setMinOverlap(2); List<ClassifierInstance> instances = productFeatureAppender.addProductAttributes(getInstances1()); ClassifierInstance instance = instances.get(1); AttributesMap attributes = instance.getAttributes(); Assert.assertTrue(attributes.containsKey("1-3")); Assert.assertEquals((double) attributes.get("1-3"), 1.0, 1E-5); Assert.assertTrue(!attributes.containsKey("1-2")); Assert.assertTrue(!attributes.containsKey("1-4")); } @Test public void addNumericOnlyProductAttributesTest() { ProductFeatureAppender productFeatureAppender = new CommonCoocurrenceProductFeatureAppender<ClassifierInstance>().setMinObservationsOfRawAttribute(2) .setAllowCategoricalProductFeatures(false) .setAllowNumericProductFeatures(true) .setApproximateOverlap(true) .setMinOverlap(2); List<ClassifierInstance> instances = productFeatureAppender.addProductAttributes(getInstances1()); ClassifierInstance instance = instances.get(1); AttributesMap attributes = instance.getAttributes(); Assert.assertTrue(attributes.containsKey("2-4")); instance = instances.get(1); Assert.assertEquals((double) instance.getAttributes().get("2-4"), 7.0, 1E-5); Assert.assertTrue(!attributes.containsKey("1-3")); } @Test public void addAllProductAttributesTest() { ProductFeatureAppender productFeatureAppender = new CommonCoocurrenceProductFeatureAppender<ClassifierInstance>() .setMinObservationsOfRawAttribute(2) .setAllowCategoricalProductFeatures(true) .setAllowNumericProductFeatures(true) .setApproximateOverlap(true) .setMinOverlap(2); List<ClassifierInstance> instances = productFeatureAppender.addProductAttributes(getInstances1()); ClassifierInstance instance = instances.get(1); AttributesMap attributes = instance.getAttributes(); Assert.assertTrue(attributes.containsKey("2-4")); Assert.assertTrue(attributes.containsKey("2-3")); instance = instances.get(1); Assert.assertEquals((Double) instance.getAttributes().get("2-4"), 7.0, 1E-5); } private List<ClassifierInstance> getInstances1() { List<ClassifierInstance> instances = Lists.newArrayList(); AttributesMap attributesMap1 = AttributesMap.newHashMap(); AttributesMap attributesMap2 = AttributesMap.newHashMap(); AttributesMap attributesMap3 = AttributesMap.newHashMap(); attributesMap1.put("1", 0.0);//what happens an attribute with 0 val is present in sparse classifier instance? attributesMap1.put("2", 9.0); attributesMap1.put("3", 1.0); attributesMap1.put("4", 5.0); attributesMap2.put("1", 1.0); attributesMap2.put("2", 7.0); attributesMap2.put("3", 1.0); attributesMap2.put("4", 1.0); attributesMap3.put("1", 1.0); attributesMap3.put("2", 7.0); attributesMap3.put("3", 1.0); attributesMap3.put("4", 1.0); instances.add(new ClassifierInstance(attributesMap1, 1.0)); instances.add(new ClassifierInstance(attributesMap2, 0.0)); instances.add(new ClassifierInstance(attributesMap3, 0.0)); return instances; } }