通常输入的特征数据是高维的(大于3维),一般难以直接以原特征对聚类结果进行展示。而TSNE提供了一种有效的数据降维方式,让我们可以在2维或者3维的空间中展示聚类结果
对餐饮客户群聚类分析后的客户群数据可视化
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# 初始化参数
inputfile = './data/consumption_data.xls' # 销量及其他属性数据
data = pd.read_excel(inputfile, index_col = 'Id') # 读取数据
data_zs = 1.0 * (data - data.mean()) / data.std() # 数据标准化
model = KMeans(n_clusters=k, n_jobs=4, max_iter=iteration) # 分为K类, 并发4
model.fit(data_zs) # 开始聚类
# 标准化数据及其类别
## 每个样本对应得类别
r = pd.concat([data_zs, pd.Series(model.labels_, data.index)], axis=1)
r.columns = list(data.columns) + [u'聚类类别']
tsne = TSNE()
tsne.fit_transform(data_zs) # 进行数据降维
tsne = pd.DataFrame(tsne.embedding_, index=data_zs.index) # 转换数据格式
plt.figure(figsize=(16, 8))
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()
image.png
一样可以得到绿色的客户群是高价值客户群