@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); }
@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); }
@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 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 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(); }