利用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()

posted @ 2021-04-03 08:53  光彩照人  阅读(3742)  评论(2编辑  收藏  举报