package net.varkhan.data.learn.stats;
import net.varkhan.base.containers.set.CountingSet;
import java.util.Collection;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 12/28/13
* @time 3:20 PM
*/
public class GiniPurity<A,C> extends AbstractPurity<A,C> {
public double invoke(Collection<CountingSet<A>> parts, CountingSet<A> all, C ctx) {
return gini(parts);
}
protected static <A> double gini(Collection<CountingSet<A>> parts) {
double num = 0;
double ent = 0;
for(CountingSet<A> set: parts) {
double c = set.count();
num += c;
ent += c * c;
}
if(num==0) return 0;
return ent / (num*num);
}
}