/** * alternative to addTwoCandidateClusters(): cluster nodes by voltages into 2 clusters. We only * consider the smaller of the two clusters returned by k-means to be a 'true' cluster candidate; * the other is a garbage cluster. * * @param candidates the list of clusters to populate * @param voltage_ranks the voltage values for each node */ protected void addOneCandidateCluster( LinkedList<Set<N>> candidates, Map<N, double[]> voltage_ranks) { try { List<Map<N, double[]>> clusters; clusters = new ArrayList<Map<N, double[]>>(kmc.cluster(voltage_ranks, 2)); if (clusters.get(0).size() < clusters.get(1).size()) { candidates.add(clusters.get(0).keySet()); } else { candidates.add(clusters.get(1).keySet()); } } catch (NotEnoughClustersException e) { // no valid candidates, continue } }
/** * alternative to addTwoCandidateClusters(): cluster vertices by voltages * into 2 clusters. We only consider the smaller of the two clusters * returned by k-means to be a 'true' cluster candidate; the other is a * garbage cluster. * * @param candidates * @param voltage_ranks */ protected void addOneCandidateCluster(LinkedList<Set<V>> candidates, Map<V, double[]> voltage_ranks) { try { List<Map<V, double[]>> clusters; clusters = new ArrayList<Map<V, double[]>>( kmc.cluster(voltage_ranks, 2)); if (clusters.get(0).size() < clusters.get(1).size()) { candidates.add(clusters.get(0).keySet()); } else { candidates.add(clusters.get(1).keySet()); } } catch (NotEnoughClustersException e) { // no valid candidates, continue } }
/** * alternative to addTwoCandidateClusters(): cluster vertices by voltages into 2 clusters. * We only consider the smaller of the two clusters returned * by k-means to be a 'true' cluster candidate; the other is a garbage cluster. * @param candidates the list of clusters to populate * @param voltage_ranks the voltage values for each vertex */ protected void addOneCandidateCluster(LinkedList<Set<V>> candidates, Map<V, double[]> voltage_ranks) { try { List<Map<V, double[]>> clusters; clusters = new ArrayList<Map<V, double[]>>(kmc.cluster(voltage_ranks, 2)); if (clusters.get(0).size() < clusters.get(1).size()) candidates.add(clusters.get(0).keySet()); else candidates.add(clusters.get(1).keySet()); } catch (NotEnoughClustersException e) { // no valid candidates, continue } }
/** * alternative to addTwoCandidateClusters(): cluster vertices by voltages into 2 clusters. * We only consider the smaller of the two clusters returned * by k-means to be a 'true' cluster candidate; the other is a garbage cluster. * @param candidates * @param voltage_ranks */ protected void addOneCandidateCluster(LinkedList<Set<V>> candidates, Map<V, double[]> voltage_ranks) { try { List<Map<V, double[]>> clusters; clusters = new ArrayList<Map<V, double[]>>(kmc.cluster(voltage_ranks, 2)); if (clusters.get(0).size() < clusters.get(1).size()) candidates.add(clusters.get(0).keySet()); else candidates.add(clusters.get(1).keySet()); } catch (NotEnoughClustersException e) { // no valid candidates, continue } }
/** * Do k-means with three intervals and pick the smaller two clusters (presumed to be on the ends); * this is closer to the Wu-Huberman method. * * @param candidates the list of clusters to populate * @param voltage_ranks the voltage values for each node */ protected void addTwoCandidateClusters( LinkedList<Set<N>> candidates, Map<N, double[]> voltage_ranks) { try { List<Map<N, double[]>> clusters = new ArrayList<Map<N, double[]>>(kmc.cluster(voltage_ranks, 3)); boolean b01 = clusters.get(0).size() > clusters.get(1).size(); boolean b02 = clusters.get(0).size() > clusters.get(2).size(); boolean b12 = clusters.get(1).size() > clusters.get(2).size(); if (b01 && b02) { candidates.add(clusters.get(1).keySet()); candidates.add(clusters.get(2).keySet()); } else if (!b01 && b12) { candidates.add(clusters.get(0).keySet()); candidates.add(clusters.get(2).keySet()); } else if (!b02 && !b12) { candidates.add(clusters.get(0).keySet()); candidates.add(clusters.get(1).keySet()); } } catch (NotEnoughClustersException e) { // no valid candidates, continue } }
/** * Do k-means with three intervals and pick the smaller two clusters * (presumed to be on the ends); this is closer to the Wu-Huberman method. * * @param candidates * @param voltage_ranks */ protected void addTwoCandidateClusters(LinkedList<Set<V>> candidates, Map<V, double[]> voltage_ranks) { try { List<Map<V, double[]>> clusters = new ArrayList<Map<V, double[]>>( kmc.cluster(voltage_ranks, 3)); boolean b01 = clusters.get(0).size() > clusters.get(1).size(); boolean b02 = clusters.get(0).size() > clusters.get(2).size(); boolean b12 = clusters.get(1).size() > clusters.get(2).size(); if (b01 && b02) { candidates.add(clusters.get(1).keySet()); candidates.add(clusters.get(2).keySet()); } else if (!b01 && b12) { candidates.add(clusters.get(0).keySet()); candidates.add(clusters.get(2).keySet()); } else if (!b02 && !b12) { candidates.add(clusters.get(0).keySet()); candidates.add(clusters.get(1).keySet()); } } catch (NotEnoughClustersException e) { // no valid candidates, continue } }
List<Map<V, double[]>> clusters = new ArrayList<Map<V, double[]>>(kmc.cluster(voltage_ranks, 3)); boolean b01 = clusters.get(0).size() > clusters.get(1).size(); boolean b02 = clusters.get(0).size() > clusters.get(2).size();
List<Map<V, double[]>> clusters = new ArrayList<Map<V, double[]>>(kmc.cluster(voltage_ranks, 3)); boolean b01 = clusters.get(0).size() > clusters.get(1).size(); boolean b02 = clusters.get(0).size() > clusters.get(2).size();
Collection<Map<N, double[]>> high_low = kmc.cluster(occur_counts, 2);
Collection<Map<V, double[]>> high_low = kmc.cluster(occur_counts, 2);
Collection<Map<V, double[]>> high_low = kmc.cluster(occur_counts, 2);
.cluster(occur_counts, 2);