一、kmeans聚類
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import re pd.set_option('max_columns', 600) pd.set_option('max_rows', 500) from sklearn.manifold import TSNE from scipy.cluster.vq import vq, kmeans, whiten a = np.random.multivariate_normal([0, 0], [[4, 1], [1, 4]], size=10) b = np.random.multivariate_normal([30, 10], [[10, 2], [2, 1]], size=10) features=np.concatenate((a, b)) #白化處理 whitened = whiten(features) #k-means聚類 codebook, distortion = kmeans(whitened, 3)# 返回聚類中心點和每個類的平均誤差 #返回每行數據聚類的編號及偏差 codes, error = vq(whitened, codebook) #將聚類結果形成dataframe df=pd.DataFrame(features) df['code']=codes #可視化展現聚類效果 d=df.loc[df.code==0,:] plt.plot(d[0],d[1],'r.') d=df.loc[df.code==1,:] plt.plot(d[0],d[1],'go') d=df.loc[df.code==2,:] plt.plot(d[0],d[1],'b*') plt.show()
二、TNSE
TSNE提供了一種有效的降維方式,可以對高於2維數據的聚類結果以二維的方式展示出來。
#!/usr/bin/env python #-- coding:utf-8 -- #接kmeans.py #k_means.py中得到三維規范化數據data_zs; #r增加了最后一列,列索引為“聚類類別” from sklearn.manifold import TSNE tsne=TSNE() tsne.fit_transform(data_zs) #進行數據降維,降成兩維 #a=tsne.fit_transform(data_zs) #a是一個array,a相當於下面的tsne_embedding tsne=pd.DataFrame(tsne.embedding_,index=data_zs.index) #轉換數據格式 import matplotlib.pyplot as plt d=tsne[r[u'聚類類別']==0] plt.plot(d[0],d[1],'r.') d=tsne[r[u'聚類類別']==1] plt.plot(d[0],d[1],'go') d=tsne[r[u'聚類類別']==2] plt.plot(d[0],d[1],'b*') plt.show()