数据建模-聚类分析-K-Means算法

常用聚类方法
类别 包括主要算法
划分(分裂)方法 K-Means算法(K-平均)、K-MEDOIDS算法(K-中心点)、CLARANS算法(基于选择的算法)
层次分析方法 BIRCH算法(平衡迭代规约和聚类)、CURE算法(代表点聚类)、CHAMELEON算法(动态模型)
基于密度的方法 DBSCAN算法(基于高密度连接区域)、DENCLUE(密度分布函数)、OPTICS算法(对象排序识别)
基于网格的方法 STING算法(统计信息网络)、CLIOUE算法(聚类高维空间)、WAVE-CLUSTER算法(小波变换)
基于模型的方法 统计学方法、神经网络方法
   
常用聚类分析算法
算法名称 算法描述
K-Means K-均值聚类也称为快速聚类法,在最小化误差函数的基础上将数据划分为预定的类数K。该算法原理简单并便于处理大量数据
K-中心点 K-均值算法对孤立点的敏感性,K-中心点算法不采用簇中对象的平均值作为簇中心,而选用簇中离平均值最近的对象作为簇中心
系统聚类 系统聚类也称为多层次聚类,分类的单位由高到低呈树形结构,且所处的位置越低,其包含的对象越少,但这些对象间的共同特征越多。该聚类方法只适用在小数据量的时候使用,数据量大的时候速度会非常慢

数据+ 代码来源:Python数据分析与挖掘实战

数据:根据这些数据将客户分类成不同群体,并评价这些客户群的价值

R: 最近依次消费时间间隔;F: 消费频率;M: 消费总金额

部分数据如下:

数据建模-聚类分析-K-Means算法_第1张图片

代码:

#-*- coding: utf-8 -*-

import pandas as pd
from sklearn.cluster import KMeans


inputfile = '../data/consumption_data.xls'
outputfile = './data_type.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)    #分为k类,并发数4
model.fit(data_zs)    #开始聚类

#简单打印结果
r1 = pd.Series(model.labels_).value_counts()    #统计各个类别的数目
r2 = pd.DataFrame(model.cluster_centers_)    #找出聚类中心
r = pd.concat([r2, r1], axis=1)    #横向连接(0是横向),得到聚类中心对应的类别下的数目
r.columns = list(data.columns) + [u'类别数目']    #重命名表头
#print(r)

#详细输出原始数据及其类别

r = pd.concat([data, pd.Series(model.labels_, index=data.index)], axis=1)    #详细输出每个样本对应的类别
r.columns = list(data.columns) + [u'聚类类别']    #重命名表头
r.to_excel(outputfile)    #保存结果

输出结果部分如下:

数据建模-聚类分析-K-Means算法_第2张图片

 接着用Pandas和Matplotlib绘制的不同客户分群的概率密度函数图,通过这些图能直观地比较不同客户群的价值,代码如下:

def density_plot(data):    #自定义作图函数
    import matplotlib.pyplot as plt
    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 = './pd_'
for i in range(k):
    density_plot(data[r[u'聚类类别']==i]).savefig(u'%s%s.png' % (pic_output, i))

分群1的概率密度函数图

 数据建模-聚类分析-K-Means算法_第3张图片

 分群1特点:R间隔相对较小,主要集中在0~30天;消费次数集中在10~25次,消费金额在500~2000。

分群2的概率密度函数图

 数据建模-聚类分析-K-Means算法_第4张图片

 分群2特点:R间隔分布在0~30天;消费次数集中在0~12次;消费金额在0~1800。

分群3的概率密度函数图

 数据建模-聚类分析-K-Means算法_第5张图片

 分群3特点:R间隔相对较大,间隔分布在30~80天;消费次数在0~15次;消费金额在0~2000。

 

对比分析:分群1时间间隔较短,消费次数多,而且消费金额较大,是高消费、高价值人群。分群2的时间间隔、消费次数和消费金额处于中等水平,代表着一般客户。分群3的时间间隔较长,消费次数较少,消费金额也不是特别的高,是价值较低的客户群体。

你可能感兴趣的:(Python数据分析与挖掘)