@Override public Cluster performClustering(double[][] distances, String[] clusterNames, LinkageStrategy linkageStrategy) { checkArguments(distances, clusterNames, linkageStrategy); /* Setup model */ List<Cluster> clusters = createClusters(clusterNames); DistanceMap linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); while (!builder.isTreeComplete()) { builder.agglomerate(linkageStrategy); } return builder.getRootCluster(); }
@Override public List<Cluster> performFlatClustering(double[][] distances, String[] clusterNames, LinkageStrategy linkageStrategy, Double threshold) { checkArguments(distances, clusterNames, linkageStrategy); /* Setup model */ List<Cluster> clusters = createClusters(clusterNames); DistanceMap linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); return builder.flatAgg(linkageStrategy, threshold); }
/** * Returns Flattened clusters, i.e. clusters that are at least apart by a given threshold * @param linkageStrategy * @param threshold * @return */ public List<Cluster> flatAgg(LinkageStrategy linkageStrategy, Double threshold) { while((!isTreeComplete()) && (distances.minDist() != null) && (distances.minDist() <= threshold)) { //System.out.println("Cluster Distances: " + distances.toString()); //System.out.println("Cluster Size: " + clusters.size()); agglomerate(linkageStrategy); } //System.out.println("Final MinDistance: " + distances.minDist()); //System.out.println("Tree complete: " + isTreeComplete()); return clusters; }
public void agglomerate(LinkageStrategy linkageStrategy) { ClusterPair minDistLink = getMin(); if (minDistLink != null) { ClusterPair link1 = findByClusters(iClust, oldClusterL); ClusterPair link2 = findByClusters(iClust, oldClusterR); ClusterPair newLinkage = new ClusterPair(); newList.add(newLinkage);
public Cluster getRootCluster() { if (!isTreeComplete()) { throw new RuntimeException("No root available"); } return clusters.get(0); }
ClusterPair link1 = findByClusters(iClust, oldClusterL); ClusterPair link2 = findByClusters(iClust, oldClusterR); ClusterPair newLinkage = new ClusterPair(); newLinkage.setlCluster(iClust);
@Override public List<Cluster> performFlatClustering(double[][] distances, String[] clusterNames, LinkageStrategy linkageStrategy, Double threshold) { /* Argument checks */ if (distances == null || distances.length == 0) { throw new IllegalArgumentException("Invalid distance matrix"); } if (distances[0].length != clusterNames.length * (clusterNames.length - 1) / 2) { throw new IllegalArgumentException("Invalid cluster name array"); } if (linkageStrategy == null) { throw new IllegalArgumentException("Undefined linkage strategy"); } /* Setup model */ List<Cluster> clusters = createClusters(clusterNames); DistanceMap linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); return builder.flatAgg(linkageStrategy, threshold); }
/** * Returns Flattened clusters, i.e. clusters that are at least apart by a given threshold * @param linkageStrategy * @param threshold * @return */ public List<Cluster> flatAgg(LinkageStrategy linkageStrategy, Double threshold) { while((!isTreeComplete()) && (distances.minDist() != null) && (distances.minDist() <= threshold)) { //System.out.println("Cluster Distances: " + distances.toString()); //System.out.println("Cluster Size: " + clusters.size()); agglomerate(linkageStrategy); } //System.out.println("Final MinDistance: " + distances.minDist()); //System.out.println("Tree complete: " + isTreeComplete()); return clusters; }
public Cluster getRootCluster() { if (!isTreeComplete()) { throw new RuntimeException("No root available"); } return clusters.get(0); }
ClusterPair link1 = findByClusters(iClust, oldClusterL); ClusterPair link2 = findByClusters(iClust, oldClusterR); ClusterPair newLinkage = new ClusterPair(); newLinkage.setlCluster(iClust);
@Override public Cluster performClustering(double[][] distances, String[] clusterNames, LinkageStrategy linkageStrategy) { checkArguments(distances, clusterNames, linkageStrategy); /* Setup model */ List<Cluster> clusters = createClusters(clusterNames); DistanceMap linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); while (!builder.isTreeComplete()) { builder.agglomerate(linkageStrategy); } return builder.getRootCluster(); }
@Override public List<Cluster> performFlatClustering(double[][] distances, String[] clusterNames, LinkageStrategy linkageStrategy, Double threshold) { checkArguments(distances, clusterNames, linkageStrategy); /* Setup model */ List<Cluster> clusters = createClusters(clusterNames); DistanceMap linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); return builder.flatAgg(linkageStrategy, threshold); }
public Cluster getRootCluster() { if (!isTreeComplete()) { throw new RuntimeException("No root available"); } return clusters.get(0); }
@Override public Cluster performClustering(double[][] distances, String[] clusterNames, LinkageStrategy linkageStrategy) { /* Argument checks */ if (distances == null || distances.length == 0) { throw new IllegalArgumentException("Invalid distance matrix"); } if (distances[0].length != clusterNames.length * (clusterNames.length - 1) / 2) { throw new IllegalArgumentException("Invalid cluster name array"); } if (linkageStrategy == null) { throw new IllegalArgumentException("Undefined linkage strategy"); } /* Setup model */ List<Cluster> clusters = createClusters(clusterNames); DistanceMap linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); while (!builder.isTreeComplete()) { builder.agglomerate(linkageStrategy); } return builder.getRootCluster(); }
@Override public List<Cluster> performFlatClustering(double[][] distances, String[] clusterNames, LinkageStrategy linkageStrategy, Double threshold) { /* Argument checks */ if (distances == null || distances.length == 0) { throw new IllegalArgumentException("Invalid distance matrix"); } if (distances[0].length != clusterNames.length * (clusterNames.length - 1) / 2) { throw new IllegalArgumentException("Invalid cluster name array"); } if (linkageStrategy == null) { throw new IllegalArgumentException("Undefined linkage strategy"); } /* Setup model */ List<Cluster> clusters = createClusters(clusterNames); DistanceMap linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); return builder.flatAgg(linkageStrategy, threshold); }
@Override public Cluster performWeightedClustering(double[][] distances, String[] clusterNames, double[] weights, LinkageStrategy linkageStrategy) { checkArguments(distances, clusterNames, linkageStrategy); if (weights.length != clusterNames.length) { throw new IllegalArgumentException("Invalid weights array"); } /* Setup model */ List<Cluster> clusters = createClusters(clusterNames, weights); DistanceMap linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); while (!builder.isTreeComplete()) { builder.agglomerate(linkageStrategy); } return builder.getRootCluster(); }
@Override public Cluster performWeightedClustering(double[][] distances, String[] clusterNames, double[] weights, LinkageStrategy linkageStrategy) { checkArguments(distances, clusterNames, linkageStrategy); if (weights.length != clusterNames.length) { throw new IllegalArgumentException("Invalid weights array"); } /* Setup model */ List<Cluster> clusters = createClusters(clusterNames, weights); DistanceMap linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); while (!builder.isTreeComplete()) { builder.agglomerate(linkageStrategy); } return builder.getRootCluster(); }
@Override public <T> Cluster<T> performClustering(double[][] distances, T[] clusterNames, LinkageStrategy linkageStrategy) { /* Argument checks */ if (distances == null || distances.length == 0 || distances[0].length != distances.length) { throw new IllegalArgumentException("Invalid distance matrix"); } if (distances.length != clusterNames.length) { throw new IllegalArgumentException("Invalid cluster name array"); } if (linkageStrategy == null) { throw new IllegalArgumentException("Undefined linkage strategy"); } /* Setup model */ List<Cluster<T>> clusters = createClusters(clusterNames); LinkedList<ClusterPair> linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); while (!builder.isTreeComplete()) { builder.agglomerate(linkageStrategy); } return builder.getRootCluster(); }
@Override public <T> Cluster<T> performClustering(double[][] distances, T[] clusterNames, LinkageStrategy linkageStrategy) { /* Argument checks */ if (distances == null || distances.length == 0) { throw new IllegalArgumentException("Invalid distance matrix"); } if (distances[0].length != clusterNames.length * (clusterNames.length - 1) / 2) { throw new IllegalArgumentException("Invalid cluster name array"); } if (linkageStrategy == null) { throw new IllegalArgumentException("Undefined linkage strategy"); } /* Setup model */ List<Cluster<T>> clusters = createClusters(clusterNames); LinkedList<ClusterPair> linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); while (!builder.isTreeComplete()) { builder.agglomerate(linkageStrategy); } return builder.getRootCluster(); }
@Override public Cluster performClustering(double[][] distances, String[] clusterNames, LinkageStrategy linkageStrategy) { /* Argument checks */ if (distances == null || distances.length == 0) { throw new IllegalArgumentException("Invalid distance matrix"); } if (distances[0].length != clusterNames.length * (clusterNames.length - 1) / 2) { throw new IllegalArgumentException("Invalid cluster name array"); } if (linkageStrategy == null) { throw new IllegalArgumentException("Undefined linkage strategy"); } /* Setup model */ List<Cluster> clusters = createClusters(clusterNames); DistanceMap linkages = createLinkages(distances, clusters); /* Process */ HierarchyBuilder builder = new HierarchyBuilder(clusters, linkages); while (!builder.isTreeComplete()) { builder.agglomerate(linkageStrategy); } return builder.getRootCluster(); }