// public static double info_contattr(InstanceList data, Domain targetDomain, QuantitativeDomain // splitDomain) { public CondClassDistribution info_contattr(Categorizer visitor) { List<Instance> data = visitor.getSortedInstances(); QuantitativeDomain splitDomain = visitor.getSplitDomain(); Domain targetDomain = insts_by_target.getClassDomain(); String targetAttr = targetDomain.getFReferenceName(); CondClassDistribution instances_by_attr = new CondClassDistribution(splitDomain, targetDomain); instances_by_attr.setTotal(data.size()); int index = 0; int split_index = 0; Object attr_key = splitDomain.getCategory(split_index); for (Instance i : data) { if (index == splitDomain.getSplit(split_index).getIndex() + 1) { attr_key = splitDomain.getCategory(split_index + 1); split_index++; } Object targetKey = i.getAttrValue(targetAttr); instances_by_attr.change(attr_key, targetKey, i.getWeight()); // +1 index++; } return instances_by_attr; // double sum = calc_info_attr(instances_by_attr); // return sum; }
public double getEval_cont(Domain attr_domain) { double attribute_eval = 0.0d; QuantitativeDomain trialDomain = QuantitativeDomain.createFromDomain(attr_domain); Categorizer visitor = new Categorizer(insts_by_target); visitor.findSplits(trialDomain); // trial domain is modified if (trialDomain.getNumIndices() > 1) { CondClassDistribution insts_by_attr = info_contattr(visitor); // .getSortedInstances(), trialDomain); attribute_eval = data_eval - Entropy.calc_info_attr(insts_by_attr); } domain = trialDomain; sorted_instances = visitor.getSortedInstances(); return multiplier * attribute_eval; }