利用Kemeans進行聚類及TSNE降維可視化


一、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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM