def run_affinity_propagation(affinities): smin = np.min(affinities) smax = np.max(affinities) candidate_preferences = np.linspace(smin, smax, 10) ap = AffinityPropagation(affinity='precomputed') for preference in candidate_preferences: ap.preference = preference ap.fit(affinities) indices = ap.cluster_centers_indices_ if indices is not None and len(indices) > 1: break return ap
def run_affinity_propagation(self, affinities, leaves): affinities_list = squareform(affinities) preference = np.median(affinities_list) branching_factor = np.inf while branching_factor > self.max_branching_factor: ap = AffinityPropagation(affinity='precomputed') ap.preference = preference ap.fit(affinities) if leaves: branching_factor = 0 else: branching_factor = max(Counter(ap.labels_).values()) #branching_factor = affinities.shape[0]//len(ap.cluster_centers_indices_) preference += (np.max(affinities_list) - np.min(affinities_list))/500 print('branching factor = {0}'.format(branching_factor)) print('labels') print(Counter(ap.labels_)) return ap.cluster_centers_indices_, ap.labels_