python数据分析与挖掘实战—聚类算法对比

#-*-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的结果,K5
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可以聚类出形状相似的部分,而且其它的方法都需要指定聚类的簇数
    原文作者:聚类算法
    原文地址: https://blog.csdn.net/u012749168/article/details/71330238
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞