(1)划分聚类算法:也称为基于距离的聚类算法,此类算法中,簇的数量是随机选择的或最初给定的。属于这一类的算法有K-Meansl,PAM,CLARANSI等。
K-means聚类算法的不足之处在于它要多次扫描数据库,此外,它只能找出球形的类,而不能发现任意形状的类。还有,初始质心K的选择对聚类结果有较大的影响,该算法对噪声很敏感。
划分方法具有线性复杂度,聚类的效率高的优点。然而,由于它要求输入数字k确定结果簇的个数,并且不适合于发现非凸面形状的簇,或者大小差别很大的簇,所以这些启发式聚类方法对在中小规模的数据库中发现球状簇很适用。为了对大规模的数据集进行聚类,以及处理复杂形状的聚类,基于划分的方法需要进一步的扩展。
(2)分层聚类算法:它们将对象集划分为不同级别的组,并形成树状结构。要分为不同级别,通常需要最大数量的簇。常见有CURE算法。
层次方法对给定数据对象集合进行层次的分解。根据层次的分解如何形成,层次的方法可以分为凝聚的和分裂的。凝聚的方法,也称为自底向上的方法,一开始将每个对象作为单独的一个组,然后相继地合并相近的对象或组,直到所有的组合并为一个(层次的最上层),或者达到一个终止条件。分裂的方法,也称为自顶向下的方法,一开始将所有的对象置于一个簇中,在迭代的每一步中,一个簇被分裂为更小的簇,直到最终每个对象在单独的一个簇中,或者达到一个终止条件。
(3)基于密度的聚类算法:是以数据集在空间分布上的稠密程度为依据进行聚类,该类算法无需预设簇的数目,只需给定簇的半径,适用于对未知内容的数据集进行聚类。代表性算法包括DBSCAN、 DENCLUE和OPTICS。
绝大多数划分方法基于对象之间的距离进行聚类,这样的方法只能发现球状的簇,而在发现任意形状的簇上遇到了困难。随之提出了基于密度的另一类聚类方法,其主要思想是:只要邻近区域的密度(对象或数据点的数目)超过某个阈值,就继续聚类。也就是说,对给定类中的每个数据点,在一个给定范围的区域中必须至少包含某个数目的点。这样的方法可以用来过滤“噪声”孤立点数据,发现任意形状的簇。
对于有大量“噪声”的数据集合,它有良好的聚类特征;对于高维数据集合的任意形状的聚类,它给出了一个基于树的存储结构来管理这些单元,因此比一些有影响的算法(如DBSCAN)速度要快。但是,这个方法要求对密度参数σ和噪声阈值ξ进行仔细的选择,如果选择不当则可能显著地影响聚类结果的质量。
(4)基于网格的聚类算法:STING,DCluster,Wavecluster。
基于网格的方法把对象空间量化为有限数目的单元,形成了一个网格结构。所有的聚类操作都在这个网格结构(即量化的空间)上进行。
STING聚类的质量取决于网格结构的最低层的粒度。如果粒度比较细,处理的代价会显著增加;但是,如果网格结构最低层的力度太粗,将会降低聚类分析的质量;而且,STING在构建一个父亲单元时没有考虑孩子单元和其相邻单元之间的关系,因此,结果簇的形状是isothetic,即所有的聚类边界或者是水平的,或者是竖直的,没有对角的边界。尽管该技术有快速的处理速度,但可能降低簇的质量和精确性。
WaveCluster(Clustering with Wavelets)采用小波变换聚类,它是一种多分辨率的聚类算法,它首先通过在数据空间上加一个多维网格结构来汇总数据,然后采用一种小波变换来变换原特征空间,在变换后的空间中找到密集区域。它给出的的聚类结果是一组不同分辨率的聚类组,需要应用者根据需求自己确定提取某个聚类结果。
(5)高维数据的聚类算法:CLIOUE,HPStream。
CLIQUE(Clustering In QUEst)算法综合了基于密度和基于网格的聚类方法,它的中心思想是:首先,给定一个多维数据点的集合,数据点在数据空间中通常不是均衡分布的。CLIQUE区分空间中稀疏的和“拥挤的”区域(或单元),以发现数据集合的全局分布模式。接着,如果一个单元中的包含数据点超过了某个输入模型参数,则该单元是密集的。在CLIQUE中,簇定义为相连的密集单元的最大集合。
CLIQUE算法能自动发现最高维中所存在的密集聚类;它对输入数据元组顺序不敏感;也不需要假设(数据集中存在)任何特定的数据分布;它与输入数据大小呈线性关系;并当数据维数增加时具有较好的可扩展性。但是,在追求方法简单化的同时往往就会降低聚类的准确性。
基于聚类的技术有以下优点:(1)聚类算法属于无监督算法,无需训练集,算法简单快速,时间复杂度较低。(2)对不同的数据类型具有鲁棒性,适用于多种数据集。但是也有局限性: (1)算法一般都需要参数,聚类结果对于输入参数高度敏感。(2)对于初始化阶段的离群点非常敏感,会直接影响到聚类的效果。
几种常用的聚类算法从可伸缩性、适合的数据类型、高维性(处理高维数据的能力)、异常数据的抗干扰度、聚类形状和算法效率6个方面进行了综合性能评价,评价结果如表1所示:
算法名称 | 可伸缩性 | 适合的数据类型 | 高维性 | 异常数据的抗干扰性 | 聚类形状 | 算法效率 |
WaveCluster | 很高 | 数值型 | 很高 | 较高 | 任意形状 | 很高 |
ROCK | 很高 | 混合型 | 很高 | 很高 | 任意形状 | 一般 |
BIRCH | 较高 | 数值型 | 较低 | 较低 | 球形 | 很高 |
CURE | 较高 | 数值型 | 一般 | 很高 | 任意形状 | 较高 |
K-Prototypes | 一般 | 混合型 | 较低 | 较低 | 任意形状 | 一般 |
DENCLUE | 较低 | 数值型 | 较高 | 一般 | 任意形状 | 较高 |
OptiGrid | 一般 | 数值型 | 较高 | 一般 | 任意形状 | 一般 |
CLIQUE | 较高 | 数值型 | 较高 | 较高 | 任意形状 | 较低 |
DBSCAN | 一般 | 数值型 | 较低 | 较高 | 任意形状 | 一般 |
CLARANS | 较低 | 数值型 | 较低 | 较高 | 球形 | 较低 |
(1)聚类结果是排他的还是可重叠的
为了很好理解这个问题,我们以一个例子进行分析,假设你的聚类问题需要得到二个簇:“喜欢詹姆斯卡梅隆电影的用户”和“不喜欢詹姆斯卡梅隆的用户”,这其实是一个排他的聚类问题,对于一个用户,他要么属于“喜欢”的簇,要么属于不喜欢的簇。但如果你的聚类问题是“喜欢詹姆斯卡梅隆电影的用户”和“喜欢里奥纳多电影的用户”,那么这个聚类问题就是一个可重叠的问题,一个用户他可以既喜欢詹姆斯卡梅隆又喜欢里奥纳多。
所以这个问题的核心是,对于一个元素,他是否可以属于聚类结果中的多个簇中,如果是,则是一个可重叠的聚类问题,如果否,那么是一个排他的聚类问题。
(2)基于层次还是基于划分
其实大部分人想到的聚类问题都是“划分”问题,就是拿到一组对象,按照一定的原则将它们分成不同的组,这是典型的划分聚类问题。但除了基于划分的聚类,还有一种在日常生活中也很常见的类型,就是基于层次的聚类问题,它的聚类结果是将这些对象分等级,在顶层将对象进行大致的分组,随后每一组再被进一步的细分,也许所有路径最终都要到达一个单独实例,这是一种“自顶向下”的层次聚类解决方法,对应的,也有“自底向上”的。其实可以简单的理解,“自顶向下”就是一步步的细化分组,而“自底向上”就是一步步的归并分组。
(3)簇数目固定的还是无限制的聚类
这个属性很好理解,就是你的聚类问题是在执行聚类算法前已经确定聚类的结果应该得到多少簇,还是根据数据本身的特征,由聚类算法选择合适的簇的数目。
(4)基于距离还是基于概率分布模型
基于距离的聚类问题应该很好理解,就是将距离近的相似的对象聚在一起。相比起来,基于概率分布模型的,可能不太好理解。一个概率分布模型可以理解是在 N 维空间的一组点的分布,而它们的分布往往符合一定的特征,比如组成一个特定的形状。基于概率分布模型的聚类问题,就是在一组对象中,找到能符合特定分布模型的点的集合,他们不一定是距离最近的或者最相似的,而是能完美的呈现出概率分布模型所描述的模型。