5.2.2 K-Mean聚类算法

K-Means算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据换分为预定的类数K,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。
算法过程

  1. 从N个样本数据中随机选取K个对象作为初始的聚类中心
  2. 分别计算各个样本到各个聚类中心的距离,将对象分配到最近的聚类中。
  3. 所有对象分配完后,重新计算K个聚类的中心。
  4. 与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化,转过程2,否则转过程5
  5. 当质心不发生变化时,停止并输出聚类结果

连续属性
要先对各个属性值进行 零 - 均值规范,再进行距离计算。在K-Means中聚类算法中,一般需要度量样本之间的距离、样本与簇之间的距离、簇与簇之间的距离

零-均值规范化
也称为标准差标准化,经过处理的数据的均值为0,标准差为1。
转化公式:当前使用最多的数据标准化方法

实践中,为得到较好的结果,通常选择不同初始聚类中心,多次运行K-Means算法。
在所有对象分配完成后,重新计算K个聚类的中心时,对于连续数据,聚类中心取该簇的均值,但当样本的某些属性是分类变量时,均值可能无定义,可以使用K-众数方法。

使用误差平法和SSE(sum of squared errors)作为度量聚类质量的目标函数,对于两种不同的聚类结果,选择误差平方和较小的分类结果





案例

消费行为特征数据 聚类分析

采用K-Means算法,设定聚类个数K为3,最大迭代次数为500次,距离函数区欧式距离

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 初始化参数
inputfile = './data/consumption_data.xls'  # 销量及其他属性数据
outputfile = './data/data_type_2.xls'        # 保存结果
k = 3
iteration = 500

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)
model.fit(data_zs)

# 打印结果
r1 = pd.Series(model.labels_).value_counts()  # 统计各个类别数目
r2 = pd.DataFrame(model.cluster_centers_)     # 找出聚类中心

r = pd.concat([r1, r2], axis=1)  # 横向连接(0是纵向), 得到聚类中心对应得类别下的数目
r.columns = list(data.columns) + [u'类别数目']  # 重命名表头

# 详细输出原始数据及其类别
r = pd.concat([data, pd.Series(model.labels_, index = data.index )], axis=1)
r.columns = list(data.columns) + [u'聚类类别']  # 重命名表头
r.to_excel(outputfile)  # 保存结果

def density_plot(data):
    plt.figure(figsize=(12, 6))  # 设置画布大小
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号
    p = data.plot(kind='kde', linewidth=2, subplots=True, sharex=False)
    [p[i].set_ylabel(u'密度') for i in range(k)]
    plt.legend()
    return plt

pic_output = './data/pd_'  # 概率密度图文件名前缀
for i in range(k):
    density_plot(data[r[u'聚类类别'] == i]).savefig(u'%s%s.png' %(pic_output, i))


image.png
image.png

总结
分群1特点:R间隔相对较大,主要集中在3080天;消费次数集中在015次;消费金额在:0~2000;
分群2特点:R间隔相对较小,主要集中在030天;消费次数集中在010次;消费金额在:0~1800;
分群3特点:R间隔相对较小,主要集中在030天;消费次数集中在1025次;消费金额在:500~2000;
对比分析
分群3时间间隔短,消费次数多,消费金额大,是高消费、高价值人群。
分群2时间间隔、消费次数、消费金额中等水平,代表着一般价值客户。
分群1时间间隔长、消费次数较少、消费金额不是特别高,价值较低的客户群体。

聚类分析算法评价

  • purity 评价法
  • RI 评价法
  • F 值评价法

你可能感兴趣的:(5.2.2 K-Mean聚类算法)