package net.varkhan.data.learn.cluster; import net.varkhan.data.learn.Classifier; import net.varkhan.data.learn.UnsupervisedLearner; import net.varkhan.data.learn.distance.Distance; import java.util.Collection; /** * <b>A clustering method</b>. * <p/> * * @author varkhan * @date 12/1/13 * @time 12:17 PM */ public interface Clustering<K extends Clustering.Cluster<T,C>,T,C> extends UnsupervisedLearner<K,T,C> { /** * <b>An individual cluster</b>. */ public static interface Cluster<T,C> { public T center(); public double confidence(T obs, C ctx); public double diameter(double p, C ctx); } /** * <b>A set of clusters</b>. * * @param <K> the cluster type */ public static interface Clusters<K extends Cluster<T,C>,T,C> extends Classifier<K,T,C> { public Collection<K> clusters(); public K invoke(T obs, C ctx); public double confidence(K cls, T obs, C ctx); } public Distance<T,C> distance(); public Clusters<K,T,C> model(); public boolean train(T obs, C ctx); }