亲和力传播聚类算法

亲和力传播聚类算法是一种基于数据点之间相似度的聚类方法,它不需要预先指定簇的数量,而是通过迭代过程自动确定簇的数量和簇中心。该算法的核心思想是将数据点之间的相似度信息传递给其他数据点,从而找到最佳的簇中心和簇分配。

算法参数

亲和力传播聚类算法的参数设置对聚类结果有很大影响。以下是一些关键参数的说明:

相似度矩阵(S):这是一个形状为(n_samples, n_samples)的数组,表示数据点之间的相似度。通常,相似度矩阵是通过计算数据点之间的距离得到的,例如使用欧几里得距离。

偏好值(preference):这是一个形状为(n_samples,)的数组或浮点数,表示每个数据点成为簇中心的偏好程度。偏好值较大的数据点更有可能被选为簇中心。如果未指定偏好值,则默认为相似度矩阵的中位数,从而得到一个适中的簇数量。

收敛迭代次数(convergence_iter):这是一个整数,默认值为15。当迭代过程中簇的数量没有变化时,算法会停止迭代。

最大迭代次数(max_iter):这是一个整数,默认值为200。这是算法执行的最大迭代次数。

阻尼因子(damping):这是一个浮点数,默认值为0.5。阻尼因子用于控制算法的收敛速度,其值在0.5到1之间。

复制(copy):这是一个布尔值,默认为True。如果设置为False,则算法会在原地修改相似度矩阵,以节省内存。

详细输出(verbose):这是一个布尔值,默认为False。如果设置为True,则算法会在执行过程中输出详细信息。

返回迭代次数(return_n_iter):这是一个布尔值,默认为False。如果设置为True,则算法会返回执行的迭代次数。

随机状态(random_state):这是一个整数、RandomState实例或None,默认为None。用于控制算法的随机性,以确保结果的可重复性。

返回值

亲和力传播聚类算法返回以下值:

簇中心索引(cluster_centers_indices):这是一个形状为(n_clusters,)的数组,表示簇中心的索引。

簇标签(labels):这是一个形状为(n_samples,)的数组,表示每个数据点所属的簇。

迭代次数(n_iter):这是一个整数,表示算法执行的迭代次数。只有当return_n_iter参数设置为True时才会返回这个值。

算法示例

以下是一个使用亲和力传播聚类算法的示例代码:

import numpy as np from sklearn.cluster import affinity_propagation from sklearn.metrics.pairwise import euclidean_distances # 生成示例数据 X = np.array([ [1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0] ]) # 计算相似度矩阵 S = -euclidean_distances(X, squared=True) # 执行亲和力传播聚类 cluster_centers_indices, labels = affinity_propagation(S, random_state=0) print("簇中心索引:", cluster_centers_indices) print("簇标签:", labels)

在这个示例中,首先生成了一个包含6个数据点的示例数据集。然后,计算了数据点之间的相似度矩阵。接下来,使用亲和力传播聚类算法对数据进行聚类,并输出了簇中心的索引和每个数据点所属的簇。

注意事项

当算法没有收敛时,即使返回了簇中心索引和簇标签,这些结果也可能是退化的,需要谨慎使用。当所有训练样本具有相同的相似度和偏好值时,簇中心和标签的分配取决于偏好值。如果偏好值小于相似度,则会返回一个簇中心和标签0给每个样本。否则,每个训练样本都成为自己的簇中心,并被分配一个唯一的标签。

Brendan J. Frey and Delbert Dueck, “Clustering by Passing Messages Between Data Points”, Science Feb. 2007

  • Visualizing the stock market structure
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485