聚类分析是一种数据归约技术,旨在揭露一个数据集中观测值的子集。它可以把大量的观测值归约为若干类。最常用的两种聚类方法是层次聚类(hierarchical agglomeration clustering)和划分聚类(partitioning clustering)。在层次聚类中,每一个观测值自成一类,这些类每次两两合并,直到所有的类合并成一类为止。在划分聚类中,首先指定类的个数K,然后观测值被随机分成K类,再重新形成聚合的类。
一、聚类分析的一般步骤
- 选择合适的变量。第一步是选择你感觉可能对识别和理解数据中不同观测值分组有重要影响的变量。
- 缩放数据。如果我们在分析中选择的变量变化范围很大,那么该变量对结果的影响也是最大的。这往往是不可取的,分析师往往在分析之前缩放数据。最常用的方法是将每个变量标准化为均值为0标准差为1的变量。通常可以使用scale()函数来将变量标准化到均值为0何标准差为1的变量。
- 寻找异常点。许多聚类方法对异常值是十分敏感的,它能扭曲我们得到的聚类方案。
- 计算距离。尽管不同的聚类算法之间的差异很大,但是它们它们通常需要计算被聚类的尸体之间的距离。两个观测值之间最常用的距离度量是欧几里得距离,其他可选距离包括曼哈顿距离、兰氏距离等。
- 选择聚类算法。接下来选择对数据聚类的方法,层次聚类对于小样本来说很实用(如150个观测值或更少),而且这种情况下使用嵌套聚类更实用。划分的方法能处理更大的数据量,但是需要事先确定聚类的个数。一旦选定了层次方法和划分方法,就必须选择一个特定的聚类算法。
- 获得一种或多种聚类方法。
- 确定类的数目。为了得到最终的聚类方案,你必须确定类的数目。
- 获取最终的聚类解决方案。一旦类的个数确定下来,就可以提取出子群,形成最终的聚类方案了。
- 结果可视化。可视化可以帮助你判定聚类方案的意义和用处。层次聚类的结果通常表现为一个树状图。划分的结果通常利用可视化双变量聚类图来表示。
- 解读类。一旦聚类方案确定,你就必须解释(或命名)这个类。一个类中的观测值有何相似之处?不同类之间的观测值有何不同?这一步通常通过获得类中的每一变量的汇总统计来完成。对于连续数据,每一类中变量的均值和中位数都被计算出来。对于混合数据(数据中包括分类变量),结果中将返回各类的众数或类别分布。
- 验证结果。验证聚类方案相当于问:“这种划分结果并不是因为数据集或聚类方法的某种特性,而是确实给出了一个某种程度上有实际意义的结果吗?”如果采用不同的聚类方法或不同的样本,是否会产生相同的类?fpc、clv、和clValid包包含了评估聚类解的稳定性的函数。
二、计算距离
聚类分析的第一步都是度量样本单元间的距离、相异性或相似性。R软件中自带dist()函数能用来计算矩阵货数据框中所有行(观测值)之间的距离。合适是dist(x,method=?),这里的x表示输入数据,并且默认使用的方法为欧几里得距离。函数默认返回一个下三角矩阵,但是as.matrix()函数可使用标准括号符号得到距离。对于营养数据集的数据框来说,前四行的距离为:
> d <- dist(nutrient) > as.matrix(d)[1:4,1:4] BEEF BRAISED HAMBURGER BEEF ROAST BEEF STEAK BEEF BRAISED 0.00000 95.6400 80.93429 35.24202 HAMBURGER 95.64000 0.0000 176.49218 130.87784 BEEF ROAST 80.93429 176.4922 0.00000 45.76418 BEEF STEAK 35.24202 130.8778 45.76418 0.00000
需要注意的是,在营养数据集中,距离很大程度上有能量(energy)这个变量控制,这是因为该变量变化范围更大。缩放数据有利于均衡各变量的影响。
三、层次聚类
如前所述,在层次聚类中,起初每一个实例或观测值属于一类。聚类就是把每一次把两类聚成新的一类,直到所有的类聚成单个类为止,算法实现如下:
(1)定义每个观测值为一类
(2)计算每类和其他各类的距离
(3)把距离最短的两类合并成一类,这样类的个数就减少一个
(4)重复步骤(2)和(3),直到包含所有观测值的类合并成单个类为止
在层次聚类算法中,主要的区别是它们对类的定义不同(步骤2)。常用的五种聚类方法和其中两类之间的距离的定义如下:
(1)单联动。一个类中的点到另一个类中的点的最小距离。
(2)全联动。一个类中的点到另一个类中的点的最大距离。
(3)平均联动。一个类中的点和另一个类中的点的平均距离。
(4)质心。两类中质心(变量均值向量)之间的距离。对于单个观测值来说,质心就是变量的值。
(5)Ward法。两个类之间所有变量的方差分析的平方和
单联动聚类方法倾向于发现细长的、雪茄型的类。它也通常展示一种链式现象,即不相似的观测值分到一类中,因为它们和它们的中间值很相像。全联动聚类倾向于发现大致相等的直径紧凑类。它对异常值很敏感。