机器学习训练营——机器学习爱好者的自由交流空间(入群联系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​ 与 xjx_jxj​ 更相似。在这里,使用负平方距离,即,

s(i,j)=−∥xi−xj∥2s(i, j)=-\|x_i-x_j\|^2s(i,j)=−∥xi​−xj​∥2
令相似矩阵 S=(s(i,j))S=(s(i, j))S=(s(i,j)), 它的对角元 s(i,i)s(i, i)s(i,i) 尤其重要,因为它代表了输入偏好。这意味着一个输入在多大程度上可能是一个exemplar. 特别地,当所有对角元都相同时,它实际上控制了算法产生多少个类。该值越大,产生的类就越多。AP算法在两个信息传递步迭代,升级两个测度。

  • responsibility 矩阵 R\mathrm{R}R, 矩阵元素 r(i,k)r(i, k)r(i,k) 量化 xix_ixi​ 作为 xkx_kxk​ 的exemplar的适配程度。

  • availability 矩阵 A\mathrm{A}A, 矩阵元素 a(i,k)a(i, k)a(i,k) 表示 xix_ixi​ 选择 xkx_kxk​ 作为它的exemplar的适合程度。

R\mathrm{R}R, A\mathrm{A}A 初始化为零矩阵。然后,算法在下面的两步间迭代升级:

  • 首先升级 R\mathrm{R}R:

r(i,k)←s(i,k)−max⁡k′≠k{a(i,k′)+s(i,k′)}r(i, k)\leftarrow s(i, k)-\max_{k'\ne k}\{a(i, k')+s(i, k')\}r(i,k)←s(i,k)−k′̸​=kmax​{a(i,k′)+s(i,k′)}

  • 然后升级 A\mathrm{A}A:

a(i,k)←min⁡⟮0,r(k,k)+∑i′∉{i,k}max⁡(0,r(i′,k))⟯   for  i≠ka(i, k)\leftarrow \min \lgroup 0, r(k, k)+\sum_{i'\notin\{i, k\}}\max(0, r(i', k))\rgroup\,\,\, for \,\, i\ne ka(i,k)←min⟮0,r(k,k)+i′∈/​{i,k}∑​max(0,r(i′,k))⟯fori̸​=k

a(k,k)←∑i′≠kmax⁡(0,r(i′,k))a(k, k)\leftarrow \sum_{i'\ne k}\max (0, r(i', k))a(k,k)←i′̸​=k∑​max(0,r(i′,k))

迭代进行到达到类的边界,或者预定的迭代次数,算法停止。对于满足 r(i,i)+a(i,i)>0r(i, i)+a(i, i)>0r(i,i)+a(i,i)>0 的数据点,作为类的exemplars.

Python 实例

scikit-learn的方法 AffinityPropagation 实现AP聚类。下面,我们使用方法make_blobs
模拟300个样本、3个中心的isotropic高斯数据团,在这些模拟数据上进行聚类,比较聚类效果。

from sklearn.cluster import AffinityPropagation
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs# #############################################################################
# Generate sample data
centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(n_samples=300, centers=centers, cluster_std=0.5,random_state=0)# #############################################################################
# Compute Affinity Propagation
af = AffinityPropagation(preference=-50).fit(X)
cluster_centers_indices = af.cluster_centers_indices_
labels = af.labels_n_clusters_ = len(cluster_centers_indices)print('Estimated number of clusters: %d' % n_clusters_)
print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels_true, labels))
print("Completeness: %0.3f" % metrics.completeness_score(labels_true, labels))
print("V-measure: %0.3f" % metrics.v_measure_score(labels_true, labels))
print("Adjusted Rand Index: %0.3f"% metrics.adjusted_rand_score(labels_true, labels))
print("Adjusted Mutual Information: %0.3f"% metrics.adjusted_mutual_info_score(labels_true, labels))
print("Silhouette Coefficient: %0.3f"% metrics.silhouette_score(X, labels, metric='sqeuclidean'))# #############################################################################
# Plot result
import matplotlib.pyplot as plt
from itertools import cycleplt.close('all')
plt.figure(1)
plt.clf()colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk')
for k, col in zip(range(n_clusters_), colors):class_members = labels == kcluster_center = X[cluster_centers_indices[k]]plt.plot(X[class_members, 0], X[class_members, 1], col + '.')plt.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col,markeredgecolor='k', markersize=14)for x in X[class_members]:plt.plot([cluster_center[0], x[0]], [cluster_center[1], x[1]], col)plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()

精彩内容,请关注微信公众号:统计学习与大数据

【Python实例第18讲】affinity propagation聚类算法相关推荐

  1. Affinity Propagation聚类算法详解

    欢迎关注"生信修炼手册"! Affinity Propagation简称AP, 称之为近邻传播算法, 是一种基于图论的聚类算法.将所有样本点看做是一个网络中的节点,图示如下 在样本 ...

  2. Affinity Propagation+聚类

    Affinity Propagation+聚类 sklearn.cluster.AffinityPropagation 谱聚类和AP聚类是基于图的两种聚类. AP在实际计算应用中,最重要的两个参数(也 ...

  3. 聚类 python 代码_不足 20 行 Python 代码,高效实现 k-means 均值聚类算法

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法-1.jpg (143.81 KB, ...

  4. 以最易懂的人话讲分类和聚类算法(建议分享和收藏)

    以最易懂的人话讲分类和聚类算法(建议分享) 今天在使用聚类方法进行客户价值分析时遇到了个问题,将我卡住了半个小时,实际上现在想来是一个很简单的问题,但是大家都知道,一个人脑子短路时就是会一个小学数学题 ...

  5. 用python做简单的聚类分析案例_Python聚类算法之DBSACN实例分析

    本文实例讲述了Python聚类算法之DBSACN.分享给大家供大家参考,具体如下: DBSCAN:是一种简单的,基于密度的聚类算法.本次实现中,DBSCAN使用了基于中心的方法.在基于中心的方法中,每 ...

  6. 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法!

    作者 | 许文武 责编 | 郭芮 出品 | CSDN 博客 scikti-learn 将机器学习分为4个领域,分别是分类(classification).聚类(clustering).回归(regre ...

  7. python音频聚类_利用python的KMeans和PCA包实现聚类算法

    题目: 通过给出的驾驶员行为数据(trip.csv),对驾驶员不同时段的驾驶类型进行聚类,聚成普通驾驶类型,激进类型和超冷静型3类 . 利用Python的scikit-learn包中的Kmeans算法 ...

  8. kmeans鸢尾花分类python代码_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)

    一.分散性聚类(kmeans) 算法流程: 1.选择聚类的个数k. 2.任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心. 3.对每个点确定其聚类中心点. 4.再计算其聚类新中心. 5.重复以 ...

  9. Python数据挖掘与机器学习,快速掌握聚类算法和关联分析

    摘要:前文数据挖掘与机器学习技术入门实战与大家分享了分类算法,在本文中将为大家介绍聚类算法和关联分析问题.分类算法与聚类到底有何区别?聚类方法应在怎样的场景下使用?如何使用关联分析算法解决个性化推荐问 ...

  10. 【转】利用python的KMeans和PCA包实现聚类算法

    转自:https://www.cnblogs.com/yjd_hycf_space/p/7094005.html 题目: 通过给出的驾驶员行为数据(trip.csv),对驾驶员不同时段的驾驶类型进行聚 ...

最新文章

  1. 分别从资源管理,服务用户,进程交互,系统实现的角度分析操作系统的作用
  2. 01.elasticsearch-security_es鉴权机制
  3. 在php中怎么用js跳转页面跳转,在php中怎么用redirect实现页面跳转?
  4. Python字典依据value排序
  5. 福建省12.5米DEM数字高程数据
  6. 【MATLAB】报错:数组索引必须为正整数或逻辑值
  7. snaker工作流审批流程参数详解
  8. window7系统电脑屏幕亮度调节
  9. 能用CSS实现的就不用麻烦JavaScript(Part2)
  10. BW项目随手记:SAP 采购单位和基本计量单位转换关系
  11. 小米手机短信拦截转发失败原因
  12. 【期末复习】操作系统
  13. markdown写出项目目录结构
  14. 楼教主的ACM心路历程
  15. 光电耦合器原理及应用介绍
  16. aoc usb显示器 linux,AOC首款USB连接云显示器
  17. HTML Tab选项卡
  18. 薏米食品领军品牌先天元,借新零售之力创造十亿级产业
  19. [渝粤教育] 西南科技大学 电工学 在线考试复习资料
  20. 抢购失败,无法获取生成订单的基本信息,接口返回:【‘addressList’】解决方案,实测可用!

热门文章

  1. 网奇iwms插件之“我浏览过的文章”
  2. shell之sed、awk
  3. HCIE-Security Day20:GRE协议:实验(一)配置基于静态路由的GRE隧道
  4. c 语言重载参数类型不同重载和,C/C++函数重载与缺省参数
  5. 设计模式七大原则简述
  6. Cocos2d-x中常用的类
  7. Kafka笔记1(初步认识)
  8. jdk,jre,tommcat配置问题
  9. [arduino]-序言:面向仅有C语言基础之人的单片机开发板
  10. Linux内核(4) - 内核学习的心理问题