博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Affinity Propagation Demo1学习
阅读量:4597 次
发布时间:2019-06-09

本文共 4319 字,大约阅读时间需要 14 分钟。

利用AP算法进行聚类:

首先导入需要的包:

from sklearn.cluster import AffinityPropagationfrom sklearn import metricsfrom sklearn.datasets.samples_generator 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)

 

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

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

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

 

打印各种评价指标分数:

print('估计的类簇数: %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')) # sqeuclidean欧式距离平方

 

可视化聚类结果:

导入画图需要的包:

import matplotlib.pyplot as pltfrom itertools import cycleplt.close('all')  plt.figure(1)plt.clf() # 清除当前图的所有信息colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk')
close()方法介绍【可忽略】
close方法简介:matplotlib.pyplot.close(*args)   --- Close a figure window.close() by itself closes the current figureclose(fig) closes the Figure instance figclose(num) closes the figure number numclose(name) where name is a string, closes figure with that labelclose('all') closes all the figure windows
View Code

 

for k, col in zip(range(n_clusters_),colors):    class_members = labels == k;    print('k:',k)    print('labels:',labels)    print('cls_member--------',class_members)  cluster_center = X[cluster_centers_indices[k]]  print('cluster_center:', cluster_center)   # 画样本点  plt.plot(X[class_members, 0], X[class_members, 1], col + '.')  # 画中心点  plt.plot(cluster_center[0], cluster_center[1], 'o',         markeredgecolor='k', markersize=28)  # 划线  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()# 显示图

 

运行结果:

 

完整代码:
print(__doc__)from sklearn.cluster import AffinityPropagationfrom sklearn import metricsfrom sklearn.datasets.samples_generator import make_blobs# ################################################## generate sample datacenters = [[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 Propagationaf = AffinityPropagation(preference=-50).fit(X) # preference采用负的欧氏距离cluster_centers_indices = af.cluster_centers_indices_labels = af.labels_  # 样本标签n_clusters_ = len(cluster_centers_indices) # 类簇数print('估计的类簇数: %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')) # sqeuclidean欧式距离平方# ########################################################### Plot resultimport matplotlib.pyplot as pltfrom 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 == k;    print('k:',k)    print('labels:',labels)    print('cls_member--------',class_members)    cluster_center = X[cluster_centers_indices[k]]    print('cluster_center:', cluster_center)    plt.plot(X[class_members, 0], X[class_members, 1], col + '.')    plt.plot(cluster_center[0], cluster_center[1], 'o',             markeredgecolor='k', markersize=28)    # 划线    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()
View Code

 

转载于:https://www.cnblogs.com/1zhangwenjing/p/9138378.html

你可能感兴趣的文章
html5 Canvas绘制时钟以及绘制运动的圆
查看>>
Unity3D热更新之LuaFramework篇[05]--Lua脚本调用c#以及如何在Lua中使用Dotween
查看>>
JavaScript空判断
查看>>
洛谷 P1439 【模板】最长公共子序列(DP,LIS?)
查看>>
python timeit
查看>>
Wireless Network 并查集
查看>>
51nod 1019 逆序数
查看>>
20145202马超《JAVA》预备作业1
查看>>
台湾好市多概述
查看>>
shell-逐行读取文件
查看>>
贝叶斯如何生效
查看>>
UVA - 1588 - Kickdown
查看>>
Win32 SDK:ListBox 为什么不整个 LB_SETTEXT
查看>>
spring的优缺点
查看>>
优云老王的心路历程(一):那个做了五年的产品经理
查看>>
双态运维分享之:业务场景驱动的服务型CMDB
查看>>
cocos2dx-3.6 触摸,键盘,聚焦事件
查看>>
JEECG中t:dictSelect的extendJson用法
查看>>
web开发下的各种下载方法
查看>>
第六章 堆排序 6.5 优先队列
查看>>