Perform Affinity Propagation Clustering of data.
Read more in the :ref:`User Guide <affinity_propagation>`.
Parameters ---------- damping : float, default=0.5 Damping factor (between 0.5 and 1) is the extent to which the current value is maintained relative to incoming values (weighted 1 - damping). This in order to avoid numerical oscillations when updating these values (messages).
max_iter : int, default=200 Maximum number of iterations.
convergence_iter : int, default=15 Number of iterations with no change in the number of estimated clusters that stops the convergence.
copy : bool, default=True Make a copy of input data.
preference : array-like of shape (n_samples,) or float, default=None Preferences for each point - points with larger values of preferences are more likely to be chosen as exemplars. The number of exemplars, ie of clusters, is influenced by the input preferences value. If the preferences are not passed as arguments, they will be set to the median of the input similarities.
affinity : 'euclidean', 'precomputed'
, default='euclidean' Which affinity to use. At the moment 'precomputed' and ``euclidean`` are supported. 'euclidean' uses the negative squared euclidean distance between points.
verbose : bool, default=False Whether to be verbose.
Attributes ---------- cluster_centers_indices_ : ndarray of shape (n_clusters,) Indices of cluster centers
cluster_centers_ : ndarray of shape (n_clusters, n_features) Cluster centers (if affinity != ``precomputed``).
labels_ : ndarray of shape (n_samples,) Labels of each point
affinity_matrix_ : ndarray of shape (n_samples, n_samples) Stores the affinity matrix used in ``fit``.
n_iter_ : int Number of iterations taken to converge.
Examples -------- >>> from sklearn.cluster import AffinityPropagation >>> import numpy as np >>> X = np.array([1, 2], [1, 4], [1, 0],
... [4, 2], [4, 4], [4, 0]
) >>> clustering = AffinityPropagation().fit(X) >>> clustering AffinityPropagation() >>> clustering.labels_ array(0, 0, 0, 1, 1, 1
) >>> clustering.predict([0, 0], [4, 4]
) array(0, 1
) >>> clustering.cluster_centers_ array([1, 2],
[4, 2]
)
Notes ----- For an example, see :ref:`examples/cluster/plot_affinity_propagation.py <sphx_glr_auto_examples_cluster_plot_affinity_propagation.py>`.
The algorithmic complexity of affinity propagation is quadratic in the number of points.
When ``fit`` does not converge, ``cluster_centers_`` becomes an empty array and all training samples will be labelled as ``-1``. In addition, ``predict`` will then label every sample as ``-1``.
When all training samples have equal similarities and equal preferences, the assignment of cluster centers and labels depends on the preference. If the preference is smaller than the similarities, ``fit`` will result in a single cluster center and label ``0`` for every sample. Otherwise, every training sample becomes its own cluster center and is assigned a unique label.
References ----------
Brendan J. Frey and Delbert Dueck, "Clustering by Passing Messages Between Data Points", Science Feb. 2007