聚类分析(cluster analysis)是一组将研究对象分为相对同质的群组的统计分析技术。聚类分析也称群分析或点群分析,它是研究多要素事物分类问题的数量方法。在科学研究、社会调查或日常生活中,通过观察个体的特征,将群体中的个体归为不同的族群/簇(Cluster)1。
根据样本自身的属性,用数学方法按照某种相似性或差异性指标,定量地确定样本之间的亲疏关系,并按这种亲疏关系程度对样本进行聚类。
合理的聚类方式应当使得同一族群内的观测尽可能相似,但不同的族群之间有明显区分。
刻画相似度的方式——距离,距离越小越相似月可能聚为同一类。主要有以下几种常见的方式度量:
传统的统计聚类分析方法包括系统聚类法、分解法、加入法、动态聚类法、有序样品聚类、有重叠聚类和模糊聚类等。采用K-均值、k-中心点等算法的聚类分析工具已被加入到许多常用的统计分析软件包中,如SPSS、SAS等。
(1)建立n个初始族群,每个族群中只有一个个体;
(2)计算n个族群间的距离矩阵;
(3)合并距离最小的两个族群,计算新族群间的距离矩阵;
(4)如果组别数为1,转步骤(5),否则转步骤(3);
(5)绘制系统树图;
(6)选择族群个数。
考虑所有的群组组合几乎无法实现,所以一种最常用的聚类方法为层次聚类/系统聚类(hierarchical cluster)。主要有两种方式:
层次聚类过程的结果可以利用图表展示为系统树图(Dendrogram),用来展示层次聚类的每一个步骤及其结果,包括合并族群带来的距离的变化。
本节主要介绍凝聚法。凝聚法每一步需要合并“距离最小的两个族群”,不同族群间距离的定义方法决定了不同的聚类结果。
(1)连接法
可以通过树图的两个族群间的距离进行划分,选择较大距离的点进行划分。同时,需要结合对数据的经验和理解,看聚成多少类更加符合实际情况,或者更易于理解。总结为以下思路:
简单连接聚类/完全连接聚类/平均连接聚类:
library(EXAMPLE)
measure
dm <- dist(measure[,c(“x”,“y”,“z”)])
round(dm,2)
layout(matrix(1:3,nr=1),height=c(2,1))
plot(cs<-hclust(dm,method=“single/complete/average”,main=“single”)
abline(h=3.8, col=“lightgrey”)
为了显示聚类效果,可以画出带族标签的主成分散点图。
plot(body_pc s c o r e s [ , 1 : 2 ] , t y p e = " n " , x l a b = " P C 1 " , y l a b = " P C 2 " , m a i n = " s i n g l e / c o m p l e t e / a v e r a g e " ) l a b < − c u t r e e ( c s , h = 3.8 ) t e x t ( b o d y p c scores[,1:2], type="n", xlab ="PC1", ylab="PC2",main="single/complete/average") lab <- cutree(cs,h=3.8) text(body_pc scores[,1:2],type="n",xlab="PC1",ylab="PC2",main="single/complete/average")lab<−cutree(cs,h=3.8)text(bodypcscores[,1:2], labels=lab, cex=1)
简单连接法存在“链式”问题,倾向于将新的个体归入已存在的族群,而不是创建新的族群。
完全连接聚类和平均连接聚类的结果相似。
层次聚类的缺陷:一旦个体被分为一个族群,它将不可再被归入另一个族群,只可能达到局部最优而非全局最优。
非层次聚类:分割法。分割法中最常用的方法为K-means法。
K-均值法试图寻找k个族群的划分方式,使得划分后的族群内方差(Within group sum of square, WGSS)最小。
(1)选定k个“种子”(cluster seeds)作为初始种群代表;
(2)将每个个体归入距离其最近的种子所在的族群;
(3)归类完成后,将新产生的族群的质心定为新的种子
(4)重复步骤(2)和(3),直到将所有点归类。
需要选择一个使得WGSS足够小(但不是最小)的k值。
用WGSS的碎石图来寻找最优的k,通常选取拐点为量优的k。
pottery_dist
levelplot
绘制WGSS碎石图决定聚类的组别数:
wgss<- rep(0,6)
for (i in 1:6) {wgss[i] <-sum(kmeans(pots,centers =i) KaTeX parse error: Expected 'EOF', got '}' at position 10: withinss)}̲ plot(1:6,wgss,…scores[,1:2],pch =kmeans_3$cluster)
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。
DBScan需要二个参数: 扫描半径 (eps)和最小包含点数(minPts)。 任选一个未被访问(unvisited)的点开始,找出与其距离在eps之内(包括eps)的所有附近点。
如果 附近点的数量 ≥ minPts,则当前点与其附近点形成一个簇,并且出发点被标记为已访问(visited)。 然后递归,以相同的方法处理该簇内所有未被标记为已访问(visited)的点,从而对簇进行扩展。
如果 附近点的数量 < minPts,则该点暂时被标记作为噪声点。
如果簇充分地被扩展,即簇内的所有点被标记为已访问,然后用同样的算法去处理未被访问的点。
具体算法描述如下:
(1)检测数据库中尚未检查过的对象p,如果p未被处理(归为某个簇或者标记为噪声),则检查其邻域,若包含的对象数不小于minPts,建立新簇C,将其中的所有点加入候选集N;
(2)对候选集N 中所有尚未被处理的对象q,检查其邻域,若至少包含minPts个对象,则将这些对象加入N;如果q 未归入任何一个簇,则将q 加入C;
(3)重复步骤2),继续检查N 中未处理的对象,当前候选集N为空;
(4)重复步骤1)~3),直到所有对象都归入了某个簇或标记为噪声。
在市场营销中,基于消费者的历史交易信息、消费者背景等对消费者进行划分,从而对不同类型的消费者实施不同的营销策略。
在金融领域,为获得较为平衡的投资组合,需要首先基于一系列金融表现变量(如回报率、波动率、市场资本等)对投资产品(如股票、基金等)进行归类。
聚类分析被用来对动植物分类和对基因进行分类,获取对种群固有结构的认识。
聚类分析通过一个高的平均消费来鉴定汽车保险单持有者的分组,同时可根据住宅类型、价值、地理位置来鉴定一个城市的房产分组。
相关笔记:
本文主要根据个人学习(多元统计分析MOOC),并搜集部分网络上的优质资源总结而成,如有不足之处敬请谅解,欢迎批评指正、交流学习!
多元统计分析MOOC ↩︎
DBSCAN百度百科 ↩︎