这里介绍 Kmeans 聚类算法,K-Means 聚类算法在之前就介绍过,只不过哪个时候用的是 mahout
算法的原理和过程不再介绍了,在 NLP 专栏可以找到,不再累述,主要是这里增加了一个聚类结果可视化工具 TSNE,它的定位是高维数据的可视化,TSNE 提供了一种有效的数据降维方式,让我们可以在 2 维或者 3 维的空间对高维数据展示聚类结果。数据 consumption_data.xls
#-*- coding:utf-8 -*-
import pandas as pd
#参数初始化
inputfile = 'wajue/consumption_data.xls'
outputfile = 'wajue/data_type.xls'
# 聚类数量
k = 3
# 最大迭代次数
iteration = 500
data = pd.read_excel(inputfile,index_col = 'Id')
# 数据标准化
data_zs = 1.0*(data-data.mean()) / data.std()
from sklearn.cluster import KMeans
model = KMeans(n_clusters = k, n_jobs = 4, max_iter = iteration)
# 聚类
model.fit(data_zs)
# 打印结果
r1 = pd.Series(model.labels_).value_counts()
r2 = pd.DataFrame(model.cluster_centers_) # 聚类中心
# 连接,得到聚类中心对应的类别下的数目
r = pd.concat([r2,r1],axis =1)
r.columns = list(data.columns) + [u"类别数目"]
print r
# 聚类可视化
from sklearn.manifold import TSNE
tsne = TSNE()
# 进行数据降维
tsne.fit_transform(data_zs)
# 转换数据格式
tsne = pd.DataFrame(tsne.embedding_,index = data_zs.index)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 不同类别用不同颜色和样式绘图
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()