public class WardClustering<E> extends java.lang.Object implements HierarchicalClusteringAlgorithm<E>
Modifier and Type | Class and Description |
---|---|
(package private) class |
WardClustering.ClusterThread |
Modifier and Type | Field and Description |
---|---|
protected double[] |
clusterLevelMergeCosts |
protected java.util.ArrayList<HierarchicalCluster<E>>[] |
clusterLevels |
protected java.util.List<HierarchicalCluster<E>> |
clusters
Stores the clusters; starts from being a list of clusters containing only one element (n elements), up to a final
set of clusters; there will be at least one single cluster containing all elements (if the
targetSize or
threshold permit that), or potentially any other number m <= n. |
protected boolean |
debug
Turn on some debugging
|
private java.util.concurrent.CountDownLatch |
doneSignal |
private java.util.concurrent.ThreadPoolExecutor |
e |
protected ClusterElementFunctions<E> |
elementDistance |
private int |
numberOfCPUs |
protected int |
targetSize |
protected double |
threshold |
Constructor and Description |
---|
WardClustering(ClusterElementFunctions<E> elementDistance)
Do full clustering tree.
|
WardClustering(ClusterElementFunctions<E> elementDistance,
double threshold)
Do clustering with a specified threshold to stop building the tree.
|
WardClustering(ClusterElementFunctions<E> elementDistance,
int targetSize)
Do clustering with a specified target number of clusters to reach.
|
Modifier and Type | Method and Description |
---|---|
HierarchicalCluster<E> |
clusterStep(java.util.List<HierarchicalCluster<E>> clusters) |
java.util.List<HierarchicalCluster<E>> |
doCluster(java.util.List<E> data) |
double |
ess(Cluster<E> cluster) |
private HierarchicalCluster<E> |
findOptiomalClusterMerger(java.util.List<HierarchicalCluster<E>> clusters) |
private HierarchicalCluster<E> |
findOptiomalClusterMerger(java.util.List<HierarchicalCluster<E>> clusters,
int startX,
int startY,
int endX,
int endY) |
java.util.List<HierarchicalCluster<E>> |
getClusters() |
java.util.HashMap<java.lang.Integer,java.util.ArrayList<HierarchicalCluster<E>>> |
getClustersAtLevel()
Returns the clusters at all levels
|
java.util.ArrayList<HierarchicalCluster<E>> |
getClustersAtLevel(int num)
Returns the clustering at a certain level, where the level equals the number of clusters
|
java.util.ArrayList<HierarchicalCluster<E>> |
getClustersByRelativeThreshold(double percent)
Returns the clustering at a certain level indicated by the relative merge cost for that level, compared to the
costs of merging all data items
|
java.util.ArrayList<HierarchicalCluster<E>> |
getClustersByThreshold(double threshold)
Returns the clustering at a certain level indicated by the merge cost for that level
|
private Indices2D[] |
getIndices(java.util.List<HierarchicalCluster<E>> clusters)
find matrix indices for starting & ending the symmetrical matrix indices
|
double |
getInitialMinESS(java.util.List<HierarchicalCluster<E>> clusters) |
prefuse.data.Tree |
getPrefuseTree() |
protected void |
init(java.util.List<E> data) |
void |
setDebug(boolean debug) |
void |
setNumberOfCPUs(int numberOfCPUs) |
private int numberOfCPUs
private java.util.concurrent.CountDownLatch doneSignal
private java.util.concurrent.ThreadPoolExecutor e
protected java.util.ArrayList<HierarchicalCluster<E>>[] clusterLevels
protected double[] clusterLevelMergeCosts
protected ClusterElementFunctions<E> elementDistance
protected double threshold
protected int targetSize
protected java.util.List<HierarchicalCluster<E>> clusters
targetSize
or
threshold
permit that), or potentially any other number m <= n. Intermediate results, with numbers of
clusters l, m < l < n, are stored in #clusterLevels.protected boolean debug
public WardClustering(ClusterElementFunctions<E> elementDistance)
public WardClustering(ClusterElementFunctions<E> elementDistance, double threshold)
public WardClustering(ClusterElementFunctions<E> elementDistance, int targetSize)
public prefuse.data.Tree getPrefuseTree()
getPrefuseTree
in interface HierarchicalClusteringAlgorithm<E>
public java.util.List<HierarchicalCluster<E>> doCluster(java.util.List<E> data)
doCluster
in interface ClusteringAlgorithm<E>
protected void init(java.util.List<E> data)
public double getInitialMinESS(java.util.List<HierarchicalCluster<E>> clusters)
public HierarchicalCluster<E> clusterStep(java.util.List<HierarchicalCluster<E>> clusters)
private HierarchicalCluster<E> findOptiomalClusterMerger(java.util.List<HierarchicalCluster<E>> clusters)
private HierarchicalCluster<E> findOptiomalClusterMerger(java.util.List<HierarchicalCluster<E>> clusters, int startX, int startY, int endX, int endY)
public java.util.ArrayList<HierarchicalCluster<E>> getClustersByThreshold(double threshold) throws SOMToolboxException
SOMToolboxException
public java.util.ArrayList<HierarchicalCluster<E>> getClustersByRelativeThreshold(double percent) throws SOMToolboxException
SOMToolboxException
public java.util.ArrayList<HierarchicalCluster<E>> getClustersAtLevel(int num) throws SOMToolboxException
getClustersAtLevel
in interface HierarchicalClusteringAlgorithm<E>
SOMToolboxException
public java.util.HashMap<java.lang.Integer,java.util.ArrayList<HierarchicalCluster<E>>> getClustersAtLevel() throws SOMToolboxException
HierarchicalClusteringAlgorithm
getClustersAtLevel
in interface HierarchicalClusteringAlgorithm<E>
SOMToolboxException
public void setDebug(boolean debug)
public void setNumberOfCPUs(int numberOfCPUs)
private Indices2D[] getIndices(java.util.List<HierarchicalCluster<E>> clusters)
public java.util.List<HierarchicalCluster<E>> getClusters()