#-*-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可以聚类出形状相似的部分,而且其它的方法都需要指定聚类的簇数