利用AP算法进行聚类:

首先导入需要的包:

  1. from sklearn.cluster import AffinityPropagation
  2. from sklearn import metrics
  3. from sklearn.datasets.samples_generator import make_blobs

生成一组数据:

  1. centers = [[1, 1], [-1, -1], [1, -1]]
  2. X, labels_true = make_blobs(n_samples=300, centers=centers, cluster_std=0.5, random_state=0)

以上代码包括3个类簇的中心点以及300个以这3个点为中心的样本点。

接下来要利用AP算法对这300个点进行聚类。

  1. af = AffinityPropagation(preference=-50).fit(X) # preference采用负的欧氏距离
  2. cluster_centers_indices = af.cluster_centers_indices_
  3. labels = af.labels_ # 样本标签
  4. n_clusters_ = len(cluster_centers_indices) # 类簇数

打印各种评价指标分数:

  1. print('估计的类簇数: %d' % n_clusters_)
  2. print('Homogeneity: %0.3f' % metrics.homogeneity_score(labels_true, labels))
  3. print('Completeness: %0.3f' %metrics.completeness_score(labels_true, labels))
  4. print('V-measure: %0.3f' %metrics.v_measure_score(labels_true, labels))
  5. print('Adjusted Rand Index:%0.3f' %metrics.adjusted_rand_score(labels_true, labels))
  6. print('Adjusted Mutual Information:%0.3f'%metrics.adjusted_mutual_info_score(labels_true, labels))
  7. print('Silhouette Coefficient:%0.3f' %metrics.silhouette_score(X, labels, metric='sqeuclidean')) # sqeuclidean欧式距离平方

可视化聚类结果:

导入画图需要的包:

  1. import matplotlib.pyplot as plt
  2. from itertools import cycle
  3. plt.close('all')
  4. plt.figure(1)
  5. plt.clf() # 清除当前图的所有信息
  6. colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk')
  1. close()方法介绍【可忽略】
  1. close方法简介:
  2.  
  3. matplotlib.pyplot.close(*args) --- Close a figure window.
  4. close() by itself closes the current figure
  5.  
  6. close(fig) closes the Figure instance fig
  7.  
  8. close(num) closes the figure number num
  9.  
  10. close(name) where name is a string, closes figure with that label
  11.  
  12. close('all') closes all the figure windows
  1. for k, col in zip(range(n_clusters_),colors):
  2. class_members = labels == k;
  3. print('k:',k)
  4. print('labels:',labels)
  5. print('cls_member--------',class_members)
  6.   cluster_center = X[cluster_centers_indices[k]]
  7.   print('cluster_center:', cluster_center)
  8. # 画样本点
  9.   plt.plot(X[class_members, 0], X[class_members, 1], col + '.')
  10.   # 画中心点
  11.   plt.plot(cluster_center[0], cluster_center[1], 'o',
  12. markeredgecolor='k', markersize=28)
  13.   
  14. # 划线
  15.   for x in X[class_members]:
  16.    plt.plot([cluster_center[0], x[0]], [cluster_center[1], x[1]], col)
  17.  
  18. plt.title('Estimated number of clusters:%d' %n_clusters_)
  19. plt.show()# 显示图
  1. 运行结果:

  1. 完整代码:
  1. print(__doc__)
  2.  
  3. from sklearn.cluster import AffinityPropagation
  4. from sklearn import metrics
  5. from sklearn.datasets.samples_generator import make_blobs
  6.  
  7. # #################################################
  8. # generate sample data
  9. centers = [[1, 1], [-1, -1], [1, -1]]
  10. X, labels_true = make_blobs(n_samples=300, centers=centers, cluster_std=0.5, random_state=0)
  11.  
  12. # #######################################################
  13. # Compute Affinity Propagation
  14. af = AffinityPropagation(preference=-50).fit(X) # preference采用负的欧氏距离
  15. cluster_centers_indices = af.cluster_centers_indices_
  16. labels = af.labels_ # 样本标签
  17.  
  18. n_clusters_ = len(cluster_centers_indices) # 类簇数
  19.  
  20. print('估计的类簇数: %d' % n_clusters_)
  21. print('Homogeneity: %0.3f' % metrics.homogeneity_score(labels_true, labels))
  22. print('Completeness: %0.3f' %metrics.completeness_score(labels_true, labels))
  23. print('V-measure: %0.3f' %metrics.v_measure_score(labels_true, labels))
  24. print('Adjusted Rand Index:%0.3f' %metrics.adjusted_rand_score(labels_true, labels))
  25. print('Adjusted Mutual Information:%0.3f'%metrics.adjusted_mutual_info_score(labels_true, labels))
  26. print('Silhouette Coefficient:%0.3f' %metrics.silhouette_score(X, labels, metric='sqeuclidean')) # sqeuclidean欧式距离平方
  27.  
  28. # ##########################################################
  29. # Plot result
  30. import matplotlib.pyplot as plt
  31. from itertools import cycle
  32.  
  33. plt.close('all')
  34. plt.figure(1)
  35. plt.clf()
  36. colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk')
  37. for k, col in zip(range(n_clusters_),colors):
  38. class_members = labels == k;
  39. print('k:',k)
  40. print('labels:',labels)
  41. print('cls_member--------',class_members)
  42.  
  43. cluster_center = X[cluster_centers_indices[k]]
  44. print('cluster_center:', cluster_center)
  45. plt.plot(X[class_members, 0], X[class_members, 1], col + '.')
  46. plt.plot(cluster_center[0], cluster_center[1], 'o',
  47. markeredgecolor='k', markersize=28)
  48.  
  49. # 划线
  50. for x in X[class_members]:
  51. plt.plot([cluster_center[0], x[0]], [cluster_center[1], x[1]], col)
  52.  
  53. plt.title('Estimated number of clusters:%d' %n_clusters_)
  54. plt.show()

Affinity Propagation Demo1学习的更多相关文章

  1. Affinity Propagation Demo2学习【可视化股票市场结构】

    这个例子利用几个无监督的技术从历史报价的变动中提取股票市场结构. 使用报价的日变化数据进行试验. Learning a graph structure 首先使用sparse inverse(相反) c ...

  2. AP(affinity propagation)研究

    待补充…… AP算法,即Affinity propagation,是Brendan J. Frey* 和Delbert Dueck于2007年在science上提出的一种算法(文章链接,维基百科) 现 ...

  3. Affinity Propagation Algorithm

    The principle of Affinity Propagation Algorithm is discribed at above. It is widly applied in many f ...

  4. Affinity Propagation

    1. 调用方法: AffinityPropagation(damping=0.5, max_iter=200, convergence_iter=15, copy=True, preference=N ...

  5. AP聚类算法(Affinity propagation Clustering Algorithm )

    AP聚类算法是基于数据点间的"信息传递"的一种聚类算法.与k-均值算法或k中心点算法不同,AP算法不需要在运行算法之前确定聚类的个数.AP算法寻找的"examplars& ...

  6. knn/kmeans/kmeans++/Mini Batch K-means/Affinity Propagation/Mean Shift/层次聚类/DBSCAN 区别

    可以看出来除了KNN以外其他算法都是聚类算法 1.knn/kmeans/kmeans++区别 先给大家贴个简洁明了的图,好几个地方都看到过,我也不知道到底谁是原作者啦,如果侵权麻烦联系我咯~~~~ k ...

  7. [Python] 机器学习库资料汇总

    声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...

  8. 【转帖】Python在大数据分析及机器学习中的兵器谱

    Flask:Python系的轻量级Web框架. 1. 网页爬虫工具集 Scrapy 推荐大牛pluskid早年的一篇文章:<Scrapy 轻松定制网络爬虫> Beautiful Soup ...

  9. python数据挖掘领域工具包

    原文:http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块:Numpy和Sc ...

随机推荐

  1. 「CodeForces 476A」Dreamoon and Stairs

    Dreamoon and Stairs 题意翻译 题面 DM小朋友想要上一个有 \(n\) 级台阶的楼梯.他每一步可以上 \(1\) 或 \(2\) 级台阶.假设他走上这个台阶一共用了 \(x\) 步 ...

  2. C语言之while循环

    while循环能做什么??? 先来个概念格式,while循环的一般形式为: while(表达式){ 语句块 } 意思是,先计算"表达式"的值,当值为真(非0)时, 执行" ...

  3. EF 学习系列三 数据操作数据加载及EF中执行Sql

    1.实体状态 我们通过EF来对数据库进行操作并持久化到数据库,那么EF必然通过EF上下文来维护实体的状态,明确知道每一个状态所对应的操作.也就是说EF通过上下文负责跟踪实体的状态.EF实体状态存在命名 ...

  4. window bat批处理 实用脚本

    一行一行读取txt里的内容 @echo off for /f %%i in (C:\Users\86132\Desktop\name.txt) do ( echo %%i>>name2.t ...

  5. 《C++Primer》第五版习题答案--第二章【学习笔记】

    C++Primer第五版习题解答---第二章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/9 第二章:变量和基本类型 练习2.1: 类 ...

  6. 使用SqlDependency实时监听SQL server数据库变化并执行事件

    sql server设置:ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;语句让相应的数据库启用监听服务,以便支持SqlDependency ...

  7. Android学习进度一

    在解决了电脑产生的一系列问题之后成功安装了Android Studio,并在其自带的手机模拟器上成功运行了第一个App(Hello World!),通过这个最简单的App研究了App基本的工程结构,为 ...

  8. Unity_Dungeonize 随机生成迷宫

    本文对随机生成迷宫的实现思路进行记录,其作用在于为游戏过程提供随机性以及节省开发周期,下面是Dungeonize的结构 随机迷宫的生成主要包括几个阶段 1.生成房间体结构,为墙体,自定义房间,自定义物 ...

  9. 【X86】---X86处理器大小端的数据存储验证

    之前也关注过大小端的存储,可能时间久了,加之又之前的电脑抽象换成了当前的处理器寄存器的值判断,导致自己总是有点蒙圈.看Spec手册的时候,有时会无法与手册中某个Bit的值与RU/RW工具读出来的对应上 ...

  10. 【C_Language】---队列和栈的C程序实现

    这几天总结了C语言的队列,栈的实现方法,在此总结一下:一.栈 首先从栈开始,诚然,相信学习过数据结构的你,肯定应该知道栈是什么东西了,如果不知道也没事每一句话我就可以帮你总结--数据只在栈顶进行插入和 ...