一.聚类分析cluster Analysis)是研究物以类聚的现代统计方法。在过去是依靠经验和专业知识做定性分析处理,很少利用数学方法多元统计分析逐渐被引进数值分类,形成聚类分析的分支。
思想:认为所研究的样本或指标(变量)之间存在着不同程度的相似性(亲疏关系)。于是根据一批样本的多个观测值指标,具体找出可以度量样本之间相似的统计量,以这些统计量作为划分类型的依据,把一些相似程度较大的样本聚合为一类,把另外一些彼此之间相似程度较大的样本又聚为一类,关系密切的聚合完毕,把不同类型的一一划分起来形成小到大的分类系统。
分型:Q型聚类:对样本的聚类;R型聚类:对变量的聚类
聚类统计量:1.距离:欧式距离,马氏距离,兰氏距离2.相似系数。(推理过程不展开了,可以网上搜索)
二.系统聚类法
(1)基本思想:确定了距离和相似系数后就要进行分类,有多种分类方法,最常用是样品自成一类,然后把每次具有最小距离的两类进行合并,合并后继续计算类与类之间的距离,这个过程是一直持续到把所有样本归为一类,并把这个过程作成一张聚类图,由聚类图进行方便的分类。
(1)最短距离法(single):类与类之间的距离等于两类之间最靠近样本的距离。
(2) 最长距离法(complete):类与类之间的距离等于两类之间最远样本之间的距离。
(3)中间距离法(median):最长距离夸大了类间的距离,最短距离低估了类间距离。介于两者之间的距离称为中间距离。
(4)类平均法(average):类与类之间的距离等于各元素的两两之间的平方距离。
(5)重心法(centroid):定义为重心的距离
(6)离差平方和法(ward)基于方差分析,如果分类正确,那么同类之间的离差平方和会非常小,反之,则比较大。
三.基本步骤:
(1)计算距离阵
计算n个样品之间的两两距离D
(2)进行系统聚类
构造n个类,每个类只包含一个样本;合并距离最近的两个类为新的一类;计算新类与当前各类的距离,如果类的个数为1,结束;否则回到步骤2;
(3)绘制聚类图
(4)画出分类框rect.hclust()给系统聚类图加分类框
(5)确定分类结果,cutree()给出具体的分类结果
四.具体案例(源代码)
研究全国31个省市区2007年的城镇居民生活消费水平分布规律,根据调查资料做区域消费类型划分。
plot(hclust(D,'single'))#最短距离法
结果如下:
plot(hclust(D,'complete'))#最长距离法
plot(hclust(D,'average'))#平均距离法
plot(hclust(D,'ward.D'))#ward.D法
plot(hclust(D,"ward.D2"))#ward.D2法
经过以上图像的分析,使用ward.D2方法的聚类的效果较好,况且认为分为四类比较好。
H=clust(D,'ward.D2')
rect.hclust(H,4)
cutree(H,4)
因此根据原表格的数据分四类
北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海
1 2 3 3 3 4 3 3 1
江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西
2 1 4 2 4 3 3 4 4 1 4
海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆
4 4 4 4 4 4 4 3 3 3 3
总结一下:
第一类:北京,上海,浙江,广东
第二类:天津,江苏,福建
第三类:河北,山西,内蒙古,吉林,黑龙江,山东,河南,甘肃,青海,宁夏,新疆
第四类:辽宁,安徽,江西,湖北,湖南,广西,海南,重庆,四川,贵州,云南,西藏,陕西
四.快速聚类法
K-means法基本思想是将每一个样品分配给最近的中心(均值)的类中
步骤:
(1)将所有的样品分为k类
(2)通过欧几里得距离将某个样品划入离中心最近的类中,并获得样品与失去样品的类,重新计算中心的坐标。
(3)重复步骤(2),直到所有的样品都不能分配为止
系统聚类对不同的类数产生一系列的聚类结果,而K值只能产生指定类数的聚类结果。
计算原理:K-means法以k为参数,把n个对象分为k类,使类内具有较高的相似度,而且类间的相似度较低。相似度的计算是根据类中对象的均值来进行的。首先随机选择k个对象,每个对象初始地代表了一个簇的平均值或者中心。对剩余的每个对象,根据其与各个聚类中心的距离将它赋给最近的簇。然后重新计算每个簇的平均值作为聚类中心进行聚类。每个过程不断重复,直到准则函数收敛。
E=∑∑ (p-m(i) )^2
E为数据中所有对象与相应聚类中心的均方差之和,p代表对象空间中的一个点,m(i)为C(i)的均值。
K-means算法
输入:聚类个数k,以及包含n个对象的数据
输出:满足平方误差准则最小的k个聚类
(1)从n个数据对象任选k个对象作为初始簇中心
(2)循环下述流程(3)和(4)
(3)计算每个对象与每个簇中对象的均值(中心对象)的距离,并根据最小距离重新对相应的对象进行划分
(4)重新计算每个簇的均值。
五.案例研究
set.seed(123)
x1=matrix(rnorm(1000,0,0.3),ncl=10))
x2=matrix(rnorm(1000,1,0.3))
X=rbind(x1,x2)
H=hclust(dist(X))
plot(H)
rect.hclust(H,2)
cutree(H,2)
km=kmeans(X,2)
km$cluster
plot(X,pch=km$cluster)
设定均值分布为0,1的两类随机数矩阵
结果如下:
是不是非常准确的把均值不同的值分开了
> H=hclust(dist(X))
> plot(H)
> rect.hclust(H,2)
> cutree(H,2)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[29] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[57] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[85] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2
[113] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[141] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[169] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[197] 2 2 2 2
六.值得关注的几个点:
k-means算法只有在类的平均值被定义的情况下才能使用,这可能不适合某类应用。例如设计分类性质的数据,要求用户必须事先给出k(要生成类的数目),可以算是该算法的一个缺点。另外,k-means算法不适合于发现非凸面形状或者大小差别很大的类。而且他对“噪声”和鼓励点的数据是敏感的,少量的数据对数据产生极大的影响。
k-means算法有很多变种。他们可能k个平均值的选择,相异度的计算和计算聚类平均值的策略上有所不同
聚类分析根据对象不同分为Q型和R型聚类分析。
通常测量的尺度:间隔尺度,有序尺度,名义尺度
距离和相似系数分别反映了样品和变量之间的形似程度。相似程度越高,一般两个样品间的距离就越小,变量间的相似系数的绝对值就越大。
系统聚类法是常用的一种聚类法,常用的系统聚类方法有最短的距离法,最长的距离法,中间距离法,类平均法,重心法,离差平方和等。