聚类算法之AP算法
来源:互联网 发布:明朝东林党 知乎 编辑:程序博客网 时间:2024/05/06 05:06
Preference: -5.29914553034mul= 1.0p=1.0 -5.29914553034 聚类簇的个数为: 16
# -*- coding:utf-8 -*-import numpy as npimport matplotlib.pyplot as pltimport sklearn.datasets as dsimport matplotlib.colorsfrom sklearn.cluster import AffinityPropagationfrom sklearn.metrics import euclidean_distances#聚类算法之AP算法:#1--与其他聚类算法不同,AP聚类不需要指定K(金典的K-Means)或者是其他描述聚类个数的参数#2--一个聚类中最具代表性的点在AP算法中叫做Examplar,与其他算法中的聚类中心不同,examplar#是原始数据中确切存在的一个数据点,而不是由多个数据点求平均而得到的聚类中心#3--多次执行AP聚类算法,得到的结果完全一样的,即不需要进行随机选取初值步骤.#算法复杂度较高,为O(N*N*logN),而K-Means只是O(N*K)的复杂度,当N》3000时,需要算很久#AP算法相对于Kmeans优势是不需要指定聚类数量,对初始值不敏感#AP算法应用场景:图像、文本、生物信息学、人脸识别、基因发现、搜索最优航线、 码书设计以及实物图像识别等领域#算法详解: http://blog.csdn.net/helloeveryon/article/details/51259459if __name__=='__main__': #scikit中的make_blobs方法常被用来生成聚类算法的测试数据,直观地说,make_blobs会根据用户指定的特征数量、 # 中心点数量、范围等来生成几类数据,这些数据可用于测试聚类算法的效果。 #函数原型:sklearn.datasets.make_blobs(n_samples=100, n_features=2, # centers=3, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None)[source] #参数解析: # n_samples是待生成的样本的总数。 # # n_features是每个样本的特征数。 # # centers表示类别数。 # # cluster_std表示每个类别的方差,例如我们希望生成2类数据,其中一类比另一类具有更大的方差,可以将cluster_std设置为[1.0, 3.0]。 N=400 centers = [[1, 2], [-1, -1], [1, -1], [-1, 1]] #生成聚类算法的测试数据 data,y=ds.make_blobs(N,n_features=2,centers=centers,cluster_std=[0.5, 0.25, 0.7, 0.5],random_state=0) #计算向量之间的距离 m=euclidean_distances(data,squared=True) #求中位数 preference=-np.median(m) print 'Preference:',preference matplotlib.rcParams['font.sans-serif'] = [u'SimHei'] matplotlib.rcParams['axes.unicode_minus'] = False plt.figure(figsize=(12,9),facecolor='w') for i,mul in enumerate(np.linspace(1,4,9)):#遍历等差数列 print 'mul=',mul p=mul*preference model=AffinityPropagation(affinity='euclidean',preference=p) af=model.fit(data) center_indices=af.cluster_centers_indices_ n_clusters=len(center_indices) print ('p=%.1f'%mul),p,'聚类簇的个数为:',n_clusters y_hat=af.labels_ plt.subplot(3,3,i+1) plt.title(u'Preference:%.2f,簇个数:%d' % (p, n_clusters)) clrs=[] for c in np.linspace(16711680, 255, n_clusters): clrs.append('#%06x' % c) for k, clr in enumerate(clrs): cur = (y_hat == k) plt.scatter(data[cur, 0], data[cur, 1], c=clr, edgecolors='none') center = data[center_indices[k]] for x in data[cur]: plt.plot([x[0], center[0]], [x[1], center[1]], color=clr, zorder=1) plt.scatter(data[center_indices, 0], data[center_indices, 1], s=100, c=clrs, marker='*', edgecolors='k', zorder=2) plt.grid(True) plt.tight_layout() plt.suptitle(u'AP聚类', fontsize=20) plt.subplots_adjust(top=0.92) plt.show()
0 0
- 聚类算法之AP算法
- AP聚类算法
- AP聚类算法
- AP聚类算法
- AP聚类算法
- AP聚类算法
- AP聚类算法
- AP聚类算法学习
- AP聚类算法原理
- ap(affinity propagation)聚类算法
- AP聚类算法(1)
- 聚类算法Affinity Propagation(AP)
- Affinity Propagation: AP聚类算法
- ap聚类算法(java实现)
- AP聚类算法原理分析
- 浅谈AP聚类算法-matlab
- AffinityPropagation(AP聚类算法)待理解
- AP近邻传播聚类算法总结
- 【模拟】洛谷 P1205 [USACO1.2]方块转换 Transformations
- 关于任务管理器更新近期打开应用的问题
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端),androidmysql
- jenkins通过shell脚本持续集成构建IPA包
- 微信小程序日期选择器
- 聚类算法之AP算法
- lintcode/leetcode由易至难第2题:冒泡排序
- Mac 设置安全与隐私没有允许任何来源选项
- LOCAL_JNI_SHARED_LIBRARIES
- C++Future简单的使用
- 【枚举】洛谷 P1206 [USACO1.2]回文平方数 Palindromic Squares
- IIS 互联网信息服务(Internet Information Server)
- angular2的服务
- 【Leetcode】523. Continuous Subarray Sum