1. 程式人生 > >python資料分析與挖掘實戰—聚類演算法對比

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可以聚類出形狀相似的部分,而且其它的方法都需要指定聚類的簇數