#-*-coding:utf-8-*- import numpy as np import matplotlib.pyplot as plt from sklearn import datasets x1,y1=datasets.make_circles(n_samples=5000,factor=.6,noise=0.05) x2,y2=datasets.make_blobs(n_samples=1000,n_features=2,centers=[[1.2,1.2]],cluster_std=[[.1]],random_state=9) #x3,y3=datasets.make_moons(n_samples=2000,noise=0.05) #plt.scatter(x3[:,0],x3[:,1],marker='o') #plt.show() plt.subplot(3,2,6)#把原始图像放在最后显示 x=np.concatenate((x1,x2)) plt.scatter(x[:,0],x[:,1],marker='o') plt.subplot(3,2,1)#第一个是kmeans的结果,K为5 from sklearn.cluster import KMeans result=KMeans(n_clusters=5,random_state=9).fit_predict(x) plt.scatter(x[:,0],x[:,1],c=result) #plt.show() plt.subplot(3,2,2) from sklearn.cluster import MiniBatchKMeans#第二个与第一个类似,不同的地方是计算距离使用的样本是不同类的抽样数据 result=MiniBatchKMeans(n_clusters=5,random_state=9).fit_predict(x) plt.scatter(x[:,0],x[:,1],c=result) #plt.show() plt.subplot(3,2,3) from sklearn.cluster import Birch#利用层次方法的平衡迭代和规约 result=Birch(n_clusters=5).fit_predict(x) plt.scatter(x[:,0],x[:,1],c=result) ''' plt.subplot(3,2,1) from sklearn.cluster import AffinityPropagation#吸引子传播,这个计算起来很慢..... result=AffinityPropagation().fit_predict(x) plt.scatter(x[:,0],x[:,1],c=result) plt.show() ''' plt.subplot(3,2,4) from sklearn.cluster import DBSCAN#具有噪声的基于密度的聚类方法,不需要指定聚类类别,但需要指定距离和簇最小样本 result=DBSCAN(eps=0.1,min_samples=10).fit_predict(x) plt.scatter(x[:,0],x[:,1],c=result) plt.subplot(3,2,5) from sklearn.cluster import SpectralClustering#谱聚类,计算相似度矩阵,相似距离使用rbf距离 result=SpectralClustering(n_clusters=5).fit_predict(x) plt.scatter(x[:,0],x[:,1],c=result) plt.show()
可以看出,当聚类数量为3时,比较明显的地方是dbscan可以聚类出形状相似的部分,而且其它的方法都需要指定聚类的簇数