21/7/15 读书笔记 聚类分析的基本概念 K均值算法
21/7/15 读书笔记
数据挖掘导论 聚类分析的基本概念
聚类分析,就是将数据划分为多个具有一定意义的子集(称为簇)。与分类问题不同,聚类分析中“类标签”的概念是需要自行进行挖掘的,即进行聚类前并不知道需要分成哪些类。聚类分析的根本目标是找到一种分组方式,将数据对象分组,并使得同组的对象之间相似性高,不同组之间的差异性高,这也使得聚类问题和“划分”和“分割”问题相区分开来。
我们称每个对象组为一个簇,每个簇中选出一个有代表性的对象称为簇原型,所有簇的集合称为聚类。
聚类具有不同的类型,我们可以按以下方式将聚类进行分类:
- 划分聚类 & 层次聚类:划分聚类简单地将所有对象划分成不重叠的子集;层次聚类则是允许嵌套的,我们将其描述为一个有向无环图,每个父结点对应的集合都是其子结点对应集合的并,每个固定层次下的所有结点对应的簇的集合组成一个划分聚类。
- 互斥的 & 重叠的 & 模糊的:互斥的要求各个簇之间不能重叠;重叠的允许一个对象被同时划分到多个簇中;模糊的为对象属于每个簇赋予一个权值,描述其属于该簇的可能性大小。
- 完全聚类 & 部分聚类:完全聚类下所有的对象都可以被分到某个簇中;部分聚类下有的点,比如噪声点、离群点,不会被指派到任何簇。
簇也具有不同的类型,我们按照他们自己的划分依据的不同进行分类:
- 明显分离的:每个对象到同簇每个对象的距离 均不大于 到不同簇中任意对象的距离。
- 基于中心(原型)的:对每个簇选定一个中心(通常为其原型),每个对象到该中心的距离 小于 到其他簇中心的距离。这种依据下的簇通常呈现圆形。
- 基于邻近的:每个对象到同簇某个对象的距离 小于 到不同簇任意对象的距离。
- 基于密度的:在数据空间内,高密度的区域将被视作同一个簇,被低密度的区域分隔开来。
- 基于概念的:基于“概念”进行划分。考虑一张人脸图像,识别出嘴对应位置的图像。这些像素点之间并没有明显的性质上的联系,但是从宏观的模式概念角度看应该属于同一簇。
本书中介绍的主要有三种聚类分析算法:
- K均值算法:基于原型的、互斥的聚类技术,试图发现指定个数(k)个簇,并用定义的质心来代表。
- 凝聚的层次聚类算法:首先将每个点视作一个单点簇,然后重复合并两个最靠近的簇,直到产生单个的包含所有点的簇。
- DBSCAN:基于密度的、互斥的聚类技术,簇的个数由算法来发现,噪声点因为密度小而被忽略,因此属于部分聚类。
数据挖掘导论 K均值
K均值和K中心点是基于原型的聚类技术中最为突出的两个。K均值技术要求使用质心,而质心通常不对应于任何数据点。K中心点技术中选取离质心最近的数据点作为中心点。本书中仅探讨K均值技术及其变种。
基本的K均值算法主要包括以下步骤:
- 从原数据点集中选取K个数据点,作为k个初始质心
- 将数据点集中所有点按照最近邻方式指派到这K个初始质心
- 对于每个簇重新计算质心,返回第二步
- 直到质心不再变化(或变化幅度低于给定阈值),算法结束
接下来探讨一下这个过程中具体使用的技术问题:
- 选择初始质心,拙劣的选取方法可能会使得K均值算法陷入局部最优解,降低最终质量。K均值的质心会在迭代中逐渐移动,但是注意到质心的移动很难跨越距离较远的簇,这使得我们需要严谨考虑选取初始质心的方式。一种较为合理的方式是逐个选取初始质心,使得对于每个后继初始质心,其离已经选取的初始质心的距离是所有可选点中最远的。
- 指派到质心时,需要采用相似度度量,这在我们之前就已经讲到过,通常来说是定义欧几里得距离或者余弦相似性(这取决于数据类型)。
- 重新计算质心,这需要我们给定两个主要指标:如何评价一个质心的优劣?如何选取一个优质的质心?我们将其描述为目标函数和最小化策略。每个最小化策略对应一个目标函数,使得在数学意义上最小化策略一定能够使得目标函数的结果改善。
- 最常采用的是Sum of the Squared Error, SSE(误差平方和)作为目标函数,其值越小,说明这个簇相似度越高。经过数学分析后可以得知,最小化策略为选取所有属性的平均值组成新的数据。通常使用所有簇的总SSE来反映整个聚类的质量。
基本K均值算法的空间需求较小,只需要存储所有数据点和额外的质心数据即可。时间复杂度上与数据点个数线性相关。
接下来我们探讨一下几个技术问题:
- 对于数据中的离群点,有时候它们是有意义的,有时候又可能干扰我们的聚类过程。一种比较直观的方法是在聚类前就通过其他技术识别和删除离群点。也可以在聚类完成后,挑出那些规模较小的簇 以及 对于总SSE贡献明显异常的点(因为这种点很有可能是离群点被指派到某个簇后,导致该簇的SSE大幅上升)。
- 空簇,是指一个簇没有被指派任何对象点,或者非常少。这通常是因为质心移动发生了异常。此时需要重新为该簇指定一个质心。可以指定一个距离当前所有质心都最远的点作为新的质心(这可以将对当前SSE影响最大的点转变为质心从而降低SSE),也可以从SSE最大的簇中找一个点作为质心(这可以分裂一个SSE较大的簇,以期望降低总SSE)。
- 二分K均值现象。我们之前提到质心的移动很难跨越距离较远的簇,但是有一种情况下质心必然能跨越较远的簇:当我们指定K=2,此时无论初始质心在哪里,我们都可以发现质心的移动几乎不受限制地移动到相对合理的位置上,这为我们提出二分K均值技术做下铺垫。
二分K均值
我们递归地考虑K均值聚类问题:
- 此时化一个簇的集合,其中放入一个包含所有数据点的“总簇”
- 从集合中取出一个簇
- 指定一个常数i,重复进行i次2均值聚类,选取总SSE最小的那次生成的两个簇
- 将两个簇放入集合中,返回第二步
- 直到簇表包含K个簇,退出算法
这样的方法使得我们可以有效避免K均值算法陷入SSE局部最优的问题,因为正如我们之前所说的,质心在2均值聚类时几乎可以在全局上自由移动。
动态分裂与合并(用后处理)
这是另一种K均值方法的变种,我们考虑在迭代过程中对每次迭代的结果进行修补来达到避免局部最优的目的,这主要是通过在迭代过程中交替增加和减少簇的数量来实现。
增加簇的数量可以通过:分裂一个SSE较大的簇或者标准差较大的簇,通常选择其中对SSE贡献最大的点作为新的初始质心;指定一个对总SSE贡献最大的点作为新的初始质心。
减小簇的数量可以通过:对于一个对象较少的簇,删除簇对应质心,然后将该簇所有对象点重新指派;选取质心较为接近的两个簇,视作一个簇重新计算质心。
K均值算法的优缺点
K均值算法具有较为合理的时间和空间复杂度,并且只依赖于相似度度量就可以正常工作,因此适用范围较广。
K均值算法不能处理不同尺寸和不同密度的簇,其默认簇的密度是类似的,过于密集而相对靠近的两个簇很可能被聚类为一个簇,而较为稀疏的一个簇可能又被分裂为两个簇。同时K均值是一种基于中心的聚类算法,因此其只能处理球形簇,得出的簇的形态都是接近球形。
当然,任何诡异的形状本质上都能靠多个球形去拟合,因此如果我们提高K值,就可以发现多个簇能够靠数量去拟合不同尺寸、密度、形态的簇(的子簇),不过这就是后话了(书P319 图8-12)。
数据挖掘导论 凝聚的层次聚类方法
层次聚类是本书中介绍的第二种重要的聚类方法(K均值属于划分聚类方法)。这里我们讨论凝聚的,即层次聚类的产生源自对个体簇的合并。注意凝聚的合并每次只合并一对簇。凝聚的层次聚类方法可以用树状统计图的形式表示,其可以显示其各个簇之间合并的次序和合并导致的距离变化。
其中纵轴表示合并后簇内的距离(详见下文介绍),横轴对应所有的单体簇
基本的凝聚的层次聚类算法可以被描述为:
- 计算出能所有单体簇之间的距离的邻近度矩阵(类似于图的邻接矩阵,每个元素代表两个簇之间距离)
- 合并距离最近的两个簇
- 更新邻近度矩阵,重复第二步
- 直到只剩下一个簇
这引出了如何定义簇之间的距离(邻近度度量):每个簇都包含多个对象,我们可以用各自来自两个簇中距离最近或最远的两个点之间距离作为簇之间的距离(MIN或单链、MAX或全链),也可以计算所有点之间的距离然后求平均(组平均),也可以以合并两个簇后导致SSE增加的大小来衡量(Ward方法),或者更直观地,以质心作为簇的代表计算距离(质心方法)。
不同的邻近度度量方案导致最终簇的形成具有各自的特点:
- MIN或单链方法擅长处理非椭圆形状的簇,因为呈条状分布的小簇更容易连线,但是这也使得其对于离群点和噪声很敏感
- MAX或全链方法更偏好形成球状的簇,并且容易让较大的簇破裂,因为簇本身的大小会被计算到距离中
- 组平均和Ward方法有一定类似性,当邻近度被定义为点间距离的平方时,两者的结果非常类似。质心方法也与这二者放在一起讨论,其可能导致倒置现象,即本次合并的距离可能比上次合并后的距离更短,导致树状图中的高度并不呈现严格增高。
这里介绍Lance-Williams公式,其描述了将簇A和簇B合并形成簇C,对于给定的簇P,CP的距离可以用AB、AP、BP间距离的线性组合表示。这种现象对于上述介绍的所有邻近度度量适用,只是每项前的参数(\(a_1,a_2,a_3,a_4\))不同罢了(详见P326 表8-5)。这允许我们在更新邻近度矩阵时无需再从头进行运算,而是利用已知的邻近度矩阵进行迭代即可。
(凝聚的)层次聚类方法的优缺点
层次聚类方法缺乏全局的目标函数,其将最小化SSE的目标拆分为多个局部的问题进行求解(这是好的,因为全局的问题往往不是计算可行的),但是这也使得时间和空间复杂度上升。
合并的决策是最终的,这意味着在算法中任何一步进行簇的合并都无法在未来进行修改。与之对比,K均值算法中我们提到了用后处理的优化方法,类似的优化方式无法用在层次聚类方法中,这妨碍了我们将局部最优解拓展到全局最优解。目前提出了一些方法用于避免决策的最终性,比如移动树的分支、从小簇出发进行凝聚等。
数据挖掘导论 DBSCAN
DBSCAN是一种简单有效的基于密度的聚类算法,本书简要通过其描述了基于密度概念的聚类分析思想。
我们首先需要确定密度的概念:对于每个点,其密度对应于距离该点距离为\(Eps\)内的所有点的个数。
\(Eps\)过大,则每个点的密度都过高,反正则过小。为了确定\(Eps\)的具体所需的值,需要:
- 对所有的点取其最近k邻的距离(即距离该点最近的第k个点),称为k-距离
- 统计所有点的k-距离,并对其按k-距离进行排序
- 可以发现从k-距离最短的点到k-距离最长的点,依次序,前大部分点的距离变化都很均匀平缓,而当k-距离达到一定值之后,点的k-距离值大幅上升(P329 图8-23)
- 此时的k-距离对应我们所取的\(Eps\),该值可以将噪声与离群点同正常点区分开来
同时我们也可以发现,k值的取值并不会大幅影响\(Eps\)取值的变化,在合理的范围内,不同的k值算出的\(Eps\)取值不会大幅改变,这也是我们选择合理的k值的其中一个依据。
当一个点的密度大于一定阈值时,我们称之为核心点;
若点的密度没有达到阈值,但是其处在某个核心点的\(Eps\)范围内,我们称之为边界点;
如果点的密度既不是核心点也不是边界点,那么称之为噪声点;
将所有相互都在各自\(Eps\)范围内的核心点集,加入同样处在范围内的边界点集,作为一个簇。
DBSCAN的优缺点
作为一个基于密度的聚类算法,DBSCAN很好地应对了噪声和离群点,而且对于簇形状没有限制和偏好。但是DBSCAN要求簇的密度变化不能太大,否则就可能将密度较小的簇识别成噪声。而且在较高维度的空间内,密度的定义和计算更为复杂,而且随着数据规模的扩大,复杂度也是快速上升。

浙公网安备 33010602011771号