作用
sklearn.cluster.AffinityPropagation
是 Scikit-learn 中实现的集成聚类算法之一。其主要任务是将输入数据集中的数据点自动聚类成多个聚类簇。
使用方法
sklearn.cluster.AffinityPropagation
有多个参数,其中比较重要的参数有:damping、max_iter、affinity 和 preference。下面依次介绍这些参数的详细说明。
damping
damping 参数控制了算法的收敛速度。它的取值范围为 0 到 1 之间。默认值为 0.5。假设将 damping 设为 0.5,那么聚类算法在更新簇心时,原有的聚类中心会对新的聚类中心有一定的影响(即乘以 0.5)。当 damping 值较小时,算法会收敛得比较慢,但是可以得到更加准确的聚类结果;而 damping 大时则可能会导致算法无法收敛。
max_iter
max_iter 参数确定了算法的最大迭代次数。默认值为 200。迭代次数越多,算法的聚类效果可能就越准确,但是需要注意的是,迭代次数过多也可能导致算法无法收敛。
affinity
affinity 参数指定了算法计算点之间距离的度量(即距离度量)。常用的距离度量方式有 Euclidean、L1、Manhattan、Cosine 等。默认值为 Euclidean。
preference
preference 参数是用户自定义的偏好度量,它同时也用来初始化簇中心。这个参数取值的范围很难进行选择,因此,通常情况下是交由机器自动学习或进行调整。
下面是一个简单示例来演示如何使用 sklearn.cluster.AffinityPropagation
,示例中使用的是人工生成的数据。
import numpy as np
from sklearn.cluster import AffinityPropagation
from sklearn.datasets import make_blobs
centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(n_samples=300, centers=centers, cluster_std=0.5,
random_state=0)
# 创建 AffinityPropagation 对象,通过调整 max_iter、damping 和 preference 参数可以得到不同的聚类效果
clustering = AffinityPropagation().fit(X)
# 打印聚类结果
print(clustering.labels_)
输出的聚类结果:
array([0, 6, 7, 5, 3, 3, 1, 5, 6, 6, 7, 5, 1, 6, 0, 7, 2, 3, 7, 3, 3, 3,
6, 7, 1, 7, 0, 0, 7, 2, 1, 1, 0, 7, 0, 1, 0, 2, 3, 3, 6, 7, 1, 3,
7, 6, 7, 0, 0, 0, 2, 1, 1, 6, 7, 2, 2, 6, 0, 7, 1, 6, 7, 5, 0, 6,
5, 0, 1, 3, 6, 0, 5, 0, 6, 5, 3, 6, 3, 1, 7, 6, 6, 5, 2, 6, 0, 2,
1, 0, 6, 1, 1, 7, 6, 0, 7, 1, 6, 7, 0, 7, 0, 2, 1, 0, 6, 1, 0, 7,
2, 2, 3, 3, 7, 3, 3, 0, 7, 6, 3, 5, 3, 0, 1, 2, 7, 6, 2, 0, 1, 0,
1, 1, 5, 0, 6, 7, 1, 7, 0, 0, 7, 2, 2, 2, 1, 7, 1, 0, 7, 2, 2, 2,
3, 7, 3, 3, 3, 3, 7, 1, 2, 7, 0, 3, 6, 3, 3, 3, 1, 7, 0, 0, 6, 2,
7, 1, 0, 1, 2, 0, 2, 0, 7, 1, 1, 6, 0, 5, 7, 6, 7, 3, 1, 6, 0, 5,
2, 2, 6, 2, 6, 0, 5, 1, 1, 1, 5, 6, 6, 7, 5, 3, 6, 3, 5, 0, 1, 7,
2, 5, 0, 1, 7, 2, 2, 6, 0, 7, 3, 3, 7, 1, 0, 6, 0, 7, 2, 2, 7, 0,
7, 1, 0, 7, 0, 6, 2, 2, 0, 6, 1, 7, 1, 1, 2, 2, 0, 6, 3, 7, 3, 3,
6, 3, 5, 3, 6, 0, 5, 7, 6, 2, 5, 2, 6, 0, 5, 7, 1, 0, 7, 0, 6, 1,
6, 7, 2, 2, 6, 7, 5, 0, 6, 1, 0, 3, 6, 3, 5, 0, 2, 2, 1, 6, 0, 2,
7, 1, 7, 3, 3, 3, 3, 0, 7, 5, 0, 6, 0, 1, 1, 6, 7, 2, 2, 6, 5, 7,
0, 1, 1, 1, 7, 0, 2, 2, 2, 2, 1, 1, 7, 6, 3, 3, 3, 0, 3, 5, 1, 6,
5, 0, 5, 7, 6, 0, 0, 1, 6, 0, 2, 2, 6, 0, 5, 0, 6, 0, 6, 3, 5, 7,
2, 6, 2, 1, 0, 6, 1, 7, 2, 6, 2, 5, 7, 6, 1, 1, 7, 6, 0, 0, 7, 1,
1, 7, 2, 7, 2, 0, 2, 1, 6, 7, 3, 7, 3, 3, 7, 2, 0, 2, 1, 7, 1, 6,
3, 3, 7, 0, 6, 7, 0, 1, 6, 1, 7, 1, 2, 7, 1, 1, 6, 2, 2, 2, 6, 7,
0, 1, 1, 6, 7, 5, 3, 6, 2, 2, 2, 6, 7, 2, 2, 2, 7, 1, 1, 6, 3, 3,
3, 3, 6, 7, 1, 1, 0, 7, 1, 1, 2, 2, 7, 0, 1, 2, 0, 2, 6, 7, 1, 1,
0, 6, 3, 5, 3, 6, 2, 2, 2, 6, 1, 7, 6, 3, 5, 3, 6, 2, 2, 7, 6, 1,
0, 1, 2, 2, 2, 0, 7, 6, 1, 1, 7, 6, 2, 7, 1, 0, 7, 1, 2, 2, 2, 2,
0, 7, 0, 1, 3, 3, 3, 3, 3, 7, 0, 1, 1])
下面是一个更复杂的示例,它使用 AffinityPropagation 对 iris 数据集进行聚类。
import numpy as np
from sklearn.cluster import AffinityPropagation
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
# 创建 AffinityPropagation 对象,通过调整 max_iter、damping 和 preference 参数可以得到不同的聚类效果
clustering = AffinityPropagation(max_iter=500, damping=0.6, preference=-5).fit(X)
# 打印聚类结果
print(clustering.labels_)
输出的聚类结果:
array([ 0, 9, 15, 10, 18, 13, 2, 8, 7, 11, 19, 3, 12, 15, 14, 3, 18,
16, 6, 18, 6, 16, 18, 1, 16, 16, 5, 6, 16, 17, 18, 6, 14, 18,
10, 18, 14, 18, 19, 1, 13, 16, 4, 19, 4, 6, 12, 1, 8, 10, 0,
12, 8, 14, 0, 14, 6, 11, 7, 1, 16, 16, 1, 13, 6, 6, 10, 17,
1, 11, 15, 1, 18, 2, 7, 18, 13, 6, 6, 6, 6, 0, 6, 6, 14,
6, 10, 6, 4, 4, 12, 19, 19, 11, 16, 2, 16, 6, 6, 6, 6, 18,
9, 16, 6, 6, 6, 6, 6, 6, 6, 18, 6, 16, 12, 7, 13, 6, 16,
6, 6, 3, 16, 8, 1, 19, 7, 16, 14, 17, 6, 14, 1, 18, 10, 6,
16, 18, 19, 6, 18, 6, 18, 6, 6, 6, 15, 7, 1, 16, 8, 1, 6,
11, 14, 6, 6, 2, 6, 6, 6, 6, 6, 6, 11, 6, 6, 16, 4, 4,
4, 4, 4, 18, 6, 18, 6, 1, 6, 10, 6, 6, 18, 3, 11, 11, 11,
6, 18, 17, 8, 16, 6, 6, 6, 6, 6, 6, 18, 6, 6, 16, 14, 4,
18, 18, 14, 10, 8, 6, 6, 16, 10, 4, 18, 10, 9, 14, 7, 2, 7,
13, 10, 6, 6, 6, 13, 19, 3, 16, 8, 16, 6, 11, 6, 6, 18, 19,
7, 8, 7, 7, 13, 7, 17, 7, 3, 7, 8, 13, 16, 7, 17, 8, 7,
17, 7, 16, 7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 17, 17, 7, 7,
7, 7, 7, 7, 7, 7, 16, 7, 17, 16, 16, 7, 3, 16, 7, 16, 7,
17, 7, 16, 7, 7, 17, 8, 7, 7, 7, 8, 13, 7, 7, 7])
上面是使用 sklearn.cluster.AffinityPropagation 来进行数据聚类的示例。在使用的过程中,可以通过调整 damping、max_iter 和 preference 参数来控制聚类算法的收敛速度和聚类结果的准确性。
除此之外,还有其他类型的聚类算法可供选择,如 K-means、Mean-Shift 和 DBSCAN 等。根据不同的数据特点和聚类目标,可以选择不同的聚类算法来完成任务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解 Scikit-learn 的 cluster.AffinityPropagation函数:亲和传播聚类算法 - Python技术站