【Python实例第18讲】affinity propagation聚类算法

本文介绍了机器学习中的affinity propagation(AP)聚类算法,该算法基于数据点间的相似度信息传递,无需预先设定类别数量。AP算法在计算机视觉和计算生物学等领域有广泛应用。算法描述包括相似度矩阵S、适配度矩阵R和A的更新过程,并提供了使用scikit-learn实现AP聚类的Python实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

在统计和数据挖掘里,affinity propagation(AP)是一种基于数据点之间的“信息传递”的聚类算法。与k-means等其它聚类算法不同的是,AP不需要在聚类前确定或估计类的个数。类似于k-medoids, AP需要寻找原型(exemplars), 即,代表类的输入集里的成员。AP算法广泛应用于计算机视觉和计算生物学领域。

算法描述

x1,x2,…,xnx_1, x_2, \dots, x_nx1,x2,,xn 组成数据点集合,这里并不需要假设数据集的结构。令 sss 是一个量化任何两点相似度的函数。对任意 xix_ixi, s(xi,xj)>s(xi,xk)s(x_i, x_j)>s(x_i, x_k)s(xi,xj)>s(xi,xk), 当且仅当
xix_ixi

### Affinity Propagation 算法简介 Affinity Propagation (AP) 是一种基于消息传递的聚类算法,它通过计算数据点之间的相似度来寻找具有代表性的样本作为聚类中心[^1]。该算法不需要预先指定聚类的数量 \(k\),而是通过调整偏好参数(preference parameter)来自适应地决定合适的簇数。 对于鸢尾花数据集(Iris Dataset),可以利用 AP 算法对其进行无监督学习并完成分类任务。以下是具体实现及其解析: --- ### 实现代码及解析 #### 导入必要的库 ```python import numpy as np from sklearn.cluster import AffinityPropagation from sklearn.datasets import load_iris from sklearn.metrics import adjusted_rand_score, silhouette_score ``` 上述代码导入了所需的 Python 库,其中 `sklearn` 提供了加载鸢尾花数据集以及执行 AP 聚类的功能[^2]。 --- #### 加载数据集 ```python data = load_iris() X = data.data # 特征矩阵 y_true = data.target # 真实标签 ``` 这里使用 `load_iris()` 函数获取鸢尾花数据集中的特征矩阵 \(X\) 和真实类别标签 \(y_{\text{true}}\)。这些数据将用于后续的模型训练和评估[^3]。 --- #### 构建与运行 AP 模型 ```python ap_model = AffinityPropagation(damping=0.9, max_iter=200, convergence_iter=15, preference=-50).fit(X) cluster_centers_indices = ap_model.cluster_centers_indices_ labels = ap_model.labels_ n_clusters = len(cluster_centers_indices) print(f"Estimated number of clusters: {n_clusters}") ``` 此部分定义了一个 AP 模型实例,并设置了关键超参数: - **damping**: 控制消息更新过程中的阻尼系数,默认值为 0.5;较高的值有助于稳定收敛。 - **max_iter**: 设置最大迭代次数以防止过长时间运行。 - **convergence_iter**: 判断是否达到收敛状态所需连续不变化的最大迭代轮次。 - **preference**: 影响最终产生的簇数量,通常设置为负值表示更少的簇[^4]。 调用 `.fit(X)` 方法后即可获得预测结果,包括每个簇对应的索引位置 (`cluster_centers_indices`) 及分配给各点所属的簇标记 (`labels`)。 --- #### 性能评估 ```python score_ar = adjusted_rand_score(y_true, labels) score_silhouette = silhouette_score(X, labels) print(f"Adjusted Rand Index Score: {score_ar:.3f}") print(f"Silhouette Coefficient Score: {score_silhouette:.3f}") ``` 为了衡量 AP 的性能表现,采用两种指标进行量化分析: - Adjusted Rand Index (\(ARI\)) 表示实际分组与预期分组之间的一致程度,取值范围 \([-1, 1]\),越接近于 1 效果越好; - Silhouette Coefficient 描述单一样本与其所在簇内部紧密性和外部分离性关系的程度,其理想区间位于 [0, 1] 内[^5]。 --- ### 完整代码展示 ```python import numpy as np from sklearn.cluster import AffinityPropagation from sklearn.datasets import load_iris from sklearn.metrics import adjusted_rand_score, silhouette_score # 数据准备 data = load_iris() X = data.data y_true = data.target # 建立 AP 模型 ap_model = AffinityPropagation(damping=0.9, max_iter=200, convergence_iter=15, preference=-50).fit(X) cluster_centers_indices = ap_model.cluster_centers_indices_ labels = ap_model.labels_ # 输出估计的簇数目 n_clusters = len(cluster_centers_indices) print(f"Estimated number of clusters: {n_clusters}") # 计算 ARI 和轮廓系数得分 score_ar = adjusted_rand_score(y_true, labels) score_silhouette = silhouette_score(X, labels) print(f"Adjusted Rand Index Score: {score_ar:.3f}") print(f"Silhouette Coefficient Score: {score_silhouette:.3f}") ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值