数据建模-聚类分析-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: 消费总金额
部分数据如下:
代码:
#-*- coding: utf-8 -*-import pandas as pd
from sklearn.cluster import KMeansinputfile = '../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) #保存结果
输出结果部分如下:
接着用Pandas和Matplotlib绘制的不同客户分群的概率密度函数图,通过这些图能直观地比较不同客户群的价值,代码如下:
def density_plot(data): #自定义作图函数import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falsep = data.plot(kind='kde', linewidth=2, subplots=True, sharex=False)[p[i].set_ylabel(u'密度') for i in range(k)]plt.legend()return pltpic_output = './pd_'
for i in range(k):density_plot(data[r[u'聚类类别']==i]).savefig(u'%s%s.png' % (pic_output, i))
分群1的概率密度函数图
分群1特点:R间隔相对较小,主要集中在0~30天;消费次数集中在10~25次,消费金额在500~2000。
分群2的概率密度函数图
分群2特点:R间隔分布在0~30天;消费次数集中在0~12次;消费金额在0~1800。
分群3的概率密度函数图
分群3特点:R间隔相对较大,间隔分布在30~80天;消费次数在0~15次;消费金额在0~2000。
对比分析:分群1时间间隔较短,消费次数多,而且消费金额较大,是高消费、高价值人群。分群2的时间间隔、消费次数和消费金额处于中等水平,代表着一般客户。分群3的时间间隔较长,消费次数较少,消费金额也不是特别的高,是价值较低的客户群体。
数据建模-聚类分析-K-Means算法相关推荐
- 数据建模-聚类分析-K-Means算法 --聚类可视化工具TSNE
使用TSNE口可视化工具显示 数据建模-聚类分析-K-Means算法 #-*- coding: utf-8 -*-import sys reload(sys) sys.setdefaultencodi ...
- kmeans改进 matlab,基于距离函数的改进k―means 算法
摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...
- 数据建模java_数据建模及常见分类算法
数据建模及常见分类算法 数据建模指的是对现实世界各类数据的抽象组织,建立一个适合的模型对数据进行处理.建模流程解读 建模数据的抽取,清洗和加工以及建模算法的训练和优化会涉及大量的计算机语言和技术.比如 ...
- 数据建模及常见分类算法
数据建模及常见分类算法 数据建模指的是对现实世界各类数据的抽象组织,建立一个适合的模型对数据进行处理.建模流程解读 建模数据的抽取,清洗和加工以及建模算法的训练和优化会涉及大量的计算机语言和技术.比如 ...
- k means算法C语言伪代码,K均值算法(K-Means)
1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...
- python 聚类分析 k means
Kmeans 是一种动态聚类方法,其基本思想是:首先随机选取 K 个点作为初始凝聚点,按照距离最近原则划分为 K 类:然后重新计算 K 个类的重心作为新的凝聚点,再按照距离最近原则重新分类:重复这一过 ...
- k均值聚类算法(K Means)及其实战案例
算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...
- 基于SPSS的K均值算法
文章目录 前言 一.K均值算法是什么? 二.动画演示 1.网站 2.示例 三.缺点解决(K-means++算法) 四.SPSS实现 总结 前言 菜鸡学习数学建模 一.K均值算法是什么? K-means ...
- 机器学习第七章之K近邻算法
K近邻算法(了解) 7.1 K近邻算法 7.1.1 K近邻算法的原理介绍 7.1.2 K近邻算法的计算步骤及代码实现 7.2 数据预处理之数据归一化 7.2.1 min-max标准化 7.2.2 Z- ...
最新文章
- 遮罩,在指定元素上进行遮罩
- 【Android View事件分发机制】原理
- Gentoo 安装日记 18(重新配置网络和设置密码)
- 【深度学习】当YOLOv5遇见OpenVINO!
- c语言之-umask()函数
- plsql只提交存储过程里的事务_plsql 存储过程 事务 | 学步园
- python中的字符串操作及注意事项
- html字符串替换src,替换html字符串中img标签src的值.
- 程序员:进不了大厂,就“永无出头之日”了?
- MPLS LDP邻居建立
- 产品经理 需求 项目经理 选择_【产品】产品和项目,产品经理和项目经理 区别...
- java mapxtreme_mapxtreme java 初始化地图
- IT资源书籍999999999本
- 计算机硬件配置及安装,电脑硬件及电脑配置知识大全
- ActiveSync同步使用方法
- 基于2018年世界杯赛事法国队夺冠进球数据分析
- 我是一个没有感情的杀手
- Android_Provision
- 为全面硬件升级做好准备 鑫谷开元T1全塔机箱评测
- 《那些年啊,那些事——一个程序员的奋斗史》——123
热门文章
- 带栩字的优美古诗句_带栩字的名字_以栩字起名-尚名网
- PyCharm:调试遇到问题
- Django终端运行报错:ImportError: DLL load failed while importing _sqlite3: 找不到指定的模块。
- 【PyTorch】eval() ==>主要是针对某些在train和predict两个阶段会有不同参数的层,比如Dropout层和BN层
- spark-submit的使用
- 基于Android的智能家居手持终端系统开发 毕业论文-A
- [Unity][FlowCanvas][NodeCanvas] ForEach 不适合连接 Wait,FSM 的 SubFlowScript 接受不到事件
- [有限元] Ansys Workbench 19.2 平面应力问题分析示例
- ps中如何同图层获取css代码
- CSS3动画 - 图片开关灯阴影动画